【问题标题】:advertise custom service uuid with bluez 5.4x使用 bluez 5.4x 宣传自定义服务 uuid
【发布时间】:2017-11-22 06:10:14
【问题描述】:

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

我发现我希望支持的特定 android 应用(BLE 客户端)需要在广告包中包含自定义服务 UUID。

但是,我们的外围设备在 debian 上通过 bluez 5.43 运行,我无法弄清楚如何将此 UUID 放入广告包中。

我认为会是这样的:

hcitool -i hci0 cmd 0x08 0x0008 .... ?

【问题讨论】:

  • 您尝试发送的 HCI 命令是“LE 设置广告数据命令”,该命令记录在蓝牙核心规范第 1 卷中。 2 E 部分第 7.8.7 节。在 0x0008 之后是 Advertising_Data_Length 和 Advertising_Data。后者记录在here。抱歉,我现在没有时间尝试并给你完整的命令。
  • 所以完整的命令应该是hcitool -i hci0 cmd 0x08 0x0008 12 11 07 8E 40 00 01 B5 A3 F3 93 E0 A9 E5 0E 24 DC CA 9E 00 00 00 00 00 00 00 00 00 00 00 00 00

标签: bluetooth bluetooth-lowenergy bluez


【解决方案1】:

我验证了以下命令可以正常工作(BlueZ 版本 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 设置广告数据命令的描述。 0x12 是Advertising_Data_Length,即后面的有用字节数(直到填充字节)。现在您必须插入Advertising_Data,其格式与规范第 3 卷 C 部分第 11 节图 11.1 中的格式相同。因此,0x11 是 AD 结构的长度。然后,0x07 是 AD 类型“128 位服务类 UUID 的完整列表”(请参阅​​ 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 Advertising Enable 命令启用广告:​​

hcitool -i hci0 cmd 0x08 0x000A 01

查看 btmon 输出 here

【讨论】:

  • 抱歉,我花了这么长时间来验证,但这很好用。您是否有机会解释服务 uuid 是如何编码到 hcitool 命令语法中的?谢谢。
  • 啊,我现在可以看到 uuid 是反转的(小端序)。很好的解释。再次感谢。
猜你喜欢
  • 2014-09-14
  • 2019-05-02
  • 1970-01-01
  • 2013-04-12
  • 2016-06-22
  • 2020-10-02
  • 1970-01-01
  • 2011-04-14
  • 2019-10-15
相关资源
最近更新 更多