सीरियल डिवाइस

इस दस्तावेज़ में, सीरियल डिवाइसों पर कॉन्टेंट लिखने और पढ़ने के लिए सीरियल एपीआई इस्तेमाल करने का तरीका बताया गया है. Chrome ऐप्लिकेशन यूएसबी और ब्लूटूथ डिवाइसों से भी कनेक्ट हो सकते हैं.

मेनिफ़ेस्ट फ़ाइल के लिए ज़रूरी शर्तें

आपको मेनिफ़ेस्ट फ़ाइल में, "क्रम" की अनुमति जोड़नी होगी:

"permissions": [
  "serial"
]

उपलब्ध सीरियल पोर्ट की सूची

उपलब्ध सीरियल पोर्ट से जुड़े पाथ की सूची पाने के लिए, serial.getDevices तरीके का इस्तेमाल करें. ध्यान दें: सभी सीरियल पोर्ट उपलब्ध नहीं हैं. यह एपीआई सिर्फ़ ऐसे सीरियल डिवाइसों को सार्वजनिक करने के लिए अनुमानों का इस्तेमाल करता है जिनके सुरक्षित होने की उम्मीद होती है.

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

किसी सीरियल डिवाइस से कनेक्ट कर रहा है

अगर आपको सीरियल पोर्ट से जुड़ा पाथ पता है, तो serial.connect तरीके का इस्तेमाल करके इसे कनेक्ट किया जा सकता है:

chrome.serial.connect(path, options, callback)
पैरामीटरब्यौरा
पाथ (स्ट्रिंग)अगर आपके डिवाइस के पोर्ट से जुड़े पाथ की जानकारी नहीं है, तो serial.getDevices तरीके का इस्तेमाल किया जा सकता है.
विकल्प (ऑब्जेक्ट)कई कॉन्फ़िगरेशन वैल्यू वाला पैरामीटर ऑब्जेक्ट. जानकारी serial.ConnectionOptions पर देखें
कॉलबैकपोर्ट के खुलने पर चालू हो जाता है. कॉलबैक को एक पैरामीटर connectionInfo के साथ कॉल किया जाएगा, जिसमें कई अहम वैल्यू होंगी. ज़्यादा जानकारी के लिए, serial.ConnectionInfo पर जाएं.

एक आसान उदाहरण:

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

सीरियल पोर्ट से डिसकनेक्ट करना

जब कोई ऐप्लिकेशन बंद हो जाता है, तो ऐसे सीरियल पोर्ट के कनेक्शन अपने-आप बंद हो जाते हैं जो स्थायी नहीं हैं. हालांकि, अगर आपका ऐप्लिकेशन चलने के दौरान उसे डिसकनेक्ट करना है, तो 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);

सीरियल पोर्ट से रीडिंग

सीरियल एपीआई, सीरियल पोर्ट से डेटा पढ़ता है और इवेंट की सूची सुनने वालों को, arrayBuffer के तौर पर रीड की गई बाइट डिलीवर करता है. आपका ऐप्लिकेशन जिस भी पोर्ट से कनेक्ट होगा, वह chrome.serial.onReceive.addListener(onReceiveCallback) के ज़रिए जोड़े गए सभी श्रोताओं के लिए पढ़ा गया इवेंट जनरेट करेगा. अगर आपने एक ही समय में एक से ज़्यादा पोर्ट से कनेक्ट किया हुआ है, तो आपको serial.onReceive के कॉलबैक पैरामीटर में, इनकमिंग रीड इवेंट का connectionId मिल सकता है.

इस उदाहरण में रीड बाइट तब तक इकट्ठा हो सकती हैं, जब तक नई लाइन को पढ़ा नहीं जाता. साथ ही, जो ArrayBuffer को स्ट्रिंग में बदला जाता है और जब आखिरी वर्ण के तौर पर नई लाइन मिलती है, तब किसी तरीके को कॉल किया जा सकता है:

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

सीरियल पोर्ट पर डेटा भेजना

डेटा भेजना, पढ़ने से ज़्यादा आसान है. बस इतना ही पता चलता है कि अगर आपका डेटा प्रोटोकॉल स्ट्रिंग पर आधारित है, तो आपको अपनी आउटपुट स्ट्रिंग को ArrayBuffer में बदलना होगा. उदाहरण के तौर पर दिया गया यह कोड देखें:

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

सीरियल पोर्ट बफ़र को साफ़ करना

फ़्लश निर्देश जारी करके, सीरियल पोर्ट बफ़र को फ़्लश किया जा सकता है:

  chrome.serial.flush(connectionId, onFlush);

ज़्यादा दिखाएं

Serial API में कई अन्य सुविधाएं हैं. उदाहरण के लिए, स्थायी कनेक्शन को सेट किया जा सकता है, ताकि ऐप्लिकेशन के काम न करने पर भी उसे डेटा मिल सके. इसके अलावा, serial.update वाले तरीके का इस्तेमाल करके कभी भी कनेक्शन के पैरामीटर अपडेट किए जा सकते हैं. जैसे, बिटरेट, टाइम आउट, कंट्रोल सिग्नल वगैरह. ज़्यादा जानकारी के लिए, serial एपीआई का पूरा रेफ़रंस देखें.