1import { Ok, Error, BitArray } from "./gleam.mjs";
2
3export async function requestPort() {
4 try {
5 const port = await globalThis.navigator.serial.requestPort({ filters: [] });
6 return new Ok(port);
7 } catch (error) {
8 console.warn(error);
9 return new Error();
10 }
11}
12
13export async function getPorts() {
14 try {
15 const ports = await globalThis.navigator.serial.getPorts();
16 return new Ok(ports);
17 } catch (error) {
18 console.warn(error);
19 return new Error();
20 }
21}
22
23export function getInfo(port) {
24 try {
25 const { usbVendorId, usbProductId } = port.getInfo();
26 return new Ok([usbVendorId, usbProductId]);
27 } catch (error) {
28 console.warn(error);
29 return new Error();
30 }
31}
32
33export async function open(port, baudRate) {
34 try {
35 await port.open({ baudRate });
36 return new Ok();
37 } catch (error) {
38 console.warn(error);
39 return new Error();
40 }
41}
42
43export async function read(port, callback) {
44 while (port.readable) {
45 const reader = port.readable.getReader();
46 try {
47 while (true) {
48 const { value, done } = await reader.read();
49 if (done) {
50 // |reader| has been canceled.
51 break;
52 }
53 callback(new BitArray(value));
54 // Do something with |value|…
55 }
56 return new Ok();
57 } catch (error) {
58 return new Error();
59 } finally {
60 reader.releaseLock();
61 }
62 }
63}