Appareils série

Ce document explique comment utiliser l'API série pour lire et écrire des données à partir d'appareils série. Les applications Chrome peuvent également se connecter à des appareils USB et Bluetooth.

Exigence du fichier manifeste

Vous devez ajouter l'autorisation "série" au fichier manifeste:

"permissions": [
  "serial"
]

Lister les ports série disponibles

Pour obtenir la liste des chemins d'accès associés aux ports série disponibles, utilisez la méthode serial.getDevices. Remarque:Tous les ports série ne sont pas disponibles. L'API utilise des méthodes heuristiques pour n'exposer que les appareils série censés être sûrs.

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

Se connecter à un appareil série

Si vous connaissez le chemin d'accès associé au port série, vous pouvez vous y connecter à l'aide de la méthode serial.connect:

chrome.serial.connect(path, options, callback)
ParamètresDescription
path (chaîne)Si le chemin d'accès associé au port de votre appareil est inconnu, vous pouvez utiliser la méthode serial.getDevices.
options (objet)Objet de paramètre avec plusieurs valeurs de configuration. Pour en savoir plus, consultez serial.ConnectionOptions
rappelAppelée lorsque le port a été ouvert. Le rappel sera appelé avec un paramètre, connectionInfo, qui comporte plusieurs valeurs importantes. Pour en savoir plus, consultez serial.ConnectionInfo.

Exemple simple:

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

Se déconnecter d'un port série

Lorsqu'une application s'arrête, les connexions aux ports série qui ne sont pas persistants sont automatiquement fermées par la plate-forme. Toutefois, si vous souhaitez vous déconnecter alors que votre application est toujours en cours d'exécution, vous pouvez utiliser la méthode 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);

Lire à partir d'un port série

L'API série lit à partir du port série et fournit les octets lus sous forme de ArrayBuffer aux écouteurs d'événements. Chaque port auquel votre application est connectée génère des événements de lecture pour tous les écouteurs ajoutés via chrome.serial.onReceive.addListener(onReceiveCallback). Si vous êtes connecté à plusieurs ports en même temps, vous pouvez trouver le connectionId correspondant d'un événement de lecture entrant dans le paramètre de rappel de serial.onReceive.

L'exemple suivant peut accumuler des octets lus jusqu'à ce qu'une nouvelle ligne soit lue, ce qui convertit le ArrayBuffer reçu en String et appelle une méthode lorsqu'un retour à la ligne est détecté comme dernier caractère reçu:

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

Envoyer des données vers un port série

Il est plus simple d'envoyer des données que de les lire. Le seul intérêt est que si votre protocole de données est basé sur des chaînes, vous devez convertir votre chaîne de sortie en ArrayBuffer. Consultez l'exemple de code ci-dessous:

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

Vider un tampon de port série

Vous pouvez vider votre tampon de port série en exécutant la commande de vidage:

  chrome.serial.flush(connectionId, onFlush);

More

L'API Serial possède plusieurs autres fonctionnalités. Par exemple, vous pouvez définir une connexion comme persistante afin qu'elle puisse recevoir des données même lorsque votre application n'est pas en cours d'exécution, ou mettre à jour les paramètres de connexion à la volée, tels que le débit, les délais avant expiration, les signaux de contrôle et bien d'autres, avec la méthode serial.update. Pour en savoir plus, consultez la documentation de référence complète sur l'API serial.