我无法使用btmgmt add-adv命令。我已经尝试了建议的示例,但也无效。我的目标是使用BlueZ 5.x堆栈(我使用v.5.31)使用我自己的自定义有效负载设置广告和扫描响应有效负载。
我启用了le,可连接,广告和电源。我尝试了各种组合(断电,广告关闭等)但它仍然无效。这是示例命令(带响应):
sudo btmgmt add-adv -u 180d -u 180f -d 080954657374204C45 1
Add Advertising failed with status 0x01 (Unknown Command)
任何人都可以帮助我吗?
由于
答案 0 :(得分:8)
Arrgh !!我花了太多时间来解决这个问题。如果有一些文档,就可以避免这种情况。相反,我觉得我在黑暗中瞎逛。幸运的是,我戳了一个正确的地方,但只是在黑暗中摸索了一周之后。以下是使其正常工作所需的条件:
添加广告失败,状态为0x01(未知命令)响应是由于我的Linux内核不支持此功能。我正在使用v.3.19。一旦我升级到v.4.1.1(我认为4.0可能已经足够),我就不再有这样的回应了。
即使在内核升级之后,我仍然无法控制广告有效负载或扫描响应有效负载。经过一些摸索之后,我发现我误解了 btmgmt 命令中广告标志的含义,即如果要自定义广告或扫描响应有效负载,请不要激活广告标记:
sudo btmgmt广告
这会导致使用默认/预定的广告有效负载而不是您的自定义有效负载(不是非常直观)。扫描响应将包含设备名称。相反,像这样关闭那个标志:
sudo btmgmt广告关闭
然后使用您自己的自定义广告并扫描有效负载,如下所示:
sudo btmgmt add-adv -d 02010606094142434400 -s 05061805051206000a00020a00 1
一旦您启动适配器,这将启用您的自定义有效负载广告。上面的示例在广告有效负载中设置完整名称。扫描响应有效负载也设置如下:16位UUID,连接间隔范围和TX功率级别:
完整名称:" ABCD"
UUID:1805
连接间隔范围:7.5 ms至12.5 ms
TX功率电平:0 dBm
如果您想了解我发布的有效负载中标头字节的含义,建议您阅读蓝牙核心规范文档。另一个要查看的地方是BlueZ源代码(src目录中的eir.h)。
我希望这可以帮助下一个沿着这条路走下去的人节省一些时间。