...
接收端负责扫描广播信息,以第4小节中的被动扫描为例,其流程如下:
客户端也可以进行主动扫描,其流程如下:
GATT服务端广播流程:
- 注册GATT APP ID,触发注册APP ID成功事件,此时可以设置GAP广播数据,以及广播扫描应答数据。
- 触发GAP广播数据设置完成事件和广播扫描应用数据设置成功事件。
- 检测到广播数据设置成功后,使能GAP广播。
- 触发GAP开始广播成功事件,表示已经开始广播了。
- 主动停止广播,触发停止广播成功事件。
GATT广播数据解析
参考Core spec V5.0,Vol3 → Part C → 11小节。
关于AD Type,在上面的Assigned Numbers文档有描述,在Common Data Types章节,以下是一个广播数据示例。
以第一行0x02, 0x01, 0x06为例,0x02表示后面的数据长度为2,0x01表示这是一个标志数据,后面的0x06可以参考Core spec的补充文档查找其含义。
关于device name,广播数据中的device name是用于显示在扫描后的local name中的,而在程序中设置的name是用于在BLE调试助手上显示的。比如XM的所有蓝牙配网设备用BLE调试助手搜索出来的名字都是XM,但由于每个设备广播数据中的device name都不一样,所以在APP上还是可以区分出设备类型。
关于广播数据的长度,可参考Core spec V5.0,Vol6 → Part B → 2.3.1小节。广播数据区分legacy pdu和extended pdu,对应传统蓝牙(4.0, 4.2)和蓝牙5.0(2.3.4小节)。蓝牙5.0通过fragmentation技术,可以发送最大1650字节的广播数据。在设备广播参数时可以指定广播类型,从而决定广播数据包长度。