微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 语言中的轻量级蓝牙 LE 库

如何解决C 语言中的轻量级蓝牙 LE 库

我一直在寻找一个简单的 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。

请提出建议。

谢谢

解决方法

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

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

由于可能会产生基于意见的结果,因此 Stack Overflow 上不允许询问软件库建议。

,

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

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

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

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。