有没有办法从离子蓝牙模块正确读取原始数据?

Is there a way to properly read raw data from ionic bluetooth module?

我正在尝试通过离子蓝牙串口从设备读取原始数据。设备每次传输向应用程序发送 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

Edit2:这是蓝牙串口读取数据的方式:

Edit3:来自订阅的原始数据:

@T.J Crowder 谢谢指教。是的,我确实必须使用 observable 才能从设备读取数据,因为数据是流。现在一切正常。