#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. классический случай «Вы пробовали последнюю версию?» 🙂