我正在尝试通过离子蓝牙串行从设备读取原始数据。设备在每次传输时向应用发送506字节,并在应用响应为“ OK”时等待应用响应,设备随后发送506字节。
有时,该应用在一次传输中未收到506字节,这很奇怪,因为设备正在发送506字节(已确认)。由于某些原因,该应用程序未收到506个字节。它仅接收其中的一小部分,然后丢弃或遗漏的任何内容将随后发送。每506个字节都有CRC,有时CRC失败(这很好),但是当应用要求重新发送最后506个字节时,CRC将再次失败。但是设备没有任何问题(已确认)。我的假设是,当数据到达ionic / Cordova中的蓝牙缓冲区时,发生了某些事情。
我的问题是我在这里做错了什么?我可能无法正确读取数据吗?有没有人遇到过这类问题?
我尝试过的事情: 我尝试添加时间延迟,然后才开始要求数据。那根本没有用。我尝试让设备从头开始重新启动发送数据的过程,但这也不起作用。
async getBTRawData(): Promise<any> {
let result = new Array();
const res = this.bluetoothSerial.subscribeRawData().subscribe((data) => {
let buffer = new Uint8Array(data);
console.log("buffer items: ", buffer);
buffer.forEach((item) => {
result.push(item);
});
// this.bluetoothSerial.clear().then(data => {
// console.log("Is buffer clear before reciving new messages?:", data);
// });
}, err => {
console.log("err: ", err);
});
return result;
}
我希望每次都能获得506个字节而不会造成任何损失,因为手机和设备彼此相邻。我知道CRC是否失败一两次,但是重新发送应该可以解决该问题。如果506字节在被应用程序接收时没有分成大块,那就太好了。
编辑:数据如下:Raw data
答案 0 :(得分:0)
@ T.J Crowder感谢您的指导。是的,由于数据是流,因此我必须使用observable才能从设备读取数据。现在一切正常。