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

Posted

技术标签:

【中文标题】有没有办法增加 BlueZ 中的 BLE 广告频率?【英文标题】:Is there a way to increase BLE advertisement frequency in BlueZ? 【发布时间】:2014-02-03 04:31:12 【问题描述】:

我有一台 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】:

我想我明白了。

代替:

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 Set Advertising Parameters。前两个字节 A0 00 是“最小间隔”。后两个字节 A0 00 是“最大间隔”。在这个例子中,它设置广告之间的时间为 100ms。此设置的粒度为 0.625ms,因此将间隔设置为 01 00 设置广告每 0.625ms 执行一次。设置为 A0 00 设置广告每 0xA0*0.625ms = 100ms 执行一次。将其设置为 40 06 设置广告每 0x0640*0.625ms = 1000ms 进行一次。第五个字节 03 将广告模式设置为不可连接。对于不可连接的广告,您可以发布的最快广告是 100 毫秒,而可连接的广告 (0x00),您可以更快地做广告。

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

我通过在运行您在问题中发布的原始命令的同时运行 hcidump 来解决这个问题。这向您展示了由 bluez 执行的一堆原始 hcitool 命令(很好地注释了它们的作用)。我刚刚从 hcidump 输出中注意到“hciconfig hci0 Leadv 3”发出了一个较慢的设置广告间隔命令。

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

【讨论】:

请注意,您的 0x0008 命令末尾应删除十二个 00,例如: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,因此它符合规范(0x1e 是重要八位字节的数量,以下数据是 31 个八位字节广告数据) @neowulf33 十六进制命令记录在蓝牙规范 4.2 (Core_v4.2.pdf) 中。可从bluetooth.org/en-us/specification/adopted-specifications 免费获取 命令在“E部分-主机控制器接口功能规范”中描述。描述命令的章节一般遵循 7.ogf.x 的形式。 这一切都来自蓝牙核心规范,第 2 卷第 E 部分第 7.8.5 节,其中说 The Advertising_Interval_Min and Advertising_Interval_Max should not be the same value to enable the Controller to determine the best advertising interval given other activities. 您可能想要将这些值分开一点。 在蓝牙规范 5.0 (Core_v5.0.pdf) 中,记录在“第 2 卷,E 部分 - 主机控制器接口功能规范”中的命令

以上是关于有没有办法增加 BlueZ 中的 BLE 广告频率?的主要内容,如果未能解决你的问题,请参考以下文章

主动 BLE 扫描 (BlueZ) - DBus 问题

BLE广告包获取频率变得非常低

BlueZ D-Bus C , 应用 BLE

Bluez BLE 连接监控使用 DBUS-Python

BlueZ D-Bus C,应用程序BLE

Bluez 5 未知连接标识符