Working transmit, but it's rough

drew/transmit
Drew Bednar 8 months ago
parent d252cbf63a
commit b222876f6f

@ -0,0 +1,14 @@
import time
from machine import UART
# Initialize UART1 (or any other UART you want to use). These pins are for UART1 on ESP-32 S3 Devkit
uart1 = UART(1, baudrate=115200, tx=17, rx=18)
counter = 0
while True:
if uart1.any():
print(uart1.read())
print("I'm still here. Count {}".format(counter))
counter += 1
time.sleep(1)

1165
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -8,13 +8,16 @@ const connectButton = document.getElementById('connect-button')
const refreshPorts = document.getElementById('refresh-ports'); const refreshPorts = document.getElementById('refresh-ports');
const scrollableElement = document.getElementById('scrollable-element'); const scrollableElement = document.getElementById('scrollable-element');
const select = document.getElementById('serial-select'); const select = document.getElementById('serial-select');
const transmitInput = document.querySelector('div[contenteditable="true"]'); const transmitInput = document.querySelector('div[contenteditable="true"]');
const transmitButton = document.getElementById('transmit-button'); const transmitButton = document.getElementById('transmit-button');
const uPyKeyboardInterrupt = new Uint8Array([13, 3, 3])
let isPortConnected = false; let isPortConnected = false;
let controller; let controller;
let autoscroll = true; let autoscroll = true;
let serialPorts = []; let serialPorts = [];
let encoder;
let reader; let reader;
let writer; let writer;
@ -45,6 +48,7 @@ connectButton.addEventListener('click', async () => {
await connectToSerialPort(selectedPort, baudRate); await connectToSerialPort(selectedPort, baudRate);
} else { } else {
isPortConnected = false; isPortConnected = false;
onPortDisconnect();
} }
}); });
@ -54,15 +58,34 @@ refreshPorts.addEventListener('click', async () => {
updateSerialSelect(ports) updateSerialSelect(ports)
}); });
transmitButton.addEventListener('click', async (event) => {
transmitContents(transmitInput.innerText)
transmitInput.innerHTML = ''
});
transmitInput.addEventListener('keydown', (event) => {
if (event.key === 'c' && event.ctrlKey) {
event.preventDefault();
writer.write(uPyKeyboardInterrupt);
}
})
transmitInput.addEventListener('keyup', (event) => { transmitInput.addEventListener('keyup', (event) => {
if (event.key === 'Enter' && !event.shiftKey) { if (event.key === 'Enter' && !event.shiftKey) {
console.log("Transmitted input"); transmitContents(transmitInput.innerText);
console.log(event)
transmitInput.innerHTML = '' transmitInput.innerHTML = ''
} }
}); });
// Functions // Functions
function transmitContents(input) {
encoded_string = encoder.encode(input + '\r')
console.log("Binary Contents: ", encoded_string)
writer.write(encoded_string)
}
function onPortConnect() { function onPortConnect() {
connectButton.classList.remove('bg-emerald-500', 'hover:bg-emerald-600', 'focus:ring-emerald-500'); connectButton.classList.remove('bg-emerald-500', 'hover:bg-emerald-600', 'focus:ring-emerald-500');
connectButton.classList.add('bg-red-500', 'hover:bg-red-600', 'focus:ring-red-500'); connectButton.classList.add('bg-red-500', 'hover:bg-red-600', 'focus:ring-red-500');
@ -119,16 +142,24 @@ async function connectToSerialPort(port, baud) {
let buffer = '' let buffer = ''
// The TextDecoderStream interface of the Encoding API converts a stream of text in a binary encoding, // The TextDecoderStream interface of the Encoding API converts a stream of text in a binary encoding,
// such as UTF-8 etc., to a stream of strings // such as UTF-8 etc., to a stream of strings
// const textEncoder = new TextEncoderStream();
// const writableStreamClosed = textEncoder.readable.pipeTo(port.writable);
// writer = textEncoder.writable.getWriter();
encoder = new TextEncoder()
writer = port.writable.getWriter();
const textDecoder = new TextDecoderStream(); const textDecoder = new TextDecoderStream();
const readableStreamClosed = port.readable.pipeTo(textDecoder.writable); const readableStreamClosed = port.readable.pipeTo(textDecoder.writable);
reader = textDecoder.readable.getReader(); reader = textDecoder.readable.getReader();
controller = new AbortController(); controller = new AbortController();
const signal = controller.signal; const signal = controller.signal;
try { try {
isPortConnected = true; isPortConnected = true;
while (isPortConnected) { while (isPortConnected) {
const { value, done } = await reader.read({ signal }); const { value, done } = await reader.read({ signal });
if (done) { if (done || !port.readable) {
break; break;
} }
@ -145,11 +176,20 @@ async function connectToSerialPort(port, baud) {
} catch (error) { } catch (error) {
console.error('Error reading data from serial port:', error); console.error('Error reading data from serial port:', error);
} finally { } finally {
// Port cleanup
controller.abort(); controller.abort();
writer.releaseLock();
reader.releaseLock(); reader.releaseLock();
// try {
// writer.close();
// await writableStreamClosed;
// } catch (error) {
// console.error("Error encountered in writeableSteamClosed:", error)
// }
try { try {
await textDecoder.readable.cancel(); reader.cancel();
} catch (error) { } catch (error) {
console.error("Error encountered in readableStreamClosed:", error); console.error("Error encountered in readableStreamClosed:", error);
} }
@ -159,6 +199,11 @@ async function connectToSerialPort(port, baud) {
} catch (error) { } catch (error) {
} }
try {
await readableStreamClosed;
} catch (error) {
}
try { try {
await port.close(); await port.close();
} catch (error) { } catch (error) {