我想知道如果我需要在执行另一个命令之前等待服务器发出命令执行的响应,或者BLE堆栈是否可以解决这个问题。
例如,我想写一个特征,然后从中读取。我应该串联执行这些命令还是应该在发送读取请求之前等待onWriteRequest回调方法触发?
如果以前的问题是肯定的,BLE堆栈将进行多少重发尝试,以及在重新发送数据包之前等待响应多长时间?
答案 0 :(得分:0)
使用GATT协议,您一次只能有一个未完成的操作。您必须等待响应,直到您可以发送下一个请求。因此,对于Android,您必须等待onCharacteristicWrite,直到您可以发送,例如,读取请求。我猜这在iOS上是一样的。
蓝牙堆栈将请求数据包发送到手机中的蓝牙控制器。然后,实现链路层的蓝牙控制器将在下一次机会(连接事件)发送分组。如果数据包未被确认,它将重新发送相同的数据包,直到确认或链接超时(监督超时)。默认超时为5秒(早期Android版本为20秒)。但是,外设可以通过发出连接参数更新请求来更改超时值。