我可以使用带有--duplicates标志的hcitool lescan来捕获两个附近BLE设备的定期LE广告报告(接近信标):
$ sudo hcitool lescan --duplicates
LE Scan ...
C8:0F:10:29:4D:98 MI1S
C8:0F:10:29:4E:75 MI1S
C8:0F:10:29:4E:75 MI1S
C8:0F:10:29:4D:98 MI1S
C8:0F:10:29:4E:75 MI1S
C8:0F:10:29:4D:98 MI1S
<snip>
这是那个扫描的内容,加上时间戳以显示周期性:
$ sudo stdbuf -i0 -o0 -e0 hcitool lescan --duplicates | perl -nle 'print scalar(localtime), " ", $_'
Wed Apr 13 13:46:45 2016 LE Scan ...
Wed Apr 13 13:46:46 2016 C8:0F:10:29:4E:75 MI1S
Wed Apr 13 13:46:47 2016 C8:0F:10:29:4D:98 MI1S
Wed Apr 13 13:46:48 2016 C8:0F:10:29:4E:75 MI1S
Wed Apr 13 13:46:48 2016 C8:0F:10:29:4D:98 MI1S
Wed Apr 13 13:46:50 2016 C8:0F:10:29:4D:98 MI1S
Wed Apr 13 13:46:52 2016 C8:0F:10:29:4E:75 MI1S
<snip>
在去年四月的嵌入式Linux会议和物联网峰会上,一位负责BlueZ堆栈的演讲者表示不再使用hcitool,而是改用bluetoothctl。
今天我尝试了一下,但它只显示一个设备的第一个LE广告报告(就像没有--duplicates选项的hcitool一样):
$ sudo bluetoothctl
[NEW] Controller 5C:F3:70:62:68:28 BlueZ 5.38 [default]
[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 5C:F3:70:62:68:28 Powered: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller 5C:F3:70:62:68:28 Discovering: yes
[CHG] Device C8:0F:10:29:4E:75 RSSI: -72
[CHG] Device C8:0F:10:29:4D:98 RSSI: -65
[bluetooth]# devices
Device C8:0F:10:29:4D:98 MI1S
Device C8:0F:10:29:4E:75 MI1S
您如何使用bluetoothctl捕获来自同一设备的重复LE广告报告,就像hcitool使用--duplicates选项一样?
bluetoothctl
是通过DBus与蓝牙守护进程进行通信,而不像hcitool
一样直接与硬件进行通信。而且现在hcitool
通常会失败,因为蓝牙守护进程具有独占访问权限。 - Florian Echtler