在 intel edison 上使用 C 开发 BLE 外设

develop BLE peripheral using C on intel edison


我正在尝试使用 C 库在 intel-edison 中开发蓝牙 LE 外设。该设备应该能够:

  1. 做广告(GAP)
  2. 接受连接 (GAP)
  3. 支持自定义 GATT 服务,只需 read/write 特征值。

我尝试使用 HCI 和 bluez 来实现它。 bluez-experiments, intel-edison-playground,演示如何打广告和扫描,可以在edison上编译和运行。 BLE 广告和扫描确实有效。

但我很难弄清楚如何接受连接和支持 GATT 服务。我尝试在 goolge 上搜索有关 HCI 文档的信息,但没有成功。有人可以提供一段代码(c 或伪代码或描述)吗?

非常感谢!
安德鲁

如果您下载 bluez 源代码,您将在 /doc/mgmt-api.txt 中找到关于 hci 协议的文档。我自己没有使用 hci 接口,我不确定开发人员是否打算让实现者使用这个接口来实现外围设备,所以我不确定这将如何工作。

我为我的项目采用了 DBus API 方法,/doc/gatt-api.txt 和 /doc/advertising-api.txt 中对此进行了概述。这种方法涉及编写一个程序来创建支持特定 org.bluez DBus 接口(GattService1,其中包含 GattCharacteristic1 和 GattDescriptor1)和 ObjectManager 接口以将所有内容公开给 bluez 的 DBus 对象。然后,您使用 LEAdvertisment1 来定义广告内容,并使用适配器上的 LEAdvertisingManger1 接口注册广告。

我使用 Qt 来简化 DBus 通信部分。

bluez 上 BLE 的 DBus API 仍在大力开发中,并非所有功能都受支持(例如,我还没有找到启动和停止广告的方法)。 5.31 包含许多新增的支持和一些针对描述符的关键错误修复,但需要更新的内核。