Appareils série

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

Exigence du fichier manifeste

Vous devez ajouter la valeur "serial" l'autorisation d'accès au fichier manifeste:

"permissions": [
  "serial"
]

Liste des 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 exposer uniquement les données des appareils 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);

Connexion à 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 Méthode serial.connect:

chrome.serial.connect(path, options, callback)
ParamètreDescription
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 plus d'informations, consultez serial.ConnectionOptions.
rappelInvoqué lorsque le port a bien été ouvert. Le rappel sera appelé avec un paramètre, connectionInfo, qui comporte plusieurs valeurs importantes. Pour plus d'informations, accédez à 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 se termine, 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 pendant que l'application est en cours d'exécution, vous pouvez utiliser le 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 les données à partir du port série et fournit les octets lus sous forme de objet ArrayBuffer à l'événement pour les auditeurs. Chaque port auquel votre application est connectée génère des événements de lecture pour tous écouteurs ajoutés via chrome.serial.onReceive.addListener(onReceiveCallback). Si vous utilisez connecté à plusieurs ports en même temps, vous pouvez trouver le connectionId correspondant 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 les ArrayBuffer en "String" et appeler une méthode lorsqu'un saut de 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 piège 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 la mémoire tampon du port série à l'aide de la commande flush:

  chrome.serial.flush(connectionId, onFlush);

Plus

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