-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserial.js
74 lines (63 loc) · 2.13 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
let port;
let reader;
let inputDone;
let outputDone;
let inputStream;
let outputStream;
const connectButton = document.getElementById('connectButton');
const disconnectButton = document.getElementById('disconnectButton');
const ledOnButton = document.getElementById('ledOnButton');
const ledOffButton = document.getElementById('ledOffButton');
const output = document.getElementById('output');
connectButton.addEventListener('click', async () => {
try {
port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
const textEncoder = new TextEncoderStream();
outputDone = textEncoder.readable.pipeTo(port.writable);
outputStream = textEncoder.writable;
const textDecoder = new TextDecoderStream();
inputDone = port.readable.pipeTo(textDecoder.writable);
inputStream = textDecoder.readable.pipeTo(new WritableStream({
write(value) {
output.value += value;
}
}));
connectButton.disabled = true;
disconnectButton.disabled = false;
ledOnButton.disabled = false;
ledOffButton.disabled = false;
} catch (e) {
console.error(e);
}
});
disconnectButton.addEventListener('click', async () => {
if (reader) {
await reader.cancel();
await inputDone.catch(() => { /* Ignore the error */ });
reader = null;
inputDone = null;
}
if (outputStream) {
await outputStream.getWriter().close();
await outputDone;
outputStream = null;
outputDone = null;
}
await port.close();
port = null;
connectButton.disabled = false;
disconnectButton.disabled = true;
ledOnButton.disabled = true;
ledOffButton.disabled = true;
});
ledOnButton.addEventListener('click', async () => {
const writer = outputStream.getWriter();
await writer.write('1');
writer.releaseLock();
});
ledOffButton.addEventListener('click', async () => {
const writer = outputStream.getWriter();
await writer.write('0');
writer.releaseLock();
});