我一直在寻找一个简单的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。
请提出建议。
感谢
找到一个解决方案,它可能会对某人有所帮助。。。
在youtube上搜索和浏览Linux会议和IOT会议视频后,发现Bluez有轻量级的可执行文件,代码存在于Bluez的src/shared文件夹中。对于btgattclient.c;gatt客户端";当编译时可执行,其具有与"可执行"相同的功能;gatttool";并且不依赖于bluetoothd或dbus。它唯一的依赖是glib-2.0。
当操作系统没有运行bluetoothd或没有安装dbus库时,如果我们需要轻量级工具,这将非常有用。
感谢
如果要使用BlueZ进行BLE通信,则唯一支持的API是D-Bus API。其他一切要么被劝阻,要么被反对。
如果您想要更简单的东西和/或根本不使用BlueZ,您可以在Linux中使用HCI_CHANNEL_USER
功能来获得对内核中HCI连接的原始访问权限。有了这个,你可以使用任何蓝牙主机堆栈软件,或者如果你只需要一个非常小的子集,就可以编写自己的minimum。
询问软件库推荐的问题不允许出现在Stack Overflow上,因为可能会出现基于意见的结果。