3


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

  1. 广告 (GAP)
  2. 接受连接(GAP)
  3. 支持自定义GATT服务,简单的读/写特征值。

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

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

太感谢了!
安德鲁

4

1 回答 1

2

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

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

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

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

于 2015-06-18T16:29:53.747 回答