manta/doc/javascripts/webTerminal.js

54 lines
1.5 KiB
JavaScript

document.getElementById('connectButton').addEventListener('click', selectPort);
document.getElementById('runButton').addEventListener('click', webTerminal);
async function selectPort(){
await navigator.serial.requestPort();
}
// Start Web Worker for Serial API
globalThis.receiveBuffer = [];
const serialWorker = new Worker("../javascripts/serial.js");
function sendToSerialWorker(data){
console.log("Main -> Worker: ", data);
serialWorker.postMessage(data);
}
serialWorker.onmessage = (e) => {
console.log("Worker -> Main: ", e.data);
receiveBuffer.push(e.data);
};
// Main function for the Web Terminal
async function webTerminal(){
let pyodide = await loadPyodide();
// Load Manta.yaml into pyodide's file system
// pyodide.FS.writeFile("/manta.yaml", data, { encoding: "utf8" });
// Load micropip, setuptools, manta
await pyodide.loadPackage("micropip");
await pyodide.loadPackage("setuptools");
const micropip = pyodide.pyimport("micropip");
await micropip.install('../assets/manta-1.0.0-py3-none-any.whl');
pyodide.runPythonAsync(`
import asyncio
from js import sendToSerialWorker
from js import receiveBuffer
from manta import Manta
#m = Manta("/manta.yaml")
print("Sending read request")
sendToSerialWorker("R0000\\r\\n")
for _ in range(10):
print(len(receiveBuffer))
print(receiveBuffer)
await asyncio.sleep(0.1)
print("Python Complete")
`);
}