Files
xteink-web-emulator/scripts/smoke-browser-bridge.mjs
T

43 lines
1.4 KiB
JavaScript

import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import { pathToFileURL } from 'node:url';
const artifactRoot = process.argv[2];
if (!artifactRoot) {
throw new Error('usage: node scripts/smoke-browser-bridge.mjs <artifact-directory>');
}
const moduleUrl = pathToFileURL(`${artifactRoot}/qemu-system-riscv32.js`);
const rom = new Uint8Array(await readFile(`${artifactRoot}/esp32c3-rom.bin`));
const { default: createQemu } = await import(moduleUrl);
const options = {
arguments: [
'-S', '-machine', 'xteink,variant=x3', '-L', '/bios',
'-display', 'none', '-serial', 'null', '-nic', 'none',
'-drive', 'file=/flash.bin,if=mtd,format=raw',
],
mainScriptUrlOrBlob: moduleUrl.href,
};
options.preRun = [() => {
options.FS.mkdir('/bios');
options.FS.writeFile('/bios/esp32c3-rom.bin', rom);
options.FS.writeFile('/flash.bin', new Uint8Array(16 * 1024 * 1024));
}];
const module = await createQemu(options);
const deadline = Date.now() + 15000;
const timer = setInterval(() => {
if (module._xteink_wasm_width() === 528) {
clearInterval(timer);
assert.equal(module._xteink_wasm_height(), 792);
assert.ok(module._xteink_wasm_framebuffer());
module._xteink_wasm_set_adc(1, 2694);
module._xteink_wasm_set_gpio(3, 0);
process.exit(0);
}
if (Date.now() > deadline) {
clearInterval(timer);
process.exit(1);
}
}, 50);