一尘不染

有没有办法增加BlueZ中的BLE广告频率?

linux

我有一台使用以下命令广播BLE广告的linux计算机:

 sudo hciconfig hci0 up
 sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
 sudo hciconfig hci0 leadv 3

效果很好,但是计算机每秒只广播一次蓝牙广告。我想将此频率提高到每秒10次或更多。有没有办法增加BlueZ中的广告频率?还是每秒一次是标准且不变的?如果无法使用命令行工具,我很乐意使用C
API进行此操作。


阅读 467

收藏
2020-06-02

共1个答案

一尘不染

我想我知道了。

代替:

sudo hciconfig hci0 up
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
sudo hciconfig hci0 leadv 3

做这个:

sudo hciconfig hci0 up
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 03 00 00 00 00 00 00 00 00 07 00
sudo hcitool -i hci0 cmd 0x08 0x000a 01

第二个hcitool命令(0x08 0x0006)是“ LE设置广告参数。前两个字节A0 00是”最小间隔”。后两个字节A0
00是“最大间隔”。在此示例中,它设置了之间的时间将广告设置为100ms。此设置的粒度为0.625ms,因此将时间间隔设置为01
00可以使广告每0.625ms进行一次。将其设置为A0 00可以使广告每0xA0 * 0.625ms = 100ms进行一次。 40
06将播发设置为每0x0640 * 0.625ms =
1000ms发送一次。第五个字节03将播发模式设置为不可连接。使用不可连接播发,您可以播出最快的速度是100ms,且可连接播发(
0x00),您可以更快地刊登广告。

第三个hcitool命令(0x08 0x000a)为“ LE Set Advertise
Enable”。必须使用hcitool而不是hciconfig发出此命令,因为“ hciconfig hci0 leadv
3”会自动将广告速率设置为较慢的默认值1280ms。

我通过运行hcidump和运行您在问题中发布的原始命令来解决这个问题。这向您展示了由bluez执行的一堆原始的hcitool命令(对其进行了很好的注释)。我刚从hcidump输出中注意到,“
hciconfig hci0 leadv 3”发出了一个较慢的set Advertisement命令。

请注意,所有这些都是基于IOGear GBU521的,因此这可能不适用于其他Bluetooth LE芯片组。

2020-06-02