我正在编写一个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成功找到了外围设备。
如果我拔掉并重新插上我的加密狗,我会收到此错误:
$ 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无需重置加密狗?
我在使用Ubuntu 15.10的Mac上使用Parallels 11
答案 0 :(得分:0)
不用ctrl + c
您使用它强制扫描停止,这使适配器处于错误状态。您应该允许扫描自行停止,直到它停止的时间,这是扫描参数中定义的内容。要发现设备,我会使用btmgmt
和GATT相关功能gatttool
或btgatt-client
。
答案 1 :(得分:0)
现在我已经更多地研究了bluez,我知道它将先前发现的设备保存在缓存中,因此在ObjectManager上不会调用InterfacesAdded信号。
我遵循了this示例,该示例在StartDiscovery之前使用g_dbus_object_manager_get_objects来检查bluez是否有缓存设备。