我无法使btmgmt add-adv命令正常工作。我已经尝试了建议的示例,但这也不起作用。我的目标是使用BlueZ 5.x堆栈(我正在使用5.31版)来设置广告和扫描响应有效负载以及自己的自定义有效负载。

我已经启用文件,可连接,广告和电源。我尝试了各种组合(关闭电源,关闭广告等),但仍然无法正常工作。这是示例命令(带有响应):

sudo btmgmt add-adv -u 180d -u 180f -d 080954657374204C45 1
Add Advertising failed with status 0x01 (Unknown Command)


谁能帮我?

谢谢

最佳答案

啊!我花了太多时间弄清楚这一点。如果有一些文档,那就可以避免。相反,我觉得自己在黑暗中四处闲逛。幸运的是,我只是在一个黑暗中摸索了一周之后才拨开了正确的位置。这是使它正常工作所需的条件:


添加广告失败,状态为0x01(未知命令)响应是由于我的Linux内核不支持此功能。我正在使用3.19版。一旦我升级到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毫秒至12.5毫秒
TX功率电平:0 dBm


如果您想了解我发布的有效载荷中标头字节的含义,建议您阅读《蓝牙核心规范》文档。另一个值得一看的地方是BlueZ源代码(src目录中的eir.h)。

我希望这可以帮助下一个走这条路的人节省一些时间。

关于bluez - btmgmt add-adv命令不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31223765/

10-13 04:55