virtual-machine 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.d.ts CHANGED
@@ -14,6 +14,18 @@ declare enum NetworkStatus {
14
14
  declare class WasmVm {
15
15
  free(): void;
16
16
  [Symbol.dispose](): void;
17
+ /**
18
+ * Enable VirtIO GPU device for graphics rendering.
19
+ *
20
+ * The GPU device allows the kernel to render to a framebuffer which can
21
+ * then be displayed in a Canvas element. Use `get_gpu_frame()` to retrieve
22
+ * the rendered frame pixels.
23
+ *
24
+ * # Arguments
25
+ * * `width` - Display width in pixels (default 800 if 0)
26
+ * * `height` - Display height in pixels (default 600 if 0)
27
+ */
28
+ enable_gpu(width: number, height: number): void;
17
29
  /**
18
30
  * Get a byte from the UART output buffer, if available.
19
31
  *
@@ -21,6 +33,18 @@ declare class WasmVm {
21
33
  * and the local UART buffer (for hart 0 output).
22
34
  */
23
35
  get_output(): number | undefined;
36
+ /**
37
+ * Enable VirtIO Input device for keyboard input.
38
+ *
39
+ * After calling this, use `send_key_event()` to forward keyboard events
40
+ * from JavaScript to the guest kernel.
41
+ */
42
+ enable_input(): void;
43
+ /**
44
+ * Get GPU display dimensions.
45
+ * Returns [width, height] or null if GPU is not enabled.
46
+ */
47
+ get_gpu_size(): Uint32Array | undefined;
24
48
  /**
25
49
  * Print the VM banner to UART output (visible in browser).
26
50
  * Call this after creating the VM to show a boot banner.
@@ -34,10 +58,27 @@ declare class WasmVm {
34
58
  * Get CPU count (from kernel-reported value).
35
59
  */
36
60
  get_cpu_count(): number;
61
+ /**
62
+ * Get GPU frame data as RGBA pixels.
63
+ * Returns a Uint8Array of pixel data, or null if no frame is available.
64
+ *
65
+ * The frame data is in RGBA format with 4 bytes per pixel (800x600 = 1,920,000 bytes).
66
+ *
67
+ * This reads from a fixed framebuffer address in guest memory (0x8100_0000).
68
+ * The kernel GPU driver writes pixels there, and we read them here.
69
+ */
70
+ get_gpu_frame(): Uint8Array | undefined;
37
71
  /**
38
72
  * Get system uptime in milliseconds (from kernel-reported value).
39
73
  */
40
74
  get_uptime_ms(): bigint;
75
+ /**
76
+ * Check if there's a GPU frame ready for rendering.
77
+ *
78
+ * With direct memory framebuffer, this always returns true when GPU is enabled.
79
+ * The framebuffer at FRAMEBUFFER_ADDR always contains the current frame.
80
+ */
81
+ has_gpu_frame(): boolean;
41
82
  /**
42
83
  * Start worker threads for secondary harts (1..num_harts).
43
84
  *
@@ -71,10 +112,32 @@ declare class WasmVm {
71
112
  * * `num_harts` - Number of harts (0 = auto-detect)
72
113
  */
73
114
  static new_with_harts(kernel: Uint8Array, num_harts: number): WasmVm;
115
+ /**
116
+ * Send a keyboard event to the guest.
117
+ *
118
+ * # Arguments
119
+ * * `key_code` - JavaScript keyCode (e.g., 65 for 'A')
120
+ * * `pressed` - true for keydown, false for keyup
121
+ *
122
+ * Returns true if the event was sent successfully.
123
+ */
124
+ send_key_event(key_code: number, pressed: boolean): boolean;
74
125
  /**
75
126
  * Get current memory usage (DRAM size) in bytes.
76
127
  */
77
128
  get_memory_usage(): bigint;
129
+ /**
130
+ * Send a mouse event to the guest.
131
+ *
132
+ * # Arguments
133
+ * * `x` - X position (0-799)
134
+ * * `y` - Y position (0-599)
135
+ * * `buttons` - Button state bitmask (bit 0 = left, bit 1 = right, bit 2 = middle)
136
+ * * `prev_buttons` - Previous button state to detect changes
137
+ *
138
+ * Returns true if the event was sent successfully.
139
+ */
140
+ send_mouse_event(x: number, y: number, buttons: number): boolean;
78
141
  /**
79
142
  * Get the total disk capacity from attached VirtIO block devices.
80
143
  * Returns total bytes across all block devices.
@@ -85,6 +148,14 @@ declare class WasmVm {
85
148
  * Returns None if not in SMP mode.
86
149
  */
87
150
  get_shared_buffer(): SharedArrayBuffer | undefined;
151
+ /**
152
+ * Send a mouse button event to the guest.
153
+ *
154
+ * # Arguments
155
+ * * `button` - Button number (0 = left, 1 = right, 2 = middle)
156
+ * * `pressed` - true for press, false for release
157
+ */
158
+ send_mouse_button(button: number, pressed: boolean): boolean;
88
159
  /**
89
160
  * Terminate all workers.
90
161
  */
@@ -289,6 +360,8 @@ interface InitOutput {
289
360
  readonly wasmvm_allow_workers_to_start: (a: number) => void;
290
361
  readonly wasmvm_connect_webtransport: (a: number, b: number, c: number, d: number, e: number) => [number, number];
291
362
  readonly wasmvm_disconnect_network: (a: number) => void;
363
+ readonly wasmvm_enable_gpu: (a: number, b: number, c: number) => void;
364
+ readonly wasmvm_enable_input: (a: number) => void;
292
365
  readonly wasmvm_entry_pc: (a: number) => bigint;
293
366
  readonly wasmvm_external_network_rx_pending: (a: number) => number;
294
367
  readonly wasmvm_external_network_tx_pending: (a: number) => number;
@@ -297,12 +370,15 @@ interface InitOutput {
297
370
  readonly wasmvm_get_cpu_count: (a: number) => number;
298
371
  readonly wasmvm_get_disk_capacity: (a: number) => bigint;
299
372
  readonly wasmvm_get_disk_usage: (a: number) => any;
373
+ readonly wasmvm_get_gpu_frame: (a: number) => any;
374
+ readonly wasmvm_get_gpu_size: (a: number) => any;
300
375
  readonly wasmvm_get_heap_usage: (a: number) => any;
301
376
  readonly wasmvm_get_memory_usage: (a: number) => bigint;
302
377
  readonly wasmvm_get_output: (a: number) => number;
303
378
  readonly wasmvm_get_shared_buffer: (a: number) => any;
304
379
  readonly wasmvm_get_uptime_ms: (a: number) => bigint;
305
380
  readonly wasmvm_halt_code: (a: number) => bigint;
381
+ readonly wasmvm_has_gpu_frame: (a: number) => number;
306
382
  readonly wasmvm_inject_network_packet: (a: number, b: any) => number;
307
383
  readonly wasmvm_input: (a: number, b: number) => void;
308
384
  readonly wasmvm_is_external_network_connected: (a: number) => number;
@@ -315,6 +391,9 @@ interface InitOutput {
315
391
  readonly wasmvm_num_harts: (a: number) => number;
316
392
  readonly wasmvm_print_banner: (a: number) => void;
317
393
  readonly wasmvm_print_status: (a: number, b: number, c: number) => void;
394
+ readonly wasmvm_send_key_event: (a: number, b: number, c: number) => number;
395
+ readonly wasmvm_send_mouse_button: (a: number, b: number, c: number) => number;
396
+ readonly wasmvm_send_mouse_event: (a: number, b: number, c: number, d: number) => number;
318
397
  readonly wasmvm_set_external_network_ip: (a: number, b: any) => number;
319
398
  readonly wasmvm_setup_external_network: (a: number, b: any) => [number, number];
320
399
  readonly wasmvm_start_workers: (a: number, b: number, c: number) => [number, number];
@@ -328,12 +407,12 @@ interface InitOutput {
328
407
  readonly workerstate_new: (a: number, b: any, c: bigint) => number;
329
408
  readonly workerstate_step_batch: (a: number, b: number) => number;
330
409
  readonly workerstate_step_count: (a: number) => bigint;
331
- readonly wasm_bindgen__convert__closures_____invoke__h68f644bdb48dd813: (a: number, b: number, c: any) => void;
332
- readonly wasm_bindgen__closure__destroy__h534978b8728125b3: (a: number, b: number) => void;
333
- readonly wasm_bindgen__convert__closures_____invoke__h5c64d96786ac00c5: (a: number, b: number) => void;
334
- readonly wasm_bindgen__convert__closures_____invoke__h39d3e89751b07765: (a: number, b: number, c: any) => void;
335
- readonly wasm_bindgen__closure__destroy__hf225e18fc5ab9bc1: (a: number, b: number) => void;
336
- readonly wasm_bindgen__convert__closures_____invoke__h2a4d868e42b21102: (a: number, b: number) => void;
410
+ readonly wasm_bindgen__convert__closures_____invoke__he00a4f55faf9050f: (a: number, b: number) => void;
411
+ readonly wasm_bindgen__closure__destroy__h2f2b52f94c430d4b: (a: number, b: number) => void;
412
+ readonly wasm_bindgen__convert__closures_____invoke__h260170fb96639bcf: (a: number, b: number, c: any) => void;
413
+ readonly wasm_bindgen__closure__destroy__h612f8e24953b61d5: (a: number, b: number) => void;
414
+ readonly wasm_bindgen__convert__closures_____invoke__hd159192dfee36a06: (a: number, b: number) => void;
415
+ readonly wasm_bindgen__convert__closures_____invoke__hedae94b906f728f2: (a: number, b: number, c: any) => void;
337
416
  readonly __wbindgen_malloc: (a: number, b: number) => number;
338
417
  readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
339
418
  readonly __wbindgen_exn_store: (a: number) => void;