Вызовите функцию StartDiscovery() через БД без сброса параметров сканирования файла

#c #bluetooth-lowenergy #dbus #bluez #whitelist

Вопрос:

В настоящее время мы используем API dbus для подключения к определенным устройствам. Мы используем классический метод, который заключается в подписке на измененные свойства, но из-за огромного количества устройств рекламодателей Bluetooth мы решили попробовать использовать белый список, как это предоставляет hcitool :

 hcitool lewladd <MAC>
hcitool lescan --whitelist
 

Мы хотим подключить устройства BR/EDR и файлы, но только те устройства, которые находятся в белом списке.

Я написал небольшую программу на языке C, которая добавляет устройство, вызывающее следующие методы :

 hci_le_add_white_list(...) // To add devices to the WL
hci_le_set_scan_parameters(...) // With "whitelist only" policy
 

Однако, как только я вызову метод dbus StartDiscovery() :

 busctl call org.bluez /org/bluez/hci0 org.bluez.Adapter1 StartDiscovery
 

Я вижу в событиях HCI, что «LESetScanParameters» снова вызывается с политикой «Принять все» (даже если я уже установил ее ранее на «Игнорировать не в белом списке». Мы используем bluez 5.50.

Поэтому мой вопрос таков,

Можно ли задать параметры сканирования файла, а затем вызвать вызов dbus StartDiscovery() без сброса первого ?

NB: Я знаю, что можно напрямую взаимодействовать с библиотекой hci, предоставляемой в bluez, но для этого потребуется полная доработка программного обеспечения, которое мы разрабатываем.

Спасибо

ПРАВКА : Я забыл упомянуть, что хочу использовать белый список, потому что я хочу фильтровать по MAC-адресу, а не по UUID.

Комментарии:

1. Вы не говорите, какую версию BlueZ вы используете. Шаблон появился примерно в 5.54, так что вам понадобится эта версия или новее.

2. Вы правы, в моем bluez v5.50 эта функция еще не реализована…

Ответ №1:

hcitool это устаревший инструмент/команда. С BlueZ D-Bus API адаптера содержит метод SetDiscoveryFilter (), который позволяет установить соответствующий фильтр.

Комментарии:

1. Я хотел добавить, что я хочу фильтровать по MAC-адресу, а не по UUID, потому что слишком много устройств одного типа рекламируют один и тот же UUID, и наш обратный вызов слишком часто вызывается

2. Шаблон должен допускать этот тип фильтра

3. Замечательно, я понятия не имел, что MAC-адреса были разрешены в фильтре через это поле. Большое спасибо !

4. К сожалению, эта функция еще не реализована в версии 5.50

5. классический случай «Вы пробовали последнюю версию?» 🙂