Frage

Ich arbeite an einer Google Chrome-Erweiterung, die seriell mit einem Arduino UNO kommuniziert.Ich habe die folgende Funktion geschrieben sendSerialCmd das einen Port (String), einen serial_cmd (ArrayBuffer) und eine Rückruffunktion benötigt, die readInfo.data (einen ArrayBuffer) übergeben bekommt, der von der seriellen Verbindung eingelesen wird.

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) });
};

Eines der Probleme, auf die ich gestoßen bin, ist der dritte Parameter, der an übergeben wird chrome.serial.read() Funktion.Im chrome.serial API, der dritte Parameter ist die bytesToRead (Ganzzahl):Die Anzahl der zu lesenden Bytes, Allerdings kann sich die Anzahl der von meinem Arduino eingehenden Bytes ändern.Manchmal erhalte ich 8 Bytes, manchmal mehr.Was ist der beste Weg, alle Bytes von meinem Arduino zurückzusenden?

Arduino hat eine neuartige Lösung durch eine Funktion namens Serial.available() Dies gibt die Anzahl der zum Lesen verfügbaren Bytes zurück.Kann ich etwas Ähnliches mit der Chrome.serial-API tun?

War es hilfreich?

Lösung

Es gibt keine vergleichbare Funktionalität Serial.available() in der seriellen Chrome-API, aber Sie sollten einfach eine angemessene Anzahl von Bytes abfragen und die Daten in Ihrem eigenen Tempo verarbeiten.

Wenn ein read wird für (sagen wir) 1024 Bytes angefordert und nur 8 Bytes sind verfügbar, die read sollte mit nur 8 Bytes trotzdem schnell gelingen.Wenn eine 8-Byte-Nachricht und eine 12-Byte-Nachricht verfügbar sind, wird die read wird mit 20 Bytes erfolgreich sein und Sie können jede erforderliche Logik anwenden, um die resultierenden Daten zu analysieren.

Zu Ihrer Information: Die serielle API wird sich in Canary bald ändern und Sie sind nicht mehr für die manuelle Abfrage verantwortlich read.Stattdessen führt Chrome eine Abfrage für Sie durch und löst die Aktion aus chrome.serial.onReceive Ereignisse, da Daten von einem offenen Gerät verfügbar sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top