【发布时间】:2021-12-05 12:09:06
【问题描述】:
我们目前正在使用 dbus API 来连接特定设备。我们使用的是经典的方法,即订阅PropertiesChanged,但由于周围有大量的蓝牙广告设备,我们决定尝试使用白名单,就像hcitool 提供:
hcitool lewladd <MAC>
hcitool lescan --whitelist
我们想连接 BR/EDR 和 LE 设备,但只连接白名单中的 LE 设备。
我编写了一个小的 C 尖峰程序,它添加了一个调用以下方法的设备:
hci_le_add_white_list(...) // To add devices to the WL
hci_le_set_scan_parameters(...) // With "whitelist only" policy
但是,只要我调用 StartDiscovery() dbus 方法:
busctl call org.bluez /org/bluez/hci0 org.bluez.Adapter1 StartDiscovery
我在 HCI 事件中看到,“LESetScanParameters”使用“全部接受”策略再次调用(即使我之前已经将其设置为“忽略不在白名单中”。我们是使用 bluez 5.50。
所以我的问题是,
是否可以设置 LE Scan 参数,然后调用 StartDiscovery() dbus 调用而不重置前者?
注意:我知道可以直接与 bluez 中提供的 hci 库进行交互,但这需要我们正在开发的软件的完整重构。
谢谢
编辑:我忘了提到我想使用白名单,因为我想按 MAC 地址而不是 UUID 过滤。
【问题讨论】:
-
你没有说你使用的是什么版本的 BlueZ。 Pattern 大约是 5.54,所以你需要那个版本或更新的版本。
-
你说得对,在我的 bluez v5.50 中这个功能还没有实现...
标签: c bluetooth-lowenergy dbus bluez whitelist