广播包有两种: 广播包 (Advertising Data)和 响应包 (Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的。
每个包都是31个字节,数据包分有效数据和无效数据两部分。因为广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全,这部分的数据是无效的。
第一个字节:AD Len
第二个字节:AD type
第三个字节:AD Data
AD type 和 AD Data的对应关系:
1、AD type 为 0x01(标识设备LE物理连接功能)
AD data:
- bit 0: LE 有限发现模式
- bit 1: LE 普通发现模式
- bit 2: 不支持 BR/EDR
- bit 3: 对 Same Device Capable(Controller) 同时支持 BLE 和 BR/EDR
- bit 4: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR
- bit 5..7: 预留
2、 AD type :
- 非完整的 16 bit UUID 列表: TYPE = 0x02;
- 完整的 16 bit UUID 列表: TYPE = 0x03;
- 非完整的 32 bit UUID 列表: TYPE = 0x04;
- 完整的 32 bit UUID 列表: TYPE = 0x05;
- 非完整的 128 bit UUID 列表: TYPE = 0x06;
- 完整的 128 bit UUID 列表: TYPE = 0x07;
3、AD type:
- 设备全名: TYPE = 0x08
- 设备简称: TYPE = 0x09
4、AD type 为 0x0A(TX PowerLevel)
AD data部分是一个字节,表示 -127 到 + 127 dBm。
5、AD type 为 0x11(TX PowerLevel)
AD data也是 Flag,每个 bit 表示一个功能:
- bit 0: OOB Flag,0 表示没有 OOB 数据,1 表示有
- bit 1: 支持 LE
- bit 2: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR
- bit 3: 地址类型,0 表示公开地址,1 表示随机地址
6、AD type 为0x12(外设(Slave)连接间隔范围)
AD data中定义了 Slave 最大和最小连接间隔,数据包含 4 个字节:
-
-
- 前 2 字节:定义最小连接间隔,取值范围:0x0006 ~ 0x0C80,而 0xFFFF 表示未定义;
- 后 2 字节:定义最大连接间隔,同上,不过需要保证最大连接间隔大于或者等于最小连接间隔。
-
举个例子:
const u8 tbl_advData[] = {0x05, 0x09, 'z', 'z', 'x', 'h',}
第一个字节是数据长度,第二个字节0x09表示设备简称,后面的就是设备名