我想我想通了。
代替:
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 是“最大间隔”。在本例中,它设置之间的时间广告为 100 毫秒。此设置的粒度为 0.625 毫秒,因此将间隔设置为 01 00 设置广告每 0.625 毫秒。设置为 A0 00 设置广告每 0xA0*0.625 毫秒 = 100 毫秒。设置为40 06 设置广告每 0x0640*0.625ms = 1000ms 发送一次。第 5 个字节 03 设置广告模式为不可连接。对于不可连接的广告,您可以发布的最快广告是 100ms,对于可连接的广告 ( 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 芯片组。