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

时间:2014-01-14 22:06:55

标签: linux bluetooth bluetooth-lowenergy bluez

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

 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。

1 个答案:

答案 0 :(得分:44)

我想我已经明白了。

而不是:

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”发出了一个较慢的设置广告间隔命令。

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