במסמך הזה מוסבר איך להשתמש ב-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.