Current section

Files

Jump to
plinth src serial_ffi.mjs
Raw

src/serial_ffi.mjs

import { Ok, Error, BitArray } from "./gleam.mjs";
export async function requestPort() {
try {
const port = await globalThis.navigator.serial.requestPort({ filters: [] });
return new Ok(port);
} catch (error) {
console.warn(error);
return new Error();
}
}
export async function getPorts() {
try {
const ports = await globalThis.navigator.serial.getPorts();
return new Ok(ports);
} catch (error) {
console.warn(error);
return new Error();
}
}
export function getInfo(port) {
try {
const { usbVendorId, usbProductId } = port.getInfo();
return new Ok([usbVendorId, usbProductId]);
} catch (error) {
console.warn(error);
return new Error();
}
}
export async function open(port, baudRate) {
try {
await port.open({ baudRate });
return new Ok();
} catch (error) {
console.warn(error);
return new Error();
}
}
export async function read(port, callback) {
while (port.readable) {
const reader = port.readable.getReader();
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
// |reader| has been canceled.
break;
}
callback(new BitArray(value));
// Do something with |value|…
}
return new Ok();
} catch (error) {
return new Error();
} finally {
reader.releaseLock();
}
}
}