0

我一直在寻找一个简单的 C 语言蓝牙 LE 库,它允许我扫描 BLE 设备,连接并接收来自 BLE 设备的给定服务 UUID 的定期通知。直接与蓝牙套接字和 libbluetooth(从 BlueZ 创建)一起使用而不使用 DBUS 的东西。不需要配对和安全功能。

遇到了https://github.com/labapart/gattlib。看起来不错,但使用 dbus API 并且依赖于 libdbus、glib 等。要使用这个库,需要额外的 5MB 库,因此决定不使用 dbus。我们的设备上没有空间来支持压缩 rootfs 映像上的 5MB 蓝牙堆栈。我们的 rootfs 映像的总大小为 9 MB。带有 dbus 的蓝牙堆栈本身似乎是我们 rootfs 大小的 50% 以上。

还有 - https://github.com/edrosten/libblepp是 c++ 并且不使用 dbus。这将需要编写用于 C 程序的 C 包装器以及 C++ 构造的开销,例如编译器生成的复制构造函数、赋值运算符等。还有交叉编译的问题。

目标板是运行 Linux 的 Xilinx Zynq,构建系统是 buildroot。

请建议。

谢谢

4

2 回答 2

1

找到了解决方案,它可能对某人有帮助......

在 youtube 上搜索并浏览了 Linux 会议和 IOT 会议视频后,发现 Bluez 具有轻量级的可执行文件,并且代码存在于 Bluez 的 src/shared 文件夹中。对于 btgattclient.c 在编译时生成“gatt-client”可执行文件,其功能与“gatttool”相同,并且不依赖于 bluetoothd 或 dbus。它唯一的依赖是 glib-2.0。

如果我们在操作系统没有运行蓝牙或没有安装 dbus 库时需要轻量级工具,这将很有帮助。

谢谢

于 2021-04-21T21:47:37.050 回答
1

如果您想使用 BlueZ 进行 BLE 通信,唯一支持的 API 是 D-Bus API。不鼓励或弃用其他所有内容。

如果您想要更简单的东西和/或根本不使用 BlueZ,您可以使用HCI_CHANNEL_USERLinux 中的功能来获取对内核中 HCI 连接的原始访问。有了这个,您可以使用任何蓝牙主机堆栈软件,或者如果您只需要极小的子集,您可以编写自己的最小软件。

由于可能会出现基于意见的结果,因此在 Stack Overflow 上不允许提出软件库建议的问题。

于 2021-04-20T14:27:32.800 回答