蓝牙安卓射频通信/ SPP错误处理建议



我正在计划在Android设备和使用商业蓝牙模块的自定义传感器之间使用的通信协议。我将使用 SPP 配置文件,据说该配置文件"为用户提供简单可靠的数据流,类似于 TCP"。

我对蓝牙技术不太熟悉,对设计这样的协议有一些疑问。

首先,我不清楚我是否必须担心传输损坏的数据。底层协议栈能否保证我从 Android 给出的InputStream读取的字节与 UART 在传感器端接收的字节相同?我是否必须定义自己的数据包,受CRC或其他东西保护,或者这会是矫枉过正吗?

从 Android 蓝牙文档中我不清楚如果信号弱并且丢失一段时间,我的应用程序中会发生什么。我是立即获得IOException,还是平台为我提供了一些隐藏的错误处理和恢复,使我看不到如此短暂的中断?

感谢您的任何建议。

您不必担心SPP上的数据损坏,蓝牙提供2级CRC,一个在基带,然后一个在L2CAP级别,两者都具有针对任何检测到的损坏的重传机制 - 因此应用程序将只接收良好的数据包。

关于第二个问题 - 是的,在您连接的套接字流上,如果底层蓝牙连接断开连接,您将收到 IOExceptions,Android 无法处理自动恢复 - 通常应用程序需要检测断开连接的原因并尝试重新连接(如果适用)。因此,如果您想从上次成功接收/发送的点继续数据交换,那么您的应用程序应该保持某种序列号和轻协议以实现恢复。另一种选择是简单地从重新连接时的数据交换开始(因此取决于您的用例)

相关内容

  • 没有找到相关文章

最新更新