使用 bluez 5.4x 宣传自定义服务 uuid
advertise custom service uuid with bluez 5.4x
我正在通过 BLE 编写自定义服务来传输自定义特性。它有自己的 UUID,例如“8E400001-B5A3-F393-E0A9-E50E24DCCA9E”。
我发现我希望支持的特定 android 应用程序(BLE 客户端)要求广告数据包中包含自定义服务 UUID。
但是我们的外围设备是 运行 通过 debian 上的 bluez 5.43,我不知道如何将这个 UUID 放入广告包中。
我认为它会是这样的:
hcitool -i hci0 cmd 0x08 0x0008 .... ?
我验证了以下命令可以正常工作(BlueZ ver 5.43,Linux 4.9.0-2-amd64 (x86_64)):
hcitool -i hci0 cmd 0x08 0x0008 12 11 07 9E CA DC 24 0E E5 A9 E0 93 F3 A3 B5 01 00 40 8E 00 00 00 00 00 00 00 00 00 00 00 00 00
解释:
我假设在 0x0008 之前一切都清楚,如果没有让我知道或查看规范中 LE Set Advertising Data Command 的描述。 0x12 是 Advertising_Data_Length
,即后面的有用字节数(直到填充字节)。现在您必须插入 Advertising_Data
,其格式与规范第 3 卷 C 部分第 11 节图 11.1 中的格式相同。因此,0x11 是 AD 结构的长度。然后,0x07 是 AD 类型 "Complete List of 128-bit Service Class UUIDs"(参见 here)。最后是 UUID。请注意,一切都是小端。
然后发送LE设置广告参数命令,例如:
hcitool -i hci0 cmd 0x08 0x0006 00 08 00 08 00 00 00 00 00 00 00 00 00 07 00
然后通过发送 LE 广告启用命令启用广告:
hcitool -i hci0 cmd 0x08 0x000A 01
查看 btmon 输出 here。
我正在通过 BLE 编写自定义服务来传输自定义特性。它有自己的 UUID,例如“8E400001-B5A3-F393-E0A9-E50E24DCCA9E”。
我发现我希望支持的特定 android 应用程序(BLE 客户端)要求广告数据包中包含自定义服务 UUID。
但是我们的外围设备是 运行 通过 debian 上的 bluez 5.43,我不知道如何将这个 UUID 放入广告包中。
我认为它会是这样的:
hcitool -i hci0 cmd 0x08 0x0008 .... ?
我验证了以下命令可以正常工作(BlueZ ver 5.43,Linux 4.9.0-2-amd64 (x86_64)):
hcitool -i hci0 cmd 0x08 0x0008 12 11 07 9E CA DC 24 0E E5 A9 E0 93 F3 A3 B5 01 00 40 8E 00 00 00 00 00 00 00 00 00 00 00 00 00
解释:
我假设在 0x0008 之前一切都清楚,如果没有让我知道或查看规范中 LE Set Advertising Data Command 的描述。 0x12 是 Advertising_Data_Length
,即后面的有用字节数(直到填充字节)。现在您必须插入 Advertising_Data
,其格式与规范第 3 卷 C 部分第 11 节图 11.1 中的格式相同。因此,0x11 是 AD 结构的长度。然后,0x07 是 AD 类型 "Complete List of 128-bit Service Class UUIDs"(参见 here)。最后是 UUID。请注意,一切都是小端。
然后发送LE设置广告参数命令,例如:
hcitool -i hci0 cmd 0x08 0x0006 00 08 00 08 00 00 00 00 00 00 00 00 00 07 00
然后通过发送 LE 广告启用命令启用广告:
hcitool -i hci0 cmd 0x08 0x000A 01
查看 btmon 输出 here。