Urządzenia seryjne

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)
ParametrOpis
ś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 zwrotneWywoł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.