【问题标题】:Call StartDiscovery() through dbus without resetting the LE Scan Parameters通过 dbus 调用 StartDiscovery() 而不重置 LE 扫描参数
【发布时间】:2021-12-05 12:09:06
【问题描述】:

我们目前正在使用 dbus API 来连接特定设备。我们使用的是经典的方法,即订阅PropertiesChanged,但由于周围有大量的蓝牙广告设备,我们决定尝试使用白名单,就像hcitool 提供:

hcitool lewladd <MAC>
hcitool lescan --whitelist

我们想连接 BR/EDRLE 设备,但只连接白名单中的 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


【解决方案1】:

hcitool 是一个遗留工具/命令。对于 BlueZ D-Bus,适配器 API 包含一个 SetDiscoveryFilter() 方法,它允许您安装相应的过滤器。

【讨论】:

  • 我想补充一点,我想通过 MAC 地址而不是 UUID 进行过滤,因为太多相同类型的设备使用相同的 UUID 进行广告并且我们的回调被调用太多
  • Pattern 应该允许这种类型的过滤器
  • 太棒了,我不知道 MAC 地址允许在过滤器中通过此字段。非常感谢!
  • 很遗憾这个功能在 v5.50 中还没有实现
  • 经典案例“你试过最新版吗?” :-)
猜你喜欢
  • 2015-02-02
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2013-04-17
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多