الأجهزة التسلسلية

يصف هذا المستند كيفية استخدام serial API للقراءة والكتابة من الأجهزة التسلسلية. Chrome يمكن للتطبيقات أيضًا الاتصال بأجهزة USB وبلوتوث.

متطلبات ملف البيان

يجب إضافة الإذن "serial" إلى ملف البيان:

"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). إذا كنت متصلاً بأكثر من منفذ واحد في الوقت نفسه، قد تجد سمة connectionId المقابلة لحدث قراءة وارد في معلَمة معاودة الاتصال في serial.onReceive.

يمكن أن يتراكم في المثال التالي وحدات بايت للقراءة إلى أن تتم قراءة سطر جديد، ويحوِّل الصفيف الذي تم استلامه إلى سلسلة ويستدعي طريقة عند العثور على سطر جديد على أنّه آخر حرف تم استلامه:

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

تنظيف المخزن المؤقت للمنفذ التسلسلي

يمكنك مسح المخزن المؤقت للمنفذ التسلسلي عن طريق إصدار الأمر Flush:

  chrome.serial.flush(connectionId, onFlush);

المزيد

تضم Serial API العديد من الميزات الأخرى. ويمكنك مثلاً ضبط الاتصال على "دائم" ليتمكّن من تلقّي البيانات حتى في حال عدم تشغيل تطبيقك، أو يمكنك تعديل معلَمات الاتصال بسرعة، مثل معدل نقل البيانات ومهلة المهلة وإشارات التحكّم وغيرها باستخدام الطريقة serial.update. اطلع على المرجع الكامل لواجهة برمجة التطبيقات serial للحصول على مزيد من المعلومات.