使用 Bluez 5.4X 宣传自定义服务 UUID



我正在通过BLE编写自定义服务来传输自定义特征。它有自己的UUID,例如"8E400001-B5A3-F393-E0A9-E50E24DCCA9E"。

我发现我希望支持的特定安卓应用程序(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 广告数据命令的描述。 0x12 是Advertising_Data_Length,即后面的有用字节数(直到填充字节)。现在您必须插入Advertising_Data,其格式为规范的第 3 卷 C 部分第 11 节,图 11.1。因此,0x11是AD结构的长度。然后,0x07是 AD 类型"128 位服务类 UUID 的完整列表"(请参阅此处)。最后是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 输出。

最新更新