Я использую bluez 5.50 на Raspberry Pi (как на Buster, так и на Stretch). У меня есть сенсорное устройство, которое объявляет данные только при нажатии кнопки на сенсорном устройстве. Таким образом, реклама является асинхронной, и между ними нет периодической рекламы c (и все пакеты уникальны, без дубликатов). У меня возникла проблема с Bluez, хотя при получении пакета Bluez, похоже, не сообщает о каких-либо дополнительных пакетах с устройства в течение следующих примерно 11 секунд (очень редко интервал короче). Это с помощью инструмента командной строки bluetoothctl, а также моего собственного приложения на c ++ (на примере клиента bluez / main. c). В обоих случаях перед запуском сканирования я очищаю фильтр сканирования, устанавливаю транспорт в файл и устанавливаю отчеты о дублированных данных. И наоборот, при запуске сканирования hcitool я вижу все пакеты от датчика (он даже, кажется, сообщает о всех трех копиях, передаваемых по различным рекламным каналам). Итак, мой вопрос, есть ли способ получить эти недостающие рекламные объявления через API-интерфейс dbus, возможно, где-нибудь дополнительные настройки? Если нет, то можно ли использовать hci api из c ++ и нужно ли это делать? Спасибо за помощь, спасибо!
Отредактировано по вопросам Алекса -
Вы пытались загрузить последнюю версию bluez (5.53) https://git.kernel.org/pub/scm/bluetooth/bluez.git?
Пока нет, просто хотел проверить и узнать, не известно ли это заранее.
Используете ли вы сканирование hcitool или sudo hcitool lescan? Если вы используете сканирование hcitool, вы получаете bluetooth classi c (не пакеты с низким энергопотреблением). hcitool является устаревшим средством. Я обнаружил, что sudo hcitool lescan работает только с контроллерами BLE 4.x. Сбой функции на контроллере 5.x.
hcitool lescan (под root), и да, аппаратное обеспечение - Pi Zero / W и P3, поэтому контроллеры BLE 4.x (я предполагаю, )
Вы пытались запустить sudo btmon, чтобы увидеть все коммуникации HCI во время сканирования?
У меня есть, но я не могу вспомнить точно, что я видел, кроме как это было не противоречит ничему другому, например, отсутствующим пакетам с / dbus api против hci
Можете ли вы предоставить код для использования bluetoothctl, ie:
$ bluetoothctl [bluetooth] # Сканирование меню [Bluetooth] # очистить [Bluetooth] # транспортный файл [Bluetooth] # дубликаты данных на [Bluetooth] # назад [Bluetooth] # сканирование на
всегда точно так, как вы заметили .. .
Не могли бы вы также предоставить результаты 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 - это порядковый номер с порядком байтов с прямым порядком байтов, который увеличивается датчиком для каждого нового пакета. Следующий байт указывает на действие кнопки вверх / вниз. Вы можете увидеть пакеты bluetoothctl, о которых сообщают, пронумерованные 05df, 05e5, 05e9. В необработанном дампе номер seq находится в конце верхней строки. Там вы можете видеть, что все пакеты в порядке, сообщается от 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)