本文件說明如何使用 serial API 從序列裝置讀取及寫入資料。Chrome 應用程式也可以連線至 USB 和藍牙裝置。
資訊清單規定
您必須新增「序號」資訊清單檔案的權限:
"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 (字串) | 如果與裝置的通訊埠相關聯的路徑不明,可以使用 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);
從序列埠讀取
序列 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;
}
清除序列埠緩衝區
您可以發出清除指令來清除序列埠緩衝區:
chrome.serial.flush(connectionId, onFlush);
更多
Serial API 具備其他功能。比方說,您可以將連線設為永久連線 即使應用程式未執行,您也能接收資料 例如位元率、逾時和控制信號等等,serial.update 方法。詳情請參閱 serial API 的完整參考資料。