Chrome.serial API - 通过串行读取正确的字节数
-
20-12-2019 - |
题
我正在开发一个 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,第三个参数是 字节读取(整数):要读取的字节数, 但是,来自 Arduino 的字节数可能会发生变化。有时我可能会得到 8 个字节,有时更多。获取从 Arduino 发回的所有字节的最佳方法是什么?
Arduino 有一个新颖的解决方案,通过一个名为 串行可用() 它返回可供读取的字节数。我可以使用 Chrome.serial API 做类似的事情吗?
解决方案
没有类似的功能 Serial.available()
在 Chrome 串行 API 中,但您应该只轮询一些合理的字节数并按照自己的节奏处理数据。
如果一个 read
请求(例如)1024 字节,但只有 8 字节可用, read
只需 8 个字节,仍然应该很快成功。如果有 8 字节消息和 12 字节消息可用,则 read
将成功使用 20 个字节,您可以应用解析结果数据所需的任何逻辑。
仅供参考,Canary 中的串行 API 即将发生变化,您将不再负责手动轮询 read
. 。相反,Chrome 会轮询您并触发 chrome.serial.onReceive
事件作为数据可从开放设备获取。
不隶属于 StackOverflow