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

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

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

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

"permissions": [
  "serial"
]

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

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

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

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

אם ידוע לכם מהו הנתיב שמשויך ליציאה הטורית, אפשר להתחבר אליה באמצעות ה-method serial.connect:

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

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

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

בדוגמה הבאה ניתן לצבור בייטים של קריאה עד לקריאת שורה חדשה, ולהמיר את ה-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;
}

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

אפשר לרוקן את מאגר הנתונים הזמני של היציאה הטורית על ידי הרצת פקודת ה-Flush:

  chrome.serial.flush(connectionId, onFlush);

עוד

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