• 第16节_BLE协议GAP层


    学习资料:官方手册

    Vol 3: Core System Package [Host volume]

              Part C: Generic Access Profile

    下面这个图是BLE协议各层跟医院的各个科室的类比图:

    每个医院的大堂都有些约定:

    ① 大堂里有医院的介绍,你可以根据它确定这个医院是否适合你;

    ② 有急救通道

    ③ 要挂号,挂号后你跟医院才建立了联系,才能去找医生看病。

    重点在于:怎么确定医院(是否适合你)、怎么建立联系。

    在BLE里,也有一些约定用来发现设备、连接设备,在GAP里定义这些约定。GAP是一个Profile(规范)。这个规范里,它要用到LL层、L2CAP层、SM层、ATT层、GATT层的功能。

    想想这4个设备:

    1. 超市每个货架那里有一个蓝牙设备,它不断向周边发出广告信息:你肯定不想连接它

    2. 用电池供电的手环:平时它为了省电什么都不做,你要发现、连接它,首先要按一下按钮

    3. 家里用插座供电的闹钟:它不需要省电,它可以一直发出广播信息。

    4. 你的手机

    上述设备的角色(Role)、所处的模式(Mode)、能执行的操作或规程(Procedure),由GAP定义。比如:

    1. 货架上的蓝牙设备:

    它的角色是:Broadcaster,广播者。只广播信息,别人不可能也没必要去连接它。

    2. 手环:

    它的角色是:Peripheral,外围设备。它可以处于这种模式:Limited Discoverable Mode,有限可发现模式。按下它的按钮的一小段时间里,可以用手机去发现它;超时之后,手机无法发现它。

    对应的,手机的Role是Central中央设备,它要执行这2种规程(Procedure)之一才能发现这个手环

    ① Limited Discovery Procedure

    ② General Discovery Procedure

    3. 闹钟:

    它的角色是:Peripheral,外围设备。它可以处于这种模式:General Discoverable Mode,普通可发现模式,一直发出广播信号

    对应的,手机的Role是Central,中央设备,它要执行这种规程(Procedure)才能发现这个手环:General Discovery Procedure

    4. 手机

    即可能是Observer,也可能是Central。

    当它去获得货架广告机的信息时,它是Observer;

    当它去尝试连接手环、闹钟时,它是Central。

    下面细说。

    一、广播数据的格式定义:

    在LL层里对广播包的格式有过定义,但是对于其中传输的广播数据,它的格式是在GAP中定义的。

    对于ADV_IND类型的广播包,它的Payload也是在LL层定义的,如下:

    但是,其中的AdvData格式是在GAP层定义的:

    总结起来有2个概念:PDU Type、AD Type,如下:

    1. LL层可以发出各种不同PDU Type的广播包,比如:可连接的、不可连接的等等

    2. 某种PDU Type的广播包中,还可以进一步定义它的AD Type

      在GAP中,可以设置广播类型(AD Type),比如Discoverable Mode

    二、BLE GAP层中的角色(Role):

    GATT层从数据的提供、使用者角度,提出了server、client的概念。

    GAP则从数据的发起、接收者角度,提出了以下4个角色(Role)的概念:

    1. Broadcaster,广播者

    发出广播信号,可以没有无线接收器。

    2. Observer,观察者

    接收广播信号,可以没有无线发送器。

    3. Peripheral,外围设备

    可以跟其他设备建立连接,建立连接时它是被动的一方。

    既含有无线发送器,也含有无线接收器。

    4. Central,中央设备

    可以跟其他设备建立连接,建立连接时它是主动的一方。

    既含有无线发送器,也含有无线接收器。

     

    这些角色在物理层、LL层上能进行的操作如下:

    三、Broadcast Mode and Observation Procedure:

    处于Broadcast Mode的设备,可以发出这2种事件之一:

    ① non-connectable and non-scannable undirected events

    ② non-connectable and non-scannable directed advertising events

    怎么发出呢?在LL层规范里显示,是使用ADV_NONCONN_IND的广播包实现第①种事件的:

    在上图中的ADV_NONCONN_IND的广播包里,广播数据中的AD Type要设置这2个位为0:

    ① LE General Discoverable Mode

    ② LE Limited Discoverable Mode

    对于第②种事件,在LL层规范里也有描述,但是没有图。它是使用ADV_EXT_IND广播包实现来实现的。ADV_EXT_IND广播包是在BLE 5.0规范里才引入了,我们没有讲解它。

    处于Broadcast Mode的设备发出的广播操作,别人怎样来接收它们?要使用Observation Procedure来接收

    Observation Procedure有2种方法:主动扫描(active scanning)、被动扫描(passive scanning)

    四、Discoverability modes and procedures:

    1. Non-Discoverable Mode

    不可发现模式,这很少用到。

    在这种模式下,其发出的广播包中的AD Type要设置这2个位为0

    ① LE General Discoverable Mode

    ② LE Limited Discoverable Mode

    问题就来了,既然“不想被别人发现”,为何还要发出广播包?

    这完全是各个蓝牙设备都遵守这样的君子约定

    ① 设备A发出广播报文,但是在其中的AD Type中表示自己是“不可发现”的

    ② 设备B的Controller,肯定可以接收到这个广播包,上传到Host,解析出其中的AD Type

    ③ 设备B的Host,是个“君子”,不在UI界面中显示设备A;但是也许设备B可以自动连接设备A

    2. Limited Discoverable Mode

    有限可发现模式,为了省电,某些设备可能要先按一下按键,它才发出广播报文;并且过一段时间后,它就继续休眠。

    我们使用手机查找蓝牙设备时,可能会列出很多个设备,处于“有限可发现模式”的设备应该显示在列表的最上面,因为它最紧迫。

    在这种模式下,其发出的广播包中的AD Type要设置这个位为1

    LE Limited Discoverable Mode

    3. General Discoverable Mode

    一般可发现模式,跟“有限可发现模式”相比,它可以一直发出广播报文

    在这种模式下,其发出的广播包中的AD Type要设置这个位为1:

    LE General Discoverable Mode

    4. Limited Discovery Procedure

    5. General Discovery Procedure

     

    五、Connection modes and procedures:

    1. Non-Connectable Mode

    不可连接模式

    2. Directed Connectable Mode

    定向连接模式,

    如果希望快速连接中央设备,外围设备可以使用该模式。

    在该模式下,它发出ADV_DIRECT_ADV广播报文,直接发给指定的中央设备。

    所以,该外围设备应该曾经与该中央设备建立过连接。

    ADV_DIRECT_ADV广播报文的发送频率很快,该模式最多持续1.28S,之后控制器自动停止广播。

    3. Undirected Connectable Mode

    无向连接模式。

    如果一个外围设备无需快速建立连接,或者打算尽可能地省电,则可以使用该模式。

    它发出ADV_IND广播报文。

    4. Auto Connection Establishment Procedure

    自动连接建立规程。

    中央设备使用该规程来设置控制器,从而向一个或多个外围设备,自动地建立连接。Host需要事先把想要连接的设备,写入“白名单”中。

    它有个缺点:对所有的设备,都只能使用一套基本连接参数

    5. General Connection Establishment Procedure

    一般连接建立规程。

    这是我们常用的规程,先扫描出设备,选中某一个,然后使用“直接连接建立规程”去连接它。

     

    6. Selective Connection Establishment Procedure

    选择性连接建立规程。

    Host先把想连接的设备放入Controller的“白名单”。正在广播的设备,只有在白名单上的才会被提交给Host。

    Host决定是否连接该设备,并使用不同的参数去连接它。相比于“自动连接建立规程”,“选择性连接建立规程”可以使用不同的参数连接每一个设备。

    7. Direct Connection Establishment Procedure

    定向连接建立规程,直接去连接指定的设备。

    8. Connection Parameter Update Procedure

    连接参数更新规程。

    参考 VOL6, Part B, 5.1 LINK LAYER CONTROL PROCEDURES

    9. Terminate Connection Procedure

    终止连接规程。

    中央设备或外围设备都可以执行该规程,通过LL层向对方发出LL_TERMINATE_IND PDU就可以。

    六、Security modes and procedures:

    留待SM层再讲。

    七、GAP服务:

    每一个中央设备或外围设备中,都有一个GAP Service

    GAP Service中,至少有这2项Characteristic

    ① Device Name,设备名字

    ② Appearance,中央设备根据它来显示一个图标、字符串等,用来形象地描述设备的功能。

  • 相关阅读:
    LeetCode 669. 修剪二叉搜索树(Trim a Binary Search Tree)
    LeetCode 872. 叶子相似的树(Leaf-Similar Trees)
    LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)
    LeetCode 223. 矩形面积(Rectangle Area)
    LeetCode 704. 二分查找(Binary Search)
    LeetCode 74. 搜索二维矩阵(Search a 2D Matrix)
    LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II) 37
    Html5 Css实现方形图片 圆形显示
    css 图片 圆形显示区域
    Visual Studio常用的快捷键
  • 原文地址:https://www.cnblogs.com/-glb/p/11617695.html
Copyright © 2020-2023  润新知