6

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

  1. 扫描 ble 设备(我可以使用 hci 层)
  2. 连接到广告 BLE 设备
  3. 获取 UUID
  4. 对句柄执行读写操作

BlueZ 社区强烈建议使用 GATT-Dbus api 来完成此操作。经过多次搜索和挠头后,我没有成功找到通过 GATT-DBUs api 执行此操作的正确方法或示例。这似乎比直接使用 GATT 层更复杂。不幸的是,BlueZ 删除了调用 gatt 的直接访问权限。

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

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

先感谢您!

4

2 回答 2

7

开始使用 DBUS GATT API 的最佳方式是查看这里的源代码:http: //git.kernel.org/cgit/bluetooth/bluez.git/tree/

client文件夹下,您可以找到如何使用 DBUS GATT API 的完整示例。其实这就是 bluetoothctl 工具的来源。

请注意,DBUS GATT API 仍处于试验阶段,但您可以使用-E标志启用它运行蓝牙服务。

于 2015-06-15T15:49:44.400 回答
3

我有一个类似的问题,即使用 GATT C/C++ API 与 BLE 设备交互。

就我而言,我必须使用 Bluez v4.101 - Ubuntu 14.04 LTS 中可用的最新 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 之前)。

于 2016-04-28T15:55:10.793 回答