From bb3362812391c50a2408d1f0faea4219ded65c3d Mon Sep 17 00:00:00 2001 From: James Prevett Date: Tue, 5 Nov 2024 22:46:50 -0600 Subject: [PATCH] Cleaned up demo --- example/demo.ts | 59 +++++++++++++++++++++---------------------- example/tsconfig.json | 8 ++++++ src/framebuffer.ts | 2 +- tsconfig.json | 4 +-- 4 files changed, 40 insertions(+), 33 deletions(-) create mode 100644 example/tsconfig.json diff --git a/example/demo.ts b/example/demo.ts index 6112fcc..a8fd11e 100644 --- a/example/demo.ts +++ b/example/demo.ts @@ -1,39 +1,38 @@ -import { configure, InMemory, fs } from '@zenfs/core'; -import { IndexedDB } from '@zenfs/dom'; +import { configure, fs, type DeviceFS } from '@zenfs/core'; import { framebuffer, dsp } from '@zenfs/devices'; // this is optional, but I set them, so I have control -const canvas = document.getElementById('fb'); +const canvas = document.querySelector('#fb')!; const audioContext = new AudioContext(); // add initial devices like /dev/null, etc -configure({ addDevices: true }).then(() => { - // mount framebuffer & dsp - fs.mounts.get('/dev').createDevice('/fb0', framebuffer({ canvas })); - fs.mounts.get('/dev').createDevice('/dsp', dsp({ audioContext })); +await configure({ addDevices: true }); - // example: write static to framebuffer - const screen = new Uint8Array(canvas.width * canvas.height * 4); - function makestaticFb() { - for (let i = 0; i < screen.byteLength; i += 4) { - screen[i] = Math.random() * 255; - screen[i + 1] = Math.random() * 255; - screen[i + 2] = Math.random() * 255; - screen[i + 3] = 255; - } - fs.promises.writeFile('/dev/fb0', screen); - requestAnimationFrame(makestaticFb); +const devfs = fs.mounts.get('/dev') as DeviceFS; + +// mount framebuffer & dsp +devfs.createDevice('/fb0', framebuffer({ canvas })); +devfs.createDevice('/dsp', await dsp({ audioContext })); + +// example: write static to framebuffer +const screen = new Uint8Array(canvas.width * canvas.height * 4); +function makestaticFb() { + for (let i = 0; i < screen.byteLength; i += 4) { + screen[i] = Math.random() * 255; + screen[i + 1] = Math.random() * 255; + screen[i + 2] = Math.random() * 255; + screen[i + 3] = 255; } - makestaticFb(); + fs.promises.writeFile('/dev/fb0', screen); + requestAnimationFrame(makestaticFb); +} +makestaticFb(); - // example: write static to audio - const audioBuffer = new ArrayBuffer(audioContext.sampleRate * 4); - const audioBytes = new Uint8Array(audioBuffer); - const audioFloats = new Float32Array(audioBuffer); - setInterval(() => { - for (let i in audioFloats) { - audioFloats[i] = Math.random() * 2 - 1; - } - fs.promises.writeFile('/dev/dsp', audioBytes); - }, 1000); -}); +// example: write static to audio +const audioBuffer = new Float32Array(new ArrayBuffer(audioContext.sampleRate * 4)); +setInterval(() => { + for (let i in audioBuffer) { + audioBuffer[i] = Math.random() * 2 - 1; + } + fs.promises.writeFile('/dev/dsp', audioBuffer); +}, 1000); diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..08dddad --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true + }, + "include": ["*.ts", "demo.ts"], + "exclude": ["node_modules"] +} diff --git a/src/framebuffer.ts b/src/framebuffer.ts index b7a726a..53a527d 100644 --- a/src/framebuffer.ts +++ b/src/framebuffer.ts @@ -2,7 +2,7 @@ import { Errno, ErrnoError } from '@zenfs/core'; import type { DeviceDriver, DeviceFile } from '@zenfs/core'; interface FramebufferOptions { - canvas?: HTMLCanvasElement; + canvas?: HTMLCanvasElement | null; } let framebufferN = 0; diff --git a/tsconfig.json b/tsconfig.json index 59a4602..a488f9c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,11 +3,11 @@ "module": "NodeNext", "target": "ES2020", "outDir": "dist", + "rootDir": ".", "lib": ["ESNext", "ESNext.Disposable", "DOM"], "moduleResolution": "NodeNext", "declaration": true, - "strict": true, - "noEmit": false + "strict": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules"]