Seri Cihazlar

Bu belgede, seri cihazlardan okuma ve yazma işlemleri gerçekleştirmek için serial API'nin nasıl kullanılacağı açıklanmaktadır. Chrome uygulamaları ayrıca USB ve Bluetooth cihazlara da bağlanabilir.

Manifest gerekliliği

Manifest dosyasına "seri" iznini eklemeniz gerekir:

"permissions": [
  "serial"
]

Kullanılabilir seri bağlantı noktalarını listeleme

Kullanılabilir seri bağlantı noktalarıyla ilişkilendirilen yolların listesini almak için serial.getDevices yöntemini kullanın. Not: Tüm seri bağlantı noktaları kullanılamaz. API yalnızca güvenli olması beklenen seri cihazları ortaya çıkarmak için buluşsal yöntemler kullanır.

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

Seri cihaza bağlanma

Seri bağlantı noktasıyla ilişkilendirilmiş yolu biliyorsanız serial.connect yöntemini kullanarak seri bağlantı noktasına bağlanabilirsiniz:

chrome.serial.connect(path, options, callback)
ParametreAçıklama
path (dize)Cihazınızın bağlantı noktasıyla ilişkilendirilen yol bilinmiyorsa serial.getDevices yöntemini kullanabilirsiniz.
seçenekler (nesne)Birkaç yapılandırma değerine sahip parametre nesnesi. Ayrıntılar için serial.ConnectionOptions bölümüne bakın
geri çağırmaBağlantı noktası başarıyla açıldığında çağrılır. Geri çağırma, birkaç önemli değere sahip tek bir parametreyle (connectionInfo) çağrılır. Ayrıntılar için serial.ConnectionInfo bölümünü inceleyin.

Basit bir örnek:

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

Seri bağlantı noktasının bağlantısını kesme

Bir uygulama sonlandığında, kalıcı olmayan seri bağlantı noktalarına yapılan bağlantılar platform tarafından otomatik olarak kapatılır. Ancak uygulamanız çalışırken bağlantıyı kesmek isterseniz serial.disconnect yöntemini kullanabilirsiniz:

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

Seri bağlantı noktasından okuma

Seri API, seri bağlantı noktasından okur ve okunan baytları bir ArrayBuffer olarak etkinlik işleyicilere iletir. Uygulamanızın bağlı olduğu her bağlantı noktası, chrome.serial.onReceive.addListener(onReceiveCallback) üzerinden eklenen tüm dinleyiciler için okuma etkinlikleri oluşturur. Aynı anda birden fazla bağlantı noktasına bağlıysa gelen bir okuma etkinliğinin karşılık gelen connectionId değerini, serial.onReceive öğesinin geri çağırma parametresinde bulabilirsiniz.

Aşağıdaki örnek, yeni bir satır okununcaya kadar okuma baytları biriktirebilir. Böylece, alınan ArrayBuffer dizesi String'e dönüştürülür ve alınan son karakter olarak yeni bir satır bulunduğunda bir yöntem çağrılır:

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

Seri bağlantı noktasına veri gönderme

Veri göndermek, okumaktan daha kolaydır. Tek yakalama, veri protokolünüz Dize tabanlıysa çıkış dizenizi ArrayBuffer öğesine dönüştürmeniz gerekir. Aşağıdaki kod örneğine bakın:

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

Seri bağlantı noktası arabelleğini temizleme

Temizle komutunu çalıştırarak seri bağlantı noktası arabelleğinizi boşaltabilirsiniz:

  chrome.serial.flush(connectionId, onFlush);

Daha fazla

Serial API'nin başka pek çok özelliği daha vardır. Örneğin, bağlantıyı kalıcı olarak ayarlayabilirsiniz. Böylece uygulamanız çalışmıyorken bile veri alabilir veya serial.update yöntemini kullanarak bit hızı, zaman aşımları, kontrol sinyalleri gibi bağlantı parametrelerini anında güncelleyebilirsiniz. Daha fazla bilgi için serial API'nin tam referansına bakın.