以蓝牙为背景剖析无线通信原理以及协议栈 (5)

  Initiating状态和Scanning状态类似,只不过它的关注点不一样:它不关心广播数据,只关心ADV_DIRECT_IND和ADV_IND两类消息,并在符合条件的时候,发出CONNECT_REQ,请求建立连接。

3.3.6 设备过滤机制

  如果多个BLE设备同时发广播,Scanner怎么过滤自己不想要的广播,这时候设备过滤机制的白名单就上场了。LL层的白名单针对PDU三种类型(Advertising, Scanning, Initiating)分别有一个白名单,这个白名单可以设置。        

 3.4 HCI

  HCI层将Link Layer层提供的功能封装成Command和Event。

3.4.1 HCI Command/Event模式

  HCI Command格式:(参考“BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E]”)

           

以蓝牙为背景剖析无线通信原理以及协议栈

  其中OCF和OGF组成16bit的操作码,Parameter Total Length,指示该Command所有参数长度,Parameter1、Parameter2、等等,16 bits的参数,由具体的Command决定。

  HCI Event格式:

         

以蓝牙为背景剖析无线通信原理以及协议栈

3.4.2 广播通信相关的HCI Command

  BLE相关的HCI Comman使用的HCI Command的OGF都是0x08。

Advertising状态有关的命令

1)HCI_LE_Set_Advertising_Parameters

设置广播参数,包括Advertising Interval、Advertising Type、本机的地址类型、对端设备的地址类型和地址、所使用的物理Channel的map、Advertising白名单等。

2)HCI_LE_Set_Advertising_Data

设置广播数据,OCF为0x0008,Command参数的格式如下:

例如,

以蓝牙为背景剖析无线通信原理以及协议栈

下划线依次代表OGF、OCF、Advertising Data Length、Advertising Data。

3)HCI_LE_Set_Scan_Response_Data

设置Scan请求时的应答数据,OCF为0x0009,格式和HCI_LE_Set_Advertising_Data一样。

4)HCI_LE_Set_Advertise_Enable

控制Advertising的使能与否,ICF为0x000a,命令参数包括一个8 bits的“Advertising Enable”,如下:

hcitool -i hci0 cmd 0x08 0x000A 01

Scanning状态有关的命令

1)HCI_LE_Set_Scan_Parameters

设置scan参数,包括Scan Type、Scan Interval、Scan Window、本机的地址类型、Scanning白名单等。

2)HCI_LE_Set_Scan_Enable

Scan动作的开关,其数据格式和HCI_LE_Set_Advertise_Enable一致。

Initiating状态有关的命令

1)HCI_LE_Create_Connection

建立连接,可指定Sca Interval、Scan Window、Initiator Filter Policy、Peer Address Type、Peer Address、Own Address Type等Initiating有关的参数,也可以指定连接相关的参数。

2)HCI_LE_Create_Connection_Cancel

取消连接。

白名单有关的命令

包括:

HCI_LE_Read_White_List_Size,获取BLE Controller的白名单大小;

HCI_LE_Clear_White_List,清空白名单;

HCI_LE_Add_Device_To_White_List,将设备添加到白名单;

HCI_LE_Remove_Device_From_White_List,将设备从白名单移除;

3.5 GAP

3.5.1 GAP定义

  对于广播通信,GAP主要的工作是Link Layer的“协议语言”,如Advertising、Scanning、Initiating等,转换为更为直观的“人类语言”以及定义扫描数据和广播数据的统一规范。

  GAP层把Link Layer层的状态进行了又一次抽象,分别如下:

  1)广播模式以及解析过程。GAP为该模式下的设备定义了两个角色(GAP role):Broadcaster(具有“Broadcast mode”能力)和Observer(具有“observation procedure”能力。

  2)发现模式以及对应的发现过程。GAP为该模式下的设备定义了两个角色:Peripheral(被发现的设备)和Central(主动发现别人的设备)。不同的设备可以选择具有以下能力:

Non-Discoverable mode,不可被发现,设备不会广播任何数据;Limited Discoverable mode,可被发现(有限的),指设备只会在有限的一段时间内,广播数据;General Discoverable mode,可被发现(通用的);Limited Discovery procedure ,可执行有限的发现操作,可发现处于“Limited Discoverable mode”的设备;General Discovery procedure ,可执行通用的发现操作,可发现处于“Limited Discoverable mode”和“General Discoverable mode”的设备;Name Discovery procedure,可进行Name的发现操作。如果通过Scanning操作没有得到广播设备的名称,使用该过程,可以在建立连接之后,再获取对方的名字。

  3)连接模式以及对应的连接过程。所有四种角色的设备,Peripheral、Central、Broadcaster和Observer都可能涉及连接模式。

设备可以选择连接有关的模式:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdpjp.html