W tym dokumencie opisujemy, jak używać serialowego interfejsu API do odczytu i zapisu na urządzeniach szeregowych. Chrome Aplikacje mogą też łączyć się z urządzeniami USB i Bluetooth.
Wymagania dotyczące pliku manifestu
Do pliku manifestu musisz dodać uprawnienie „serial”:
"permissions": [
"serial"
]
Wyświetlam listę dostępnych portów szeregowych
Aby uzyskać listę ścieżek powiązanych z dostępnymi portami szeregowymi, użyj metody serial.getDevices
. Uwaga: nie wszystkie porty szeregowe są dostępne. Interfejs API używa heurystyki do ujawniania tylko tych urządzeń szeregowych, 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 nią połączyć, korzystając z metody serial.connect
:
chrome.serial.connect(path, options, callback)
Parametr | Opis |
---|---|
ścieżka (ciąg znaków) | 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 pomyślnym otwarciu portu. Wywołanie zwrotne zostanie zrealizowane z jednym parametrem (connectionInfo ), który ma kilka ważnych wartości. Szczegółowe informacje 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
Po zamknięciu aplikacji połączenia z nietrwałymi portami szeregowymi są automatycznie zamykane przez platformę. Jeśli jednak chcesz odłączyć się, gdy aplikacja jest nadal uruchomiona, możesz użyć metody 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 szeregowy API odczytuje dane z portu szeregowego i dostarcza bajty odczytu do odbiorników zdarzeń w postaci bufora tablicy. Każdy port, z którym jest połączona aplikacja, będzie generować zdarzenia odczytu dla wszystkich odbiorników dodanych za pomocą chrome.serial.onReceive.addListener(onReceiveCallback)
. Jeśli masz połączenie z więcej niż 1 portem w tym samym czasie, wartość connectionId
dla zdarzenia odczytu przychodzącego możesz znaleźć w parametrze wywołania zwrotnego serial.onReceive.
W tym przykładzie można gromadzić bajty odczytane do momentu odczytania nowego wiersza, konwertować otrzymany obiekt SlateBuffer na String i wywołać metodę, gdy jako ostatni zostanie znaleziony nowy wiersz:
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ż odczytywanie. Jedynym wyjątkiem jest to, że jeśli protokół danych jest oparty na ciągu znaków, musisz przekonwertować ciąg wyjściowy na ArrayBuffer
. Zobacz przykładowy kod poniżej:
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
Możesz wyczyścić bufor portu szeregowego, 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 trwałe, aby otrzymywać dane nawet wtedy, gdy aplikacja nie jest uruchomiona, lub na bieżąco aktualizować parametry połączenia, takie jak szybkość transmisji bitów, limity czasu, sygnały sterujące i wiele innych, za pomocą metody serial.update. Aby dowiedzieć się więcej, zapoznaj się z pełną dokumentacją serial interfejsu API.