]> git.corax.cc Git - corax/commitdiff
Deliver keyboard interrupts to keyboard driver
authorMatthias Kruk <m@m10k.eu>
Sat, 18 Jan 2020 08:30:42 +0000 (17:30 +0900)
committerMatthias Kruk <m@m10k.eu>
Sat, 18 Jan 2020 08:30:42 +0000 (17:30 +0900)
kernel/kbd/main.c

index 408dedd53ea9b791eb2d50df7385a65986866aa4..abbb926480920f067e5f68e86b01456946ee083a 100644 (file)
@@ -1,7 +1,57 @@
+#include <crxstd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <string.h>
+#include <errno.h>
+#include <arch.h>
+
+void _kbd_int_handler(int);
+
+int _int_register(void)
+{
+       struct sigaction sa;
+       int ret_val;
+
+       memset(&sa, 0, sizeof(sa));
+
+       sa.sa_handler = _kbd_int_handler;
+       sigemptyset(&(sa.sa_mask));
+       sigaddset(&(sa.sa_mask), INT_KEYBOARD);
+
+       if(sigaction(SIGHWINT, &sa, NULL) < 0) {
+               ret_val = -errno;
+       } else {
+               ret_val = 0;
+       }
+
+       return(ret_val);
+}
+
+void _kbd_int_handler(int signal)
+{
+
+}
+
 int kbd_main(int argc, char *argv[])
 {
-       /* FIXME: Handle interrupts, IPC messages */
-       for(;;);
+       struct cxmsg msg;
+       int err;
+
+       err = _int_register();
+
+       if(!err) {
+               printf("Keyboard interrupt handler registered\n");
+
+               while(1) {
+                       err = cxrecv(PID_ANY, &msg);
+
+                       if(err > 0) {
+                               /* FIXME: Handle received message */
+                       }
+               }
+       } else {
+               printf("Could not register keyboard interrupt handler\n");
+       }
 
        return(0);
 }