Ten dokument opisuje, jak używać serial API do odczytu i zapisu z urządzeń szeregowych. Chrome, Aplikacje mogą też łączyć się z urządzeniami USB i Bluetooth.
Wymagania dotyczące pliku manifestu
Musisz dodać parametr „serial” uprawnienia do pliku manifestu:
"permissions": [
"serial"
]
Wyświetlam listę dostępnych portów szeregowych
Aby uzyskać listę ścieżek powiązanych z dostępnymi portami szeregowymi, użyj narzędzia serial.getDevices
.
. Uwaga: nie wszystkie porty szeregowe są dostępne. Interfejs API wykorzystuje heurystykę tylko do udostępniania numerów seryjnych
które powinny być bezpieczne.
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path);
}
}
chrome.serial.getDevices(onGetDevices);
Łączenie z urządzeniem szeregowym
Jeśli znasz ścieżkę powiązaną z portem szeregowym, możesz się z nim połączyć, używając
Metoda serial.connect
:
chrome.serial.connect(path, options, callback)
Parametr | Opis |
---|---|
ścieżka (ciąg) | Jeśli ścieżka powiązana z portem urządzenia jest nieznana, możesz użyć metody serial.getDevices . |
opcje (obiekt) | Obiekt parametru z kilkoma wartościami konfiguracyjnymi. Szczegółowe informacje znajdziesz na stronie serial.ConnectionOptions. |
wywołanie zwrotne | Wywoływana po udanym otwarciu portu. Wywołanie zwrotne zostanie wywołane z jednym parametrem (connectionInfo ), który ma kilka ważnych wartości. Więcej informacji znajdziesz na stronie serial.ConnectionInfo. |
Prosty przykład:
var onConnect = function(connectionInfo) {
// The serial port has been opened. Save its id to use later.
_this.connectionId = connectionInfo.connectionId;
// Do whatever you need to do with the opened port.
}
// Connect to the serial port /dev/ttyS01
chrome.serial.connect("/dev/ttyS01", {bitrate: 115200}, onConnect);
Odłączanie od portu szeregowego
Gdy aplikacja kończy działanie, połączenia z portami szeregowymi, które nie są trwałe, są automatycznie zamykane przez platformę. Jeśli jednak chcesz odłączyć się, gdy aplikacja jest jeszcze uruchomiona, możesz użyć Metoda serial.disconnect:
var onDisconnect = function(result) {
if (result) {
console.log("Disconnected from the serial port");
} else {
console.log("Disconnect failed");
}
}
chrome.serial.disconnect(connectionId, onDisconnect);
Odczyt z portu szeregowego
Interfejs szeregowego interfejsu API odczytuje dane z portu szeregowego i dostarcza odczytywane bajty jako obiekt ArrayBuffer do zdarzenia
słuchaczom. Każdy port, z którym połączona jest Twoja aplikacja, będzie generował zdarzenia odczytu do wszystkich
dodano słuchaczy za pośrednictwem usługi chrome.serial.onReceive.addListener(onReceiveCallback)
. Jeśli jesteś
podłączonych do więcej niż 1 portu jednocześnie, możesz znaleźć odpowiadające im wartości connectionId
zdarzenie odczytu przychodzącego w parametrze wywołania zwrotnego serial.onReceive.
Poniższy przykład może gromadzić bajty odczytu do momentu odczytania nowego wiersza i przekonwertować odebrane Zapis ArrayBuffer na ciąg znaków i wywoływanie metody w przypadku znalezienia nowego wiersza jako ostatniego otrzymanego znaku:
var stringReceived = '';
var onReceiveCallback = function(info) {
if (info.connectionId == expectedConnectionId && info.data) {
var str = convertArrayBufferToString(info.data);
if (str.charAt(str.length-1) === '\n') {
stringReceived += str.substring(0, str.length-1);
onLineReceived(stringReceived);
stringReceived = '';
} else {
stringReceived += str;
}
}
};
chrome.serial.onReceive.addListener(onReceiveCallback);
// [...] not shown here: connect to the serial port
Wysyłanie danych do portu szeregowego
Wysyłanie danych jest prostsze niż ich czytanie. Jedynym problemem jest to, że jeśli protokół danych jest oparty na ciągach znaków,
musisz przekonwertować ciąg wyjściowy na ArrayBuffer
. Oto przykładowy kod:
var writeSerial=function(str) {
chrome.serial.send(connectionId, convertStringToArrayBuffer(str), onSend);
}
// Convert string to ArrayBuffer
var convertStringToArrayBuffer=function(str) {
var buf=new ArrayBuffer(str.length);
var bufView=new Uint8Array(buf);
for (var i=0; i<str.length; i++) {
bufView[i]=str.charCodeAt(i);
}
return buf;
}
Opróżnianie bufora portu szeregowego
Bufor portów szeregowych możesz opróżnić, uruchamiając polecenie flush:
chrome.serial.flush(connectionId, onFlush);
Więcej
Interfejs Serial API ma kilka innych funkcji. Możesz na przykład ustawić połączenie jako trwałe, może odbierać dane nawet wtedy, gdy aplikacja nie jest uruchomiona. Można też zaktualizować parametry połączenia funkcji serial.update, takich jak szybkość transmisji bitów, czas oczekiwania, sygnały sterujące i wiele innych . Aby dowiedzieć się więcej, zapoznaj się z pełną treścią dokumentacji interfejsu serial API.