(function() { 'use strict'; document.addEventListener('DOMContentLoaded', event => { let connectButton = document.querySelector("#connect"); let statusDisplay = document.querySelector('#status'); let port; function addLine(linesId, text) { var senderLine = document.createElement("div"); senderLine.className = 'line'; var textnode = document.createTextNode(text); senderLine.appendChild(textnode); document.getElementById(linesId).appendChild(senderLine); return senderLine; } let currentReceiverLine; function appendLines(linesId, text) { const lines = text.split('\r'); if (currentReceiverLine) { currentReceiverLine.innerHTML = currentReceiverLine.innerHTML + lines[0]; for (let i = 1; i < lines.length; i++) { currentReceiverLine = addLine(linesId, lines[i]); } } else { for (let i = 0; i < lines.length; i++) { currentReceiverLine = addLine(linesId, lines[i]); } } } function connect() { port.connect().then(() => { statusDisplay.textContent = ''; connectButton.textContent = 'Disconnect'; port.onReceive = data => { let textDecoder = new TextDecoder(); console.log(textDecoder.decode(data)); if (data.getInt8() === 13) { currentReceiverLine = null; } else { appendLines('receiver_lines', textDecoder.decode(data)); } }; port.onReceiveError = error => { console.error(error); }; }, error => { statusDisplay.textContent = error; }); } connectButton.addEventListener('click', function() { if (port) { port.disconnect(); connectButton.textContent = 'Connect'; statusDisplay.textContent = ''; port = null; } else { serial.requestPort().then(selectedPort => { port = selectedPort; connect(); }).catch(error => { statusDisplay.textContent = error; }); } }); serial.getPorts().then(ports => { if (ports.length === 0) { statusDisplay.textContent = 'No device found.'; } else { statusDisplay.textContent = 'Connecting...'; port = ports[0]; connect(); } }); let commandLine = document.getElementById("command_line"); commandLine.addEventListener("keypress", function(event) { if (event.keyCode === 13) { if (commandLine.value.length > 0) { addLine('sender_lines', commandLine.value); commandLine.value = ''; } } port.send(new TextEncoder('utf-8').encode(String.fromCharCode(event.which || event.keyCode))); }); }); })();