Seriële apparaten

Dit document beschrijft hoe u de seriële API kunt gebruiken om vanaf seriële apparaten te lezen en te schrijven. Chrome Apps kunnen ook verbinding maken met USB- en Bluetooth -apparaten.

Duidelijke eis

U moet de machtiging "serieel" toevoegen aan het manifestbestand:

"permissions": [
  "serial"
]

Lijst met beschikbare seriële poorten

Gebruik de methode serial.getDevices om een ​​lijst met paden op te halen die zijn gekoppeld aan beschikbare seriële poorten. Let op: niet alle seriële poorten zijn beschikbaar. De API maakt gebruik van heuristieken om alleen seriële apparaten bloot te leggen waarvan wordt verwacht dat ze veilig zijn.

var onGetDevices = function(ports) {
  for (var i=0; i<ports.length; i++) {
    console.log(ports[i].path);
  }
}
chrome.serial.getDevices(onGetDevices);

Verbinding maken met een serieel apparaat

Als u het pad kent dat aan de seriële poort is gekoppeld, kunt u er verbinding mee maken met behulp van de serial.connect methode:

chrome.serial.connect(path, options, callback)
Parameter Beschrijving
pad (tekenreeks) Als het pad dat aan de poort van uw apparaat is gekoppeld onbekend is, kunt u de methode serial.getDevices gebruiken.
opties (object) Parameterobject met meerdere configuratiewaarden. Zie details op serial.ConnectionOptions
terugbellen Wordt aangeroepen wanneer de poort succesvol is geopend. De callback wordt aangeroepen met één parameter, connectionInfo , die verschillende belangrijke waarden heeft. Zie details op serial.ConnectionInfo .

Een eenvoudig voorbeeld:

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

Loskoppelen van een seriële poort

Wanneer een app wordt beëindigd, worden verbindingen met niet-persistente seriële poorten automatisch door het platform gesloten. Als u echter de verbinding wilt verbreken terwijl uw app nog actief is, kunt u de serial.disconnect- methode gebruiken:

var onDisconnect = function(result) {
  if (result) {
    console.log("Disconnected from the serial port");
  } else {
    console.log("Disconnect failed");
  }
}
chrome.serial.disconnect(connectionId, onDisconnect);

Lezen vanaf een seriële poort

De seriële API leest vanaf de seriële poort en levert de gelezen bytes als een ArrayBuffer aan gebeurtenislisteners. Elke poort waarmee uw toepassing is verbonden, genereert leesgebeurtenissen voor alle luisteraars die zijn toegevoegd via chrome.serial.onReceive.addListener(onReceiveCallback) . Als u tegelijkertijd met meer dan één poort bent verbonden, kunt u de overeenkomstige connectionId van een inkomende leesgebeurtenis vinden in de callback-parameter van serial.onReceive .

In het volgende voorbeeld kunnen leesbytes worden verzameld totdat een nieuwe regel wordt gelezen, waarbij de ontvangen ArrayBuffer wordt geconverteerd naar String en een methode wordt aangeroepen wanneer een nieuwe regel wordt gevonden als het laatste ontvangen teken:

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

Gegevens verzenden naar een seriële poort

Gegevens verzenden is eenvoudiger dan lezen. Het enige probleem is dat als uw gegevensprotocol op String is gebaseerd, u uw uitvoerreeks naar een ArrayBuffer moet converteren. Zie het codevoorbeeld hieronder:

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

Een seriële poortbuffer leegmaken

U kunt uw seriële poortbuffer leegmaken door de opdracht flush te geven:

  chrome.serial.flush(connectionId, onFlush);

Meer

De seriële API heeft verschillende andere functies. U kunt bijvoorbeeld een verbinding instellen op persistent, zodat deze gegevens kan ontvangen, zelfs als uw app niet actief is, of u kunt verbindingsparameters direct bijwerken, zoals bitrate, time-outs, besturingssignalen en vele andere met de seriële verbinding. update methode. Zie de volledige referentie van de seriële API voor meer informatie.