diff options
author | dzwdz | 2022-08-07 22:07:27 +0200 |
---|---|---|
committer | dzwdz | 2022-08-07 22:07:27 +0200 |
commit | 9a43ead118ec1506848bad9d2bcddfb0fd458552 (patch) | |
tree | 295103e04a01e0eaa319d0984c9a74bb50956c4c /src/user | |
parent | fbbe8a1cb4c421e9658c5009ecfab6845137587b (diff) |
kernel: ps2 mouse support
Diffstat (limited to 'src/user')
-rw-r--r-- | src/user/app/mousedump/mousedump.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/user/app/mousedump/mousedump.c b/src/user/app/mousedump/mousedump.c new file mode 100644 index 0000000..04331a3 --- /dev/null +++ b/src/user/app/mousedump/mousedump.c @@ -0,0 +1,32 @@ +#include <camellia/syscalls.h> +#include <unistd.h> +#include <shared/container/ring.h> +#include <stdio.h> + +static uint8_t r_buf[64]; +static ring_t r = {(void*)r_buf, sizeof r_buf, 0, 0}; + +struct packet { + uint8_t stuff; + int8_t dx, dy; +} __attribute__((packed)); + +int main(void) { + char buf[64]; + handle_t fd = _syscall_open("/kdev/ps2/mouse", 15, 0); + if (fd < 0) { + fprintf(stderr, "couldn't open mouse\n"); + exit(1); + } + for (;;) { + int len = _syscall_read(fd, buf, sizeof buf, 0); + if (len == 0) break; + ring_put(&r, buf, len); + while (ring_size(&r) >= 3) { + struct packet p; + ring_get(&r, &p, sizeof p); + printf("%4d %4d\n", p.dx, p.dy); + } + } + return 0; +} |