99 lines
2.1 KiB
C
99 lines
2.1 KiB
C
#include "devices.h"
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
|
|
i32 console_open(void *data, u32 mode) {
|
|
USED(mode);
|
|
USED(data);
|
|
/* Nothing to open — stdin/stdout are always available */
|
|
return 0; /* Success */
|
|
}
|
|
|
|
i32 console_read(void *data, u8 *buffer, u32 size) {
|
|
USED(data);
|
|
ssize_t result = read(STDIN_FILENO, buffer, size);
|
|
if (result < 0) return -1; /* Error */
|
|
return (i32)result; /* Bytes read */
|
|
}
|
|
|
|
i32 console_write(void *data, const u8 *buffer, u32 size) {
|
|
USED(data);
|
|
ssize_t result = write(STDOUT_FILENO, buffer, size);
|
|
if (result < 0) return -1; /* Error */
|
|
return (i32)result; /* Bytes written */
|
|
}
|
|
|
|
i32 console_close(void *data) {
|
|
USED(data);
|
|
/* Nothing to close — stdin/stdout are process-owned */
|
|
return 0;
|
|
}
|
|
|
|
i32 console_ioctl(void *data, u32 cmd, void *args) {
|
|
USED(data);
|
|
USED(cmd);
|
|
USED(args);
|
|
return -1; /* Unsupported */
|
|
}
|
|
|
|
i32 screen_open(void *data, u32 mode) {
|
|
USED(mode);
|
|
ScreenDeviceData *screen = (ScreenDeviceData *)data;
|
|
USED(screen);
|
|
|
|
return 0;
|
|
}
|
|
|
|
i32 screen_read(void *data, u8 *buffer, u32 size) {
|
|
USED(data);
|
|
USED(buffer);
|
|
USED(size);
|
|
return -1;
|
|
}
|
|
|
|
i32 screen_write(void *data, const u8 *buffer, u32 size) {
|
|
ScreenDeviceData *screen = (ScreenDeviceData *)data;
|
|
|
|
if (size > screen->framebuffer_size * sizeof(u8)) {
|
|
return -1;
|
|
}
|
|
|
|
memcpy(&screen->vm->memory[screen->framebuffer_pos], buffer, size);
|
|
return 0;
|
|
}
|
|
|
|
i32 screen_close(void *data) {
|
|
ScreenDeviceData *screen = (ScreenDeviceData *)data;
|
|
USED(screen);
|
|
|
|
return 0;
|
|
}
|
|
|
|
i32 keyboard_open(void *data, u32 mode) {
|
|
USED(data);
|
|
USED(mode);
|
|
return 0;
|
|
}
|
|
|
|
i32 keyboard_read(void *data, u8 *buffer, u32 size) {
|
|
KeyboardDeviceData *kbd = (KeyboardDeviceData *)data;
|
|
|
|
if (size < (u32)kbd->key_count)
|
|
return -1;
|
|
|
|
memcpy(buffer, kbd->keys, kbd->key_count);
|
|
return 0;
|
|
}
|
|
|
|
i32 keyboard_write(void *data, const u8 *buffer, u32 size) {
|
|
USED(data);
|
|
USED(buffer);
|
|
USED(size);
|
|
return -1; /* not writable */
|
|
}
|
|
|
|
i32 keyboard_close(void *data) {
|
|
USED(data);
|
|
return 0;
|
|
}
|