【问题标题】:Bluetooth LE Characteristic Write Response低功耗蓝牙特性写入响应
【发布时间】:2019-10-04 22:26:47
【问题描述】:

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

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

我曾考虑让客户端读取或订阅一般状态特征,但我想确保我不会错过更简单的方法来执行此操作。我查看了 BT write with response 命令,但似乎对此的确认可能低于应用程序。

【问题讨论】:

    标签: bluetooth-lowenergy bluetooth-gatt


    【解决方案1】:

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

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

    我查看了 BT write with response 命令,但似乎对此的确认可能低于应用程序。

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

    【讨论】:

      【解决方案2】:

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

      不过,Indication 的情况有所不同,蓝牙堆栈有时会在比应用程序更低的级别发送 Confirmation,甚至在通知应用程序 Indication 已经到达之前,我觉得这有点奇怪,并且使 Indications 变得亲切与通知相比毫无意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 2013-12-21
        • 2014-02-23
        • 1970-01-01
        相关资源
        最近更新 更多