我正在尝试编写一个小的 Zephyr OS 运行时系统,它使用 BLE 在我的两个 nrf52840dk 板之间进行通信。在过去的几天里,我一直在阅读 BLE,并熟悉了 GATT 服务器/客户端。
我最好使用的 API 如下所示:
/* Send a message to conn */
void send(struct bt_conn *conn, void* data, u16_t len);
/* Callback which is invoked when a message is received from conn */
void recv(struct bt_conn *conn, void* data, u16_t len);
我设法做的是通过将我的系统限制为两台设备来实现类似的效果,一台是 GATT 服务器,一台是 GATT 客户端。
服务器公开客户端扫描和订阅的一个属性。服务器可以通过通知客户端属性的更改来向客户端“发送”消息,并且可以通过客户端向属性发出写入请求来发送消息。
客户端可以通过写入属性向服务器发送消息,同时它可以通过服务器接收消息,通知它订阅的属性有更新。
我认为这些原语必须存在于 GATT 层之下(在 HCI 层中?),但 Zephyr 文档在大多数地方都非常稀疏。在此之后,我有两个问题。
- 我对 BLE 的理解是否正确,BLE 设备之间的大多数通信都是通过此类 GATT 服务器/客户端关系或通过 BLE 网状网络进行的?
- 任何指向关于我在哪里可以阅读上面描述的更通用 API 的信息的指针(或者如果它已经存在,指向那个的指针)都会有所帮助。
编辑:我接受了优素福的回答。他的回答连同它下面的评论充分回答了我的问题。