【问题标题】:Bluez DBus API to set duplicate filter to disableBluez DBus API 将重复过滤器设置为禁用
【发布时间】:2016-09-09 11:39:08
【问题描述】:

如何设置扫描参数并禁用过滤重复,以便我可以接收来自控制器的所有广告? StartDiscovery API 仅在识别出新设备但我想将过滤器重复设置为禁用时通知,以便我可以接收来自控制器的每个广告?。 但我没有找到任何 DBus API 来设置扫描参数,也没有设置扫描启用 API。

我的目标很简单,我需要将控制器上收到的每个广告通知到我的客户端应用程序,我如何使用 Bluez 做到这一点?

注意:由于是蓝牙和 bluez 的新手,我可能会遗漏一些基本要点。

【问题讨论】:

  • @ParthibanN SetDiscoveryFilter 提供了一些选项,例如 type、pathloss、rssi、uuids,但无法从 SetDiscoveryFilter 设置重复过滤器选项。
  • AFAIK,没有直接过滤器可应用于现有设备。您可以观察现有设备的属性变化。将为具有新 RSSI 值的现有设备发出 PropertiesChanged 信号。但这适用于接近。如果设备和适配器处于静态位置,我不确定会有什么响应。
  • 评论部分无法显示我的结果。所以删除它并将其添加为“答案”。但不确定这是否能回答您的问题。

标签: bluetooth dbus bluez discovery


【解决方案1】:

在下面的输出中,您可以看到设备“Parthiban”已经存在于 /org/bluez/hci0/dev_44_D8_84_02_A3_17 下。我已经开始扫描,这反过来会触发“StartDiscovery()”方法,并且使用 RSSI 值更新同一设备。

root@mx6q:~# bluetoothctl 
[NEW] Controller 5C:F3:70:6E:26:02 Adapter [default]
**[NEW] Device 44:D8:84:02:A3:17 Parthiban**
[NEW] Device 2C:F0:A2:26:D7:F5 iPhone tteam
[NEW] Device 78:F8:82:10:E7:0C Nexus 5X
[bluetooth]# scan on
Discovery started
[CHG] Controller 5C:F3:70:6E:26:02 Discovering: yes
**[CHG] Device 44:D8:84:02:A3:17 RSSI: -52**

因此,您可以在接口“org.freedesktop.DBus.Properties”上使用“g_dbus_connection_signal_subscribe”作为“PropertiesChanged”信号。

while(g_variant_iter_loop(&iter, "{sv}", &property, &value)) {
    if(strcasecmp(property, "RSSI") == 0) {
        /*
         * - Extract the device address from object path
         *  /org/bluez/hci0/dev_44_D8_84_02_A3_17
         *  - Play with the device
         */
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 2016-08-25
    • 2014-02-04
    • 2021-10-09
    • 2013-04-12
    • 2021-12-10
    • 2015-10-01
    • 2015-12-25
    相关资源
    最近更新 更多