如果未收到响应,BLE堆栈是否重新发送数据包?

问题描述:

我想知道如果我需要等待服务器的响应,在执行另一个命令之前执行一个命令,或者如果BLE栈负责这个问题,可以这么说。如果未收到响应,BLE堆栈是否重新发送数据包?

例如,我想写入一个特性,然后从它读取。我是否应该同时执行这些命令,还是应该在发送读取请求之前等待onWriteRequest回调方法启动?

如果回答以前的问题,BLE堆栈会进行多少次重新发送尝试,以及在重新发送数据包之前等待响应需要多长时间?

+0

在你的情况下,什么样的设备作为发送请求的设备?它是一个Android手机还是一个nrf51? – Emil

+0

电话是发送设备 –

+0

你正在写'带响应'或'没有响应'吗? – KRUKUSA

有了GATT协议,您一次只能有一项杰出的操作。您必须等待响应,直到您可以发送下一个请求。对于Android,您必须等待onCharacteristicWrite,直到您可以发送读取请求为止。我猜这在iOS上是一样的。

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