首页 文章

Chrome.serial API - 通过串行读取正确的字节数

提问于
浏览
1

我正在开发一个Google Chrome扩展程序,可以通过串口与Arduino UNO进行通信 . 我编写了以下函数 sendSerialCmd ,它接受一个端口(字符串),一个serial_cmd(ArrayBuffer),以及一个从串行连接读入的传递readInfo.data(一个ArrayBuffer)的回调函数 .

var CONNECTION_ID = -1;
var sendSerialCmd = function(port, serial_cmd, callback) {
chrome.serial.open(port, null, function(openInfo){
    CONNECTION_ID = openInfo.connectionId;
    if (CONNECTION_ID == -1) {
        console.log('Could not connect to serial');
        return;
    }
    chrome.serial.write(CONNECTION_ID, serial_cmd, function(writeInfo){
        chrome.serial.read(CONNECTION_ID, 8, function(readInfo){
            callback(readInfo.data);
        });
    })
});
chrome.serial.close(CONNECTION_ID, function(result){ console.log(result) });
};

我遇到的一个问题是传递给 chrome.serial.read() 函数的第三个参数 . 在chrome.serial API中,第三个参数是 bytesToRead ( integer ): The number of bytes to read ,但是,从我的Arduino进入的字节数可能会发生变化 . 有时我可能会得到8个字节,有时候会得到更多 . 获取从Arduino发回的所有字节的最佳方法是什么?

Arduino通过一个名为Serial.available()的函数提供了一种新颖的解决方案,它返回可读取的字节数 . 我可以使用Chrome.serial API进行类似的操作吗?

1 回答

  • 3

    Chrome串行API中没有与 Serial.available() 类似的功能,但您应该轮询一些合理的字节数并按照自己的进度处理数据 .

    如果(例如)1024字节请求 read 且只有8个字节可用,则 read 仍然应该只用8个字节快速成功 . 如果有一个8字节的消息和一个12字节的消息可用, read 将以20个字节成功,您可以应用解析结果数据所需的任何逻辑 .

    仅供参考,串行API即将在Canary中更改,您将不再负责使用 read 进行手动轮询 . 相反,Chrome会为您轮询并触发 chrome.serial.onReceive 事件,因为可以从打开的设备获取数据 .

相关问题