随着BlueZ(5.30)的最后一个版本,亮点是GATT D-Bus apis的完成。我的目标是以编程方式(在C中)作为BLE客户端:
BlueZ社区强烈建议使用GATT-Dbus api来实现这一目标。经过多次搜索和头部刮擦后,我没有成功找到通过GATT-DBUs api执行此操作的正确方法或示例。看起来比直接使用GATT层更复杂。不幸的是,BlueZ删除了直接访问以调用gatt。
我非常接近将GATT源文件从Bluez中取出,将其编译为自己的独立库并直接使用GATT层并调用连接并执行对ble设备服务器的读/写操作。我知道与DBUS-GATT api相比,这不是建议的方式,但我没有选择。
如果有人对此或建议有任何意见(有一些示例代码),请告知。
提前谢谢你!
答案 0 :(得分:6)
开始使用DBUS GATT API的最佳方法是在这里查看源代码:http://git.kernel.org/cgit/bluetooth/bluez.git/tree/
在client
文件夹下,您可以找到有关如何使用DBUS GATT API的完整示例。实际上这是bluetoothctl工具的来源。
请注意,DBUS GATT API仍处于试验阶段,但您可以启用运行带有-E
标志的蓝牙服务。
答案 1 :(得分:2)
我遇到了类似的问题,即使用GATT C / C ++ API与BLE设备进行交互。
在我的情况下,我不得不使用Bluez v4.101 - Ubuntu 14.04 LTS(read my story)中提供的最新Bluez版本。在Bluez v4.x中,没有DBus API 实际上,我最近使用过Bluez v5 DBus API,并且我发现如果你至少不使用Bluez v5.39(从2016年4月起),很可能你会遇到DBus API的问题。如前所述,DBus API仍处于试验阶段。
因此,为了解决我的Bluez v4.x依赖关系,我不得不从Bluez中取出GATT源文件并创建我自己的库'gattlib'。该项目是开源的,以鼓励反馈和贡献。
我在自己的GATT客户端项目中使用这个库。
我写了几个例子来帮助人们开始使用它,看看项目的文件夹/examples
。
编辑2017年3月:我刚刚向gattlib(https://github.com/labapart/gattlib/)添加了DBus支持。 从Bluez v5.42开始,gattlib会自动使用DBus API (在构建库时,也可以强制使用DBus gattlib后端,以便在v5.42之前使用它。)