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 (将#修改为@)