btmgmt add-adv命令无法正常工作

时间:2015-07-04 18:11:36

标签: bluez

我无法使用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)

任何人都可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:8)

Arrgh !!我花了太多时间来解决这个问题。如果有一些文档,就可以避免这种情况。相反,我觉得我在黑暗中瞎逛。幸运的是,我戳了一个正确的地方,但只是在黑暗中摸索了一周之后。以下是使其正常工作所需的条件:

  1. 添加广告失败,状态为0x01(未知命令)响应是由于我的Linux内核不支持此功能。我正在使用v.3.19。一旦我升级到v.4.1.1(我认为4.0可能已经足够),我就不再有这样的回应了。

  2. 即使在内核升级之后,我仍然无法控制广告有效负载或扫描响应有效负载。经过一些摸索之后,我发现我误解了 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

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

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