【问题标题】:bluez-tools bt-adapter -d requires usb dongle reset before next usebluez-tools bt-adapter -d 需要在下次使用前重置 USB 加密狗
【发布时间】:2016-04-13 00:34:48
【问题描述】:

我正在编写一个 BLE 应用程序来读取/写入外围特性,并以 bluez-tools 为例。这样做的要求之一是发现附近的 BLE 设备,如果此过程在每次应用启动时都有效,那将是首选。

但是,像这样第一次使用 bt-adapter -d 之后

$ bt-adapter -d
Searching...
[69:F6:C6:1E:2F:B2]
  Name: 69E90E1E
  Alias: 69E90E1E
  Address: 69:F6:C6:1E:2F:B2
  Icon: (null)
  Class: 0x0
  LegacyPairing: 0
  Paired: 0
  RSSI: -63

^C
$

然后我第二次没有得到任何结果。

$ bt-adapter -d
Searching...
^C
$

同时 hcitool lescan 成功找到外设。

如果我拔下并重新插入我的 ble 加密狗,我会收到此错误:

$ bt-adapter -d
Searching...
Error: GDBus.Error:org.bluez.Error.NotReady: Resource Not Ready
$

在我重置 hci0 之后

$ sudo hciconfig hci0 down
$ sudo hciconfig hci0 up

发现又开始工作了。

如何在每次应用启动后保持 bt-adapter -d 正常工作而无需重置 ble dongle?

我在装有 Ubuntu 15.10 的 Mac 上使用 Parallels 11

【问题讨论】:

    标签: ubuntu bluez parallels bluetooth-lowenergy


    【解决方案1】:

    现在我对 bluez 进行了更多研究,我了解到它将先前发现的设备保存在缓存中,因此不会在 ObjectManager 上调用 InterfacesAdded 信号。

    我遵循this 示例,它在 StartDiscovery 之前使用 g_dbus_object_manager_get_objects 来检查 bluez 是否有缓存设备。

    【讨论】:

      【解决方案2】:

      不要用ctrl + c关闭它

      您正在通过使用它来强制停止扫描,这会使适配器处于错误状态。您应该允许扫描自行停止,直到它停止的时间,这是在扫描参数中定义的。对于发现设备,我会使用btmgmt,对于与 GATT 相关的功能,我会使用 gatttoolbtgatt-client

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 2019-02-25
        • 2016-10-16
        • 2017-03-26
        • 2014-12-16
        • 1970-01-01
        相关资源
        最近更新 更多