summaryrefslogtreecommitdiff
path: root/src/user
diff options
context:
space:
mode:
authordzwdz2022-08-07 22:07:27 +0200
committerdzwdz2022-08-07 22:07:27 +0200
commit9a43ead118ec1506848bad9d2bcddfb0fd458552 (patch)
tree295103e04a01e0eaa319d0984c9a74bb50956c4c /src/user
parentfbbe8a1cb4c421e9658c5009ecfab6845137587b (diff)
kernel: ps2 mouse support
Diffstat (limited to 'src/user')
-rw-r--r--src/user/app/mousedump/mousedump.c32
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;
+}