【发布时间】:2016-11-15 00:18:28
【问题描述】:
我正在使用(每个人都喜欢的)BlueZ 5.40 编译并运行具有实验性功能,我需要扫描 LE 设备,配对并连接到一个设备,并通过 D-Bus API 读取/写入特性。我研究了 hcitool、gatttool 和 bluetootctl 的来源,并使用 GDBus 做了一个基本的应用程序。但是,它有几个问题。
- 扫描不添加 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX obj。 org.bluez 总线的路径(使用 d-feet 检查)。考虑到它不是基于 D-Bus 的,这并不奇怪,但是当我使用 StartDiscovery 时,它根本没有检测到我的设备。 bluetoothctl 也没有。
之后,我使用 gatttool 和 simple-agent 作为解决方法来创建对象路径,然后使用我的程序进行连接,但我遇到了另一个问题:
- 当我尝试读取特征时,我收到“连接已关闭 (18)”错误。我怀疑这与蓝牙设备之间的连接无关,它谈论的是 D-Bus 本身,因为当我尝试使用 SetDiscoveryFilter 仅为 LE 设备设置扫描过滤器时,我收到了同样的错误。
每当我只使用 Connect 和 Disconnect 功能时,一切似乎都运行良好,但用于此类应用程序的用途......有限。 所以我的问题是:
如何使用 GDBus 扫描 LE 设备?如果不行,如何手动添加设备或说服蓝牙为我添加设备?
如何正确读取特征?
代码在缩短之后还是比较长的,所以我把它放在了 pastebin 上:
http://pastebin.com/YNLMF0qC.
用g++ -std=c++11 $(pkg-config --cflags glib-2.0 gobject-2.0 gio-2.0) ./main.cpp $(pkg-config --libs glib-2.0 gobject-2.0 gio-2.0 bluez)编译
【问题讨论】:
-
把代码放在这里。不是每个人都可以访问外部网站,而且它们可能不会像 StackOverflow 那样存在。
标签: c++ bluetooth-lowenergy bluez gdbus