是否有可能让android丢失通过蓝牙通过BLE写入特性的命令的一部分?



我正在开发一个android应用程序的改编,与遥控器通信,它有一些预定义的命令。我遵循这个实现做蓝牙通信,它的工作很好,一段时间。这个应用程序应该每5分钟或更短的时间与遥控器进行通信,我已经使用这个应用程序近6个月了。上周我一些命令冲突问题,查看日志我不能确定为什么发生。上次发生这种情况时,应用程序运行了超过24小时,与遥控器通信,没有任何通信问题。它的两个命令有一些相似的字符,第一个必须执行,以建立连接。

OK_CONN

和一个嗅探器命令,使飞行员保持清醒,监听一些传感器数据:

N

查看日志,在应用命令OK_CONN之后,我可以看到命令N的答案。是否有可能蓝牙命令丢失部分数据,在建立的通信期间,或者我在写特性时做错了什么?我是否应该更改命令名以避免这种冲突?

我在索尼XPeria XZ手机上使用android 9。

编辑澄清@ email评论

07:02:12.880 [BleThread] writing <OK+CONN> to characteristic 
07:02:12.368 [Binder:19249_F] [onCharacteristicChanged():274]: 
n command confirme

查看日志,我看到最后一个写入命令作为ok_conn,但它只写了N,这被显示为最后一行,它已经确认单独接收N命令,而不是接收ok_conn的完整数据。我所说的名称冲突是指可能ok_conn命令的最后一个N被接受为命令。我刚刚意识到发生了什么,你可以把它作为一个答案@Emil,我的问题是在发送第一个命令的逻辑,有时我发送这个命令,微控制器还没有启动,这可能是它只得到部分命令的原因。

不确定你所说的名称冲突是什么意思,但是Android总是会写你告诉它要写的东西,没有丢包,只要你遵循规则,永远不要有超过一个未完成的操作(总是等待回调,然后再发送下一个操作),并且你的数据必须符合相应操作的最大长度。

相关内容

最新更新