var serialPort = null; async function SerialConnect() { serialPort = await navigator.serial.requestPort(); // ports = await navigator.serial.getPorts(); try { await serialPort.open({ baudRate: "115200", dataBits: "8", stopBits: "1", parity: "none", flowControl: "none" }); HintWindow("Connected", 3000); console.log("Connected"); ReadUntilClosed(); } catch (error) { if (String(error).indexOf("The port is already open") != -1) HintWindow("Port has opened", 3000); else HintWindow("Open port fail", 3000); console.log(error); } } async function ReadUntilClosed() { while (serialPort.readable) { const serialReader = serialPort.readable.getReader(); try { while (true) { const { value, done } = await serialReader.read(); if (done) { // serialReader.releaseLock(); break; } if (value) { // console.log(value); for (let i in value) UserDataProcess(value[i]); } } } catch (error) { } finally { serialReader.releaseLock(); } } await serialPort.close(); } async function SerialSend(uint8Array) { // console.log("#SerialSend", uint8Array); console.log("#SerialSend", arrayBuffer2Hex(uint8Array)); if (serialPort) { const writer = serialPort.writable.getWriter(); await writer.write(uint8Array); writer.releaseLock(); } } function arrayBuffer2Hex(buffer) { const hexArr = Array.prototype.map.call( new Uint8Array(buffer), function (bit) { return "0x" + (('00' + bit.toString(16).toUpperCase()).slice(-2)) } ) return hexArr.join(', ') }