微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Android 蓝牙通信接收如何处理数据

如何解决Xamarin Android 蓝牙通信接收如何处理数据

好久没问了。

我正在开发一个通过蓝牙与设备通信的应用。 通信有效,但我不喜欢我糟糕的接收编码,需要一些帮助才能找到使其更稳定和可靠的方法

我连接的设备发送起始位、消息和结束位。 每个消息(开始、消息和结束位)总是一个字节,但消息可以从 1 到 6 个消息不等,例如:

  1. 开始位
  2. 消息位
  3. 消息位
  4. 消息位
  5. 结束位

所以,现在我在发送命令后使用 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()。这有很多不好的地方:

  1. 延迟始终设置为 200,即使消息是一位 使通信变慢。
  2. 即使通信以这种方式进行,在读取开始之前响应未完成的可能性也很大。

我想要等待 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 举报,一经查实,本站将立刻删除。