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

Joh*_*ier 2 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)
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

谢谢

Joh*_*ier 8

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

  1. 添加广告失败,状态0×01(未知命令)的反应是由于这样的事实,我的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

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

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