web: move packet formation out of serial.js

This commit is contained in:
Fischer Moseley 2024-04-14 20:03:06 -07:00
parent 7fb9d8bebc
commit e2752e30d5
4 changed files with 32 additions and 56 deletions

View File

@ -1,65 +1,34 @@
// serial.js
let port; let port;
async function connect() { async function getPort() {
if (port) return port;
try { try {
port = await navigator.serial.requestPort(); [port] = await navigator.serial.getPorts();
await port.open({ baudRate: 115200 }); await port.open({ baudRate: 115200 });
console.log('Connected to serial device:', port); console.log('Connected to serial device:', port);
return port;
} catch (error) { } catch (error) {
console.error('Error connecting to serial device:', error); console.error('Error connecting to serial device:', error);
} }
} }
async function write(addr, data) { async function write(data) {
try { const port = await getPort();
if (!port) { const writer = port.writable.getWriter();
console.error('Serial port not connected'); await writer.write(new TextEncoder().encode(data));
return; await writer.releaseLock();
} console.log('Sent:', data);
// Format the data to be sent
const sendData = `W${addr.toString(16).padStart(4, '0')}${data.toString(16).padStart(4, '0')}\r\n`;
// Example: Sending data to the device
const writer = port.writable.getWriter();
await writer.write(new TextEncoder().encode(sendData));
await writer.releaseLock();
console.log('Sent:', sendData);
} catch (error) {
console.error('Error sending data:', error);
}
} }
async function read(addr) { async function read() {
try { const port = await getPort();
if (!port) { const reader = port.readable.getReader();
console.error('Serial port not connected'); const {value, done} = await reader.read();
return; reader.releaseLock();
}
// Format the read command if (!done) {
const readCmd = `R${addr.toString(16).padStart(4, '0')}\r\n`; const data = new TextDecoder().decode(value);
console.log('Received:', data);
// Send the read command to the device return data;
const writer = port.writable.getWriter();
await writer.write(new TextEncoder().encode(readCmd));
await writer.releaseLock();
console.log('Sent:', readCmd);
// Read back the response
const reader = port.readable.getReader(); // Create a new reader
const { value, done } = await reader.read(); // Read from the stream
reader.releaseLock(); // Release the reader's lock
if (!done) {
const responseData = new TextDecoder().decode(value);
console.log('Received:', responseData);
return responseData;
}
} catch (error) {
console.error('Error reading data:', error);
} }
} }
document.getElementById('connectButton').addEventListener('click', connect);

View File

@ -18,7 +18,7 @@ function runAfterUpload() {
} }
// Your additional JavaScript code to run after file upload // Your additional JavaScript code to run after file upload
web_terminal(data); WebTerminal(data);
} }
runAfterUpload(); // Start checking for file upload completion runAfterUpload(); // Start checking for file upload completion

View File

@ -1,4 +1,10 @@
async function web_terminal(data){ document.getElementById('connectButton').addEventListener('click', selectPort);
async function selectPort(){
await navigator.serial.requestPort();
}
async function WebTerminal(data){
let pyodide = await loadPyodide(); let pyodide = await loadPyodide();
// Load Manta.yaml into pyodide's file system // Load Manta.yaml into pyodide's file system
@ -45,8 +51,9 @@ async function web_terminal(data){
async def barfoo(): async def barfoo():
print("entering barfoo") print("entering barfoo")
print(await read(m.my_io_core._base_addr)) await write("R0000\\r\\n")
print(await read(m.my_io_core._base_addr + 1)) print(await read())
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
loop.run_until_complete(barfoo()) loop.run_until_complete(barfoo())
@ -54,4 +61,4 @@ async function web_terminal(data){
#await foobar() # doesn't work either! await outside function #await foobar() # doesn't work either! await outside function
#await barfoo() # doesn't work either! await outside function #await barfoo() # doesn't work either! await outside function
`); `);
} }

View File

@ -10,7 +10,7 @@
<!-- Load Javascript --> <!-- Load Javascript -->
<script src="../javascripts/web_terminal.js"></script> <script src="../javascripts/webTerminal.js"></script>
<script src="../javascripts/serial.js"></script> <script src="../javascripts/serial.js"></script>
<script src="../javascripts/upload.js"></script> <script src="../javascripts/upload.js"></script>
<script src="https://cdn.jsdelivr.net/pyodide/v0.25.1/full/pyodide.js"></script> <script src="https://cdn.jsdelivr.net/pyodide/v0.25.1/full/pyodide.js"></script>