Сканирование bluez blotoothctl против сканирования hcitool - PullRequest
1 голос
/ 20 февраля 2020

Я использую 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)

1 Ответ

1 голос
/ 20 февраля 2020

Вы пытались загрузить последнюю версию bluez (5.53) https://git.kernel.org/pub/scm/bluetooth/bluez.git?

Используете ли вы hcitool scan или sudo hcitool lescan? Если вы используете hcitool scan, вы получаете Bluetooth Classi c (не пакеты с низким энергопотреблением). hcitool является устаревшим инструментом. Я обнаружил, что sudo hcitool lescan работает только с контроллерами BLE 4.x. Сбой функции на контроллере 5.x.

Вы пытались запустить sudo btmon, чтобы увидеть все коммуникации HCI во время сканирования?

Можете ли вы предоставить код для использования bluetoothctl, ie:

$bluetoothctl
[bluetooth]# menu scan
[bluetooth]# clear
[bluetooth]# transport le
[bluetooth]# duplicated-data on
[bluetooth]# back
[bluetooth]# scan on

Не могли бы вы также предоставить результаты hciconfig -a

...