Chrome.Serial API - シリアルを介した正しいバイト数を読む
-
20-12-2019 - |
質問
arduino UNOを介して通信するGoogle Chrome拡張機能に取り組んでいます。次の関数sendSerialCmd
を、シリアル接続から読み込まれたReadInfo.Data(ArrayBuffer)が渡されるポート(文字列)、serial_cmd(ArrayBuffer)、およびCallback関数を作成します。
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) });
};
.
私が稼働した問題の1つは、chrome.serial.read()
関数に渡された3番目のパラメータです。 chrome.Serial API、3番目のパラメータはです。 ByTestOread(整数):を読み込むバイト数は、私のArduinoから来るバイト数は変更されることがあります。時々私は8バイト、他の時間もっと得るかもしれません。私のArduinoから返送されたすべてのバイトを取得する最善の方法は何ですか?
Arduinoは、 syrial.available()と呼ばれる関数を介して新しいソリューションを持っています読み取り可能なバイト数。 Chrome.Serial APIでできることが似たものはありますか?
解決
Chrome Serial APIのSerial.available()
と同様の機能はありませんが、妥当なバイト数を調整して自分のペースのデータを処理するだけです。
read
が(言う)1024バイト、8バイトしか使用できない場合、read
は依然として8バイトですぐに成功する必要があります。8バイトのメッセージと12バイトのメッセージがある場合は、read
が20バイトで成功し、結果のデータを解析するために必要なロジックを適用できます。
FYI、シリアルAPIはカナリアですぐに変化しており、read
で手動でポーリングする責任がなくなります。代わりに、Chromeはあなたのためにポーリングし、データがオープンデバイスから入手可能であるため、chrome.serial.onReceive
イベントを発表します。