【问题标题】:Does the BLE stack resend a packet if response is not received?如果没有收到响应,BLE 堆栈是否会重新发送数据包?
【发布时间】:2017-06-22 20:25:44
【问题描述】:

我想知道在执行另一个命令之前是否需要等待来自服务器的命令已执行的响应,或者 BLE 堆栈是否可以在后台处理这个问题。

例如,我想写入一个特征,然后从中读取。我应该串联执行这些命令,还是应该在发送读取请求之前等待 onWriteRequest 回调方法触发?

如果前一个问题是,BLE 堆栈将进行多少次重新发送尝试,以及在重新发送数据包之前等待响应多长时间?

【问题讨论】:

  • 在您的情况下,什么样的设备充当发送请求的设备?是安卓手机还是nrf51?
  • 手机是发送设备
  • 你写的是with response还是without response

标签: bluetooth bluetooth-lowenergy nrf51


【解决方案1】:

使用 GATT 协议,您一次只能进行一项未完成的操作。您必须等待响应,直到您可以发送下一个请求。因此,对于 Android,您必须等待 onCharacteristicWrite 直到您可以发送例如读取请求。我想在 iOS 上也是如此。

蓝牙堆栈将请求数据包发送到手机中的蓝牙控制器。然后,实现链路层的蓝牙控制器将在下一次机会(连接事件)时发送数据包。如果数据包未被确认,它将重新发送相同的数据包,直到被确认或链接超时(监督超时)。默认超时为 5 秒(在早期的 Android 版本中为 20 秒)。但是,外围设备可以通过发出连接参数更新请求来更改超时值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多