-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserial.js
83 lines (66 loc) · 2.7 KB
/
serial.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
var loadedListener = function() {
console.log('loaded');
debugger;
// デバイスをリスト化して、画面に表示する
chrome.serial.getDevices(function(devices) {
var list = document.getElementById('list');
var selection = document.getElementById('port');
devices.forEach(function(port){
// 画面に表示
var li = document.createElement('li');
li.textContent = port.path;
list.appendChild(li);
// select menu に追加
var option = document.createElement('option');
option.value = port.path;
// 今のところ、手元の環境ではport.displayNameが設定されていない
option.text = port.displayName ? port.displayName : port.path;
selection.appendChild(option);
});
});
};
window.addEventListener('load', loadedListener, false);
var onConnectCallback = function(connectionInfo){
// onReceiveイベントでconnectionIdの一致を確認するので、保持しておく
connectionId = connectionInfo.connectionId;
}
var clickedListener = function() {
console.log('clicked');
var e = document.getElementById('port');
var port = e.options[e.selectedIndex].value;
chrome.serial.connect(port, {bitrate: 19200, receiveTimeout: 1000}, onConnectCallback);
}
document.getElementById('connect').addEventListener("click", clickedListener, false);
/* Interprets an ArrayBuffer as UTF-8 encoded string data. */
function convertArrayBufferToString(buf){
var bufView = new Uint8Array(buf);
var encodedString = String.fromCharCode.apply(null, bufView);
return decodeURIComponent(escape(encodedString));
}
var onReceiveCallback = function(info) {
console.log('received');
if (info.connectionId == connectionId && info.data) {
// こいつがうまく動かない:メソッドを定義してあげるとよい
var str = convertArrayBufferToString(info.data);
// 改行コード来たら、一つのデータの終端
if (str.charAt(str.length-1) === '\n') {
arrayReceived.push(stringReceived);
stringReceived = '';
} else {
stringReceived += str;
}
}
};
chrome.serial.onReceive.addListener(onReceiveCallback);
var onDisconnectCallback = function(result) {
if (result) { console.log('disconnected'); }
else { console.log('error'); }
}
var onReceiveErrorCallback = function(info) {
console.log('end');
// receiveTimeoutで設定した時間が経過すると、このイベントが発生
// ->データの受信は全て完了したとみなし、受信データを一覧表示する
console.log(arrayReceived.join(','));
var disconnect = chrome.serial.disconnect(connectionId, onDisconnectCallback);
}
chrome.serial.onReceiveError.addListener(onReceiveErrorCallback);