BlueZ 5.30:D-Bus GATT API - 只需发现并连接到C语言的BLE设备

时间:2015-06-12 16:56:46

标签: bluetooth-lowenergy dbus bluez gatt gdbus

随着BlueZ(5.30)的最后一个版本,亮点是GATT D-Bus apis的完成。我的目标是以编程方式(在C中)作为BLE客户端:

  1. 扫描ble设备(我可以使用hci图层)
  2. 连接广告BLE设备
  3. 获取UUID
  4. 执行读取和写入处理
  5. BlueZ社区强烈建议使用GATT-Dbus api来实现这一目标。经过多次搜索和头部刮擦后,我没有成功找到通过GATT-DBUs api执行此操作的正确方法或示例。看起来比直接使用GATT层更复杂。不幸的是,BlueZ删除了直接访问以调用gatt。

    我非常接近将GATT源文件从Bluez中取出,将其编译为自己的独立库并直接使用GATT层并调用连接并执行对ble设备服务器的读/写操作。我知道与DBUS-GATT api相比,这不是建议的方式,但我没有选择。

    如果有人对此或建议有任何意见(有一些示例代码),请告知。

    提前谢谢你!

2 个答案:

答案 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之前使用它。)