如何解决Xamarin Android 蓝牙通信接收如何处理数据
好久没问了。
我正在开发一个通过蓝牙与设备通信的应用。 通信有效,但我不喜欢我糟糕的接收编码,需要一些帮助才能找到使其更稳定和可靠的方法。
我连接的设备发送起始位、消息和结束位。 每个消息(开始、消息和结束位)总是一个字节,但消息可以从 1 到 6 个消息不等,例如:
- 开始位
- 消息位
- 消息位
- 消息位
- 结束位
所以,现在我在发送命令后使用 await Task.Delay:
SendCommand() {
outStream.Write(TxBuffer,TxBuffer.Length);
await Task.Delay(200);
}
当我从我的设备接收消息时,我使用 ProcessBuffer (InputStreamInvoker)
public async void ProcessBuffer(byte[] data)
将所有消息存储在一个 Ilist 中,然后当等待结束时,它从 Ilist 中读取。
此代码发送命令从设备读取参数:
await SystReadpgmParam(address,1)
if (responseAwaited.Count > 0)
{
// Do whatever with the response
}
SystReadpgmparam() 编译消息,然后调用包含 await Task.Delay(200) 的 SendCommand()。这有很多不好的地方:
- 延迟始终设置为 200,即使消息是一位 使通信变慢。
- 即使通信以这种方式进行,在读取开始之前响应未完成的可能性也很大。
我想要等待 ProcessBuffer() 完成的东西,以便我确定我总是收到正确的响应。
ReadWord(address) {
SystReadpgmParam(address,1);
/*
How to process the response from list?
*/
}
SystReadpgmParam(address,1) {
SendCommand(); // All response from device go through ProcessBuffer()
}
ProcessBuffer() {
// Collects all information from device in a list (reads start,end and message bit)
}
我希望我解释了我在找什么:) 谢谢各位!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。