我使用 btstack 在 rp-pico 上构建了一个小型 PoC,基本上是对独立简单 BLE 服务的重新设计。
就像在示例中一样,BLE 使用广告数据,并且示例中有一些常量值没有解释,而且文档对数据的描述也不是很清晰
server_common.c中的广告数据:
#define APP_AD_FLAGS 0x06
static uint8_t adv_data[] = {
// Flags general discoverable
0x02, BLUETOOTH_DATA_TYPE_FLAGS, APP_AD_FLAGS,
// Name
0x17, BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME, 'P', 'i', 'c', 'o', ' ', '0', '0', ':', '0', '0', ':', '0', '0', ':', '0', '0', ':', '0', '0', ':', '0', '0',
0x03, BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS, 0x1a, 0x18,
};
我想知道——这些价值观的含义是什么?
- APP_AD_FLAGS 0x06
- SERVICE_CLASS_UUIDS,0x1a,0x18
由于蓝牙是独立于制造商的标准,因此当然可以在蓝牙 SIG的页面上找到该规范。
示例中的实际蓝牙广告 PDU 由 3 个元素组成:这些元素始终具有相同的结构,由一个字节用于长度规范、一个字节用于类型规范和其余部分作为有效载荷组成。
就您而言,第一个元素必须按以下方式解释:
其余的 PDU 将以相同的方式解码: