Pergunta

Estou trabalhando em uma extensão do Google Chrome que se comunica com um Arduino UNO via serial.Eu escrevi a seguinte função sendSerialCmd que usa uma porta (string), um serial_cmd (ArrayBuffer) e uma função de retorno de chamada que recebe readInfo.data (um ArrayBuffer) que é lido a partir da conexão serial.

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

Um dos problemas que encontrei é o terceiro parâmetro passado para o chrome.serial.read() função.No cromo.serial API, o terceiro parâmetro é o bytesToRead (inteiro):O número de bytes a serem lidos, no entanto, o número de bytes provenientes do meu Arduino está sujeito a alterações.Às vezes posso obter 8 bytes, outras vezes mais.Qual é a melhor maneira de receber todos os bytes enviados de volta do meu Arduino?

Arduino tem uma solução inovadora através de uma função chamada Serial.disponível() que retorna o número de bytes disponíveis para leitura.Posso fazer algo semelhante com a API Chrome.serial?

Foi útil?

Solução

Não há funcionalidade semelhante a Serial.available() na API serial do Chrome, mas você deve apenas pesquisar um número razoável de bytes e processar os dados em seu próprio ritmo.

Se um read for solicitado para (digamos) 1024 bytes e apenas 8 bytes estiverem disponíveis, o read ainda deve ter sucesso rapidamente com apenas 8 bytes.Se houver uma mensagem de 8 bytes e uma mensagem de 12 bytes disponíveis, o read terá sucesso com 20 bytes e você poderá aplicar qualquer lógica necessária para analisar os dados resultantes.

Para sua informação, a API serial mudará em breve no Canary e você não será mais responsável pela pesquisa manual com read.Em vez disso, o Chrome fará uma pesquisa para você e disparará chrome.serial.onReceive eventos, pois os dados estão disponíveis em um dispositivo aberto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top