43 lines
1.4 KiB
JavaScript
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);
|