mirror of
https://github.com/Architeuthis-Flux/Jumperless.git
synced 2024-11-30 18:24:36 +01:00
97 lines
2.7 KiB
JavaScript
Executable File
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)));
|
|
});
|
|
});
|
|
})();
|