מכשירים עם יציאה טורית

במסמך הזה מוסבר איך להשתמש ב-serial API כדי לקרוא ולכתוב במכשירים עם יציאה טורית. כרום אפליקציות יכולות להתחבר גם למכשירי USB ו-Bluetooth.

דרישה למניפסט

עליך להוסיף את ה'מספר הסידורי' הרשאה לקובץ המניפסט:

"permissions": [
  "serial"
]

הצגת רשימה של יציאות טוריות זמינות

כדי לקבל רשימה של נתיבים שמשויכים ליציאות טוריות זמינות, משתמשים בserial.getDevices. . הערה: לא כל היציאות הטוריות זמינות. ה-API משתמש בהיוריסטיקה כדי לחשוף רק ערכים טוריים מכשירים שצפויים להיות בטוחים.

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)
פרמטרתיאור
path (string)אם הנתיב שמשויך ליציאה של המכשיר לא ידוע, אפשר להשתמש בשיטה serial.getDevices.
options (אובייקט)אובייקט פרמטר עם כמה ערכי תצורה. פרטים נוספים זמינים בכתובת serial.ConnectionOptions
קריאה חוזרת (callback)מופעל כשהיציאה נפתחה בהצלחה. הקריאה החוזרת תתבצע באמצעות פרמטר אחד, 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);

קריאה מיציאה טורית

ה-API הטורי קורא מהיציאה הטורית ומעביר את הבייטים שנקראו כ-ArrayBuffer לאירוע מאזינים. כל יציאה שהאפליקציה מחוברת אליה תיצור אירועי קריאה לכולם מאזינים נוספו דרך chrome.serial.onReceive.addListener(onReceiveCallback). אם אתם שמחוברים ליותר מיציאה אחת בו-זמנית, יכול להיות שה-connectionId יהיה תואם אירוע קריאה נכנס בפרמטר של הקריאה החוזרת של serial.onReceive.

הדוגמה הבאה יכולה לצבור בייטים שנקראו עד שנקראים שורה חדשה, ולהמיר את ArrayBuffer ל-String וקורא לשיטה כאשר נמצאת שורה חדשה כתו האחרון שהתקבל:

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

עוד

ל-Series API יש כמה תכונות נוספות. לדוגמה, תוכלו להגדיר חיבור למצב קבוע, כדי הוא יכול לקבל נתונים גם כשהאפליקציה לא פועלת, או שאפשר לעדכן את הפרמטרים של החיבור ב במהירות, כמו קצב העברת נתונים, זמנים קצובים לתפוגה, אותות בקרה ועוד רבים אחרים בעזרת serial.update . מידע נוסף זמין בחומר העזר המלא של ה-API serial.