diff --git a/webrepl.html b/webrepl.html
index 297d97e..ae541d6 100644
--- a/webrepl.html
+++ b/webrepl.html
@@ -47,7 +47,9 @@
@@ -134,8 +136,10 @@
function button_click() {
if (connected) {
+ document.getElementById('SerialConnectButton').disabled = false;
ws.close();
} else {
+ document.getElementById('SerialConnectButton').disabled = true;
document.getElementById('url').disabled = true;
document.getElementById('button').value = "Disconnect";
connected = true;
@@ -145,7 +149,7 @@
function prepare_for_connect() {
document.getElementById('url').disabled = false;
- document.getElementById('button').value = "Connect";
+ document.getElementById('button').value = "Connect (WebSocket)";
}
function update_file_status(s) {
@@ -162,7 +166,9 @@
// Pasted data from clipboard will likely contain
// LF as EOL chars.
data = data.replace(/\n/g, "\r");
+
ws.send(data);
+
});
term.on('title', function(title) {
@@ -249,6 +255,7 @@
}
}
term.write(event.data);
+
};
};
@@ -363,6 +370,94 @@
document.getElementById('put-file-select').addEventListener('change', handle_put_file_select, false);
document.getElementById('put-file-button').disabled = true;
+
+/*
+ * Web Serial API (Google Chrome)
+ *
+ * Useful information used to this implementation:
+ * https://github.com/svendahlstrand/web-serial-api/
+ * https://dev.to/unjavascripter/the-amazing-powers-of-the-web-web-serial-api-3ilc
+ *
+ */
+
+const connectButton = document.getElementById ('SerialConnectButton');
+let port;
+
+if ('serial' in navigator) {
+ connectButton.addEventListener('click', function () {
+ if (port) {
+ term.write('\x1b[31mDisconnected from Serial Port\x1b[m\r\n');
+ port.close();
+ port = undefined;
+ connectButton.innerText = 'Connect (Web USB Serial)';
+
+ document.getElementById('url').disabled = false;
+ document.getElementById('button').disabled = false;
+
+ }
+ else {
+ connectButton.innerText = 'Disconnect';
+ getReader();
+ }
+ });
+
+ connectButton.disabled = false;
+}
+else {
+ const error = document.createElement('p');
+ error.innerHTML = '
Support for Serial Web API not enabled. Please enable it using chrome://flags/ and enable "Experimental Web Platform fetures
';
+
+}
+
+
+let lineBuffer = '';
+let latestValue = 0;
+
+async function serialWrite(data) {
+ encoder = new TextEncoder();
+ const dataArrayBuffer = encoder.encode(data);
+
+ if (port && port.writable) {
+ const writer = port.writable.getWriter();
+ writer.write(dataArrayBuffer);
+ writer.releaseLock();
+ }
+}
+
+async function getReader() {
+ port = await navigator.serial.requestPort({});
+ await port.open({ baudrate: 115200 });
+
+ document.getElementById('url').disabled = true;
+ document.getElementById('button').disabled = true;
+
+ connectButton.innerText = 'Disconnect';
+ term.write('\x1b[31mConnected using Web Serial API !\x1b[m\r\n');
+
+ const appendStream = new WritableStream({
+ write(chunk) {
+ term.write(chunk);
+ }
+ });
+
+ port.readable
+ .pipeThrough(new TextDecoderStream())
+ .pipeTo(appendStream);
+
+
+ term.on('data', function(data) {
+ // Pasted data from clipboard will likely contain
+ // LF as EOL chars.
+ //data = data.replace(/\n/g, "\r");
+
+ //WebSocket
+ //ws.send(data);
+ serialWrite(data);
+
+ });
+
+ }