Jumperless/JumperlessNano/Adafruit_TinyUSB_Arduino/docs/examples/webusb-serial/application.js
2024-03-14 11:36:30 -07:00

97 lines
2.7 KiB
JavaScript
Executable File

(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)));
});
});
})();