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都可能涉及连接模式。
设备可以选择连接有关的模式: