【发布时间】:2020-06-04 17:07:16
【问题描述】:
我在 Raspberry Pi(Buster 和 Stretch)上运行 bluez 5.50。我有一个 ble 传感器设备,仅在按下传感器设备上的按钮时才发布数据。所以广告是异步的,中间没有周期性的广告(所有数据包都是唯一的,没有重复)。我遇到了 Bluez 的问题,尽管一旦收到数据包,Bluez 似乎在接下来的大约 11 秒内没有报告来自设备的任何其他数据包(偶尔间隔更短)。这是使用 bluetoothctl line 命令工具以及我自己的 c++ 应用程序(基于 bluez client/main.c 示例)。在这两种情况下,在开始扫描之前,我都会清除扫描过滤器,将传输设置为 le,并设置重复数据报告。相反,当运行 hcitool scan 时,我会看到来自传感器的所有数据包(它甚至似乎报告了在不同广告频道上广播的所有 3 个副本)。所以我的问题是,有没有办法通过 dbus api 获取那些丢失的广告,可能在某处进行一些额外的设置?如果没有,hci api 是否可以从 c++ 中使用,它应该起到作用吗?任何帮助表示赞赏,谢谢!
根据 Alex 的问题进行了编辑 -
你试过下载最新的 bluez (5.53) https://git.kernel.org/pub/scm/bluetooth/bluez.git 吗?
还没有,只是想看看这是否是事先知道的。
您使用的是 hcitool scan 还是 sudo hcitool lescan?如果您正在运行 hcitool 扫描,则您正在选择蓝牙经典(不是低能量数据包)。 hcitool 是一个已弃用的工具。我发现 sudo hcitool lescan 仅适用于 BLE 4.x 控制器。该功能在 5.x 控制器上失败。
hcitool lescan(在根目录下),是的,硬件是 Pi Zero/W 和 P3,所以 BLE 4.x 控制器(我假设)
您是否尝试过运行 sudo btmon 来查看扫描期间的所有 HCI 通信?
我有但不记得我看到了什么,除了它与其他任何东西没有矛盾,即丢失数据包 w/ dbus api vs hci
能否提供你使用bluetoothctl的代码,即:
$bluetoothctl [bluetooth]# menu scan [bluetooth]# clear [bluetooth]# transport le [bluetooth]# duplicated-data on [bluetooth]# back [bluetooth]# scan on
始终如您所说...
能否也提供 hciconfig -a 的结果
--- Results (P Zero) -
hci0: Type: Primary Bus: UART
BD Address: B8:27:EB:79:2E:3F ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:55476 acl:126 sco:0 events:2012 errors:0
TX bytes:6956 acl:114 sco:0 commands:444 errors:0
Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH SNIFF
Link mode: SLAVE ACCEPT
Name: 'HubPi01'
Class: 0x000000
Service Classes: Unspecified
Device Class: Miscellaneous,
HCI Version: 4.1 (0x7) Revision: 0x168
LMP Version: 4.1 (0x7) Subversion: 0x2209
Manufacturer: Broadcom Corporation (15)
--- Results (P3) -
hci0: Type: Primary Bus: UART
BD Address: B8:27:EB:2B:A2:A3 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:10995 acl:0 sco:0 events:390 errors:0
TX bytes:2145 acl:0 sco:0 commands:91 errors:0
Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH SNIFF
Link mode: SLAVE ACCEPT
Name: 'HubPi02'
Class: 0x000000
Service Classes: Unspecified
Device Class: Miscellaneous,
HCI Version: 4.1 (0x7) Revision: 0x168
LMP Version: 4.1 (0x7) Subversion: 0x2209
Manufacturer: Broadcom Corporation (15)
下面是大约 20 秒的扫描(编辑掉所有不相关的数据包), 我大约每 2 秒按下传感器上的按钮,然后 在放开它之前再按住它2秒钟。第一个块 来自 bluetoothctl,第二个来自“hcidump --raw”(在第二个树莓派上)。前四个字节 bluetoothctl 数据包中的数据是一个 little endian packet seq number 由传感器为每个新数据包递增。下一个字节表示一个 按钮向上/向下动作。您可以看到 bluetoothctl 报告的数据包编号为 05df, 05e5,05e9。在原始转储中,序列号位于顶行的末尾。那里 你可以看到所有的数据包都是有序的,报告了 1 到 3 次(我假设它是 报告它捕获的所有广告渠道)。所有数据包都存在 05df 到 05e9 在 hcidump 扫描中。最后是“hcitool lescan --duplicates”的输出, 我不太确定它是如何映射的......
------ bluetoothctl
.
[NEW] Device E2:15:00:01:73:96 E2-15-00-01-73-96
[CHG] Device E2:15:00:01:73:96 RSSI: -46
[CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
[CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
df 05 00 00 10 a1 ac 8a b4 .........
[CHG] Device E2:15:00:01:73:96 RSSI: -45
[CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
[CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
e5 05 00 00 10 e7 4f 67 6e ......Ogn
.
[CHG] Device E2:15:00:01:73:96 RSSI: -65
[CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
[CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
e9 05 00 00 10 f4 f9 f8 7d ........}
---------- hcidump --raw
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 DF 05
00 00 10 A1 AC 8A B4 C3
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 DF 05
00 00 10 A1 AC 8A B4 BE
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E0 05
00 00 11 11 0F 3E 24 B6
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
00 00 10 F7 68 07 50 BE
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
00 00 10 F7 68 07 50 CF
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
00 00 10 F7 68 07 50 BA
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
00 00 11 1D 18 A8 2A BF
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
00 00 11 1D 18 A8 2A C0
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
00 00 11 1D 18 A8 2A B8
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E3 05
00 00 10 E2 29 C7 F7 BB
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E4 05
00 00 11 57 F0 5C 76 BD
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E4 05
00 00 11 57 F0 5C 76 C1
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E5 05
00 00 10 E7 4F 67 6E CA
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
00 00 11 77 63 92 CE C0
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
00 00 11 77 63 92 CE BA
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
00 00 11 77 63 92 CE BE
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E7 05
00 00 10 2D 52 48 C2 BD
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E8 05
00 00 11 EE 32 20 9D BD
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E8 05
00 00 11 EE 32 20 9D C1
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E9 05
00 00 10 F4 F9 F8 7D BC
------- hcitool lescan --duplicates
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
【问题讨论】:
标签: linux bluetooth-lowenergy raspbian bluez hci