node and browser bindings for gleam
at master 63 lines 1.4 kB view raw
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}