蓝牙LE特性写入响应

时间:2019-10-04 22:26:47

标签: bluetooth-lowenergy bluetooth-gatt

我有一个运行BT5且带有GATT服务器设置的嵌入式设备。在服务器上,我设置了具有各种特征的服务,以允许客户端(PC或移动设备)通过写入特征来调整设备的各种参数。

我希望设备为每次写入从应用程序级别发送回响应。我不清楚推荐的方式是什么。

我曾考虑过让客户阅读或订阅一般状态特征,但我想确保自己不会错过一种更简单的方法。我看着带有响应命令的BT写入,但似乎对此的确认可能比应用程序要低。

2 个答案:

答案 0 :(得分:0)

我使用Notification特性解决了这个问题。客户端首先订阅该CCD上的通知事件,然后主机触发该通知来确认发送到主机/设备的每个命令。为了更好地同步命令和响应,您可以在每个命令中添加一个递增的命令ID,并将命令ID作为发送回客户端的通知数据的一部分。

但是我实现了它,因为在设备处理完命令后 我需要一个响应,并将结果发送回客户端。如果您只想知道主机是否已收到命令,则可以使用写响应式CCD。

  

我看着带有响应命令的BT写入,但似乎对此的确认可能比应用程序要低。

实际上,Write-With-Response-Handler几乎总是在BLE堆栈上实现,而不是在应用程序级别上实现。但是我不明白为什么会这样。当响应写入失败时,您应该以某种形式通过BLE堆栈获取错误报告。如果是阻塞调用,它甚至可能返回成功值。

答案 1 :(得分:0)

您应该可以将“写入响应”用作“应用程序级别响应”。在应用程序处理请求之前,我还没有看到在较低级别发送此响应的任何蓝牙堆栈。原因可能是因为应用程序甚至可以发送应用程序错误代码而不是写入响应,因此将写入响应处理移至较低级别是很愚蠢的。即使在Android中(如果您设置了GATT服务器),您也可以从应用程序发送写入响应。

情况与指示不同,但是,蓝牙堆栈有时会在比应用程序更低的级别发送确认,甚至在通知应用程序指示已经到达之前,我发现这有点奇怪,使指示变得亲切与通知相比毫无意义。