Chrome.serial API – чтение нужного количества байтов через последовательный порт

StackOverflow https://stackoverflow.com//questions/20006737

Вопрос

Я работаю над расширением Google Chrome, которое взаимодействует с Arduino UNO через последовательный порт.Я написал следующую функцию sendSerialCmd для этого требуется порт (строка), серийный_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, третий параметр — это bytesToRead (целое число):Количество байтов для чтения, Однако количество байтов, поступающих от моего Arduino, может измениться.Иногда я могу получить 8 байт, иногда больше.Как лучше всего вернуть все байты с моего Arduino?

У Arduino есть новое решение с помощью функции под названием Серийный.доступен() который возвращает количество байтов, доступных для чтения.Могу ли я сделать что-то подобное с API Chrome.serial?

Это было полезно?

Решение

Аналогичного функционала нет Serial.available() в последовательном API Chrome, но вам следует просто запросить некоторое разумное количество байтов и обработать данные в своем собственном темпе.

Если read запрашивается (скажем) 1024 байта, а доступно только 8 байтов, read все равно должно быстро добиться успеха всего с 8 байтами.Если доступно 8-байтовое сообщение и 12-байтовое сообщение, read получится с 20 байтами, и вы сможете применить любую логику, необходимую для анализа полученных данных.

К вашему сведению, последовательный API скоро изменится в Canary, и вы больше не будете нести ответственность за ручной опрос с помощью read.Вместо этого Chrome опрашивает вас и запускает chrome.serial.onReceive события, поскольку данные доступны с открытого устройства.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top