Pregunta

Estoy trabajando en una extensión de Google Chrome que se comunica con un Arduino UNO a través de serie.Escribí la siguiente función sendSerialCmd que toma un puerto (cadena), un serial_cmd (ArrayBuffer) y una función de devolución de llamada que pasa readInfo.data (un ArrayBuffer) que se lee desde la conexión serie.

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

Uno de los problemas con los que me he topado es el tercer parámetro pasado al chrome.serial.read() función.En el chrome.serial API, el tercer parámetro es el bytesToRead (entero):El número de bytes a leer., sin embargo, la cantidad de bytes que llegan desde mi Arduino está sujeta a cambios.A veces puedo obtener 8 bytes, otras veces más.¿Cuál es la mejor manera de recuperar todos los bytes desde mi Arduino?

Arduino tiene una solución novedosa a través de una función llamada Serie.disponible() que devuelve el número de bytes disponibles para leer.¿Hay algo similar que pueda hacer con la API Chrome.serial?

¿Fue útil?

Solución

No existe una funcionalidad similar a Serial.available() en la API serial de Chrome, pero solo debe sondear una cantidad razonable de bytes y procesar los datos a su propio ritmo.

si un read se solicita para (digamos) 1024 bytes y solo hay 8 bytes disponibles, el read Aún así debería tener éxito rápidamente con solo 8 bytes.Si hay un mensaje de 8 bytes y un mensaje de 12 bytes disponibles, el read tendrá éxito con 20 bytes y podrá aplicar cualquier lógica que sea necesaria para analizar los datos resultantes.

Para su información, la API en serie cambiará pronto en Canary y ya no será responsable de sondear manualmente con read.En lugar de eso, Chrome sondeará por ti y despedirá chrome.serial.onReceive eventos ya que los datos están disponibles desde un dispositivo abierto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top