]> git.dujemihanovic.xyz Git - nameless-os.git/blobdiff - kernel/arch/x86/irq/sample_handler.c
Add PS/2 driver
[nameless-os.git] / kernel / arch / x86 / irq / sample_handler.c
index f4f4a4bfefad5aacf742f3c6ce2046c86eb1b85e..72a86c61bb0da2dc7fc88d814db36563374b6fde 100644 (file)
@@ -2,6 +2,10 @@
 #include <irq/i8259a.h>
 #include <io.h>
 #include <stdint.h>
+#include <input/ps2.h>
+
+int was_released = 0;
+int is_caps = 0;
 
 typedef uint32_t uword_t;
 
@@ -17,8 +21,30 @@ __attribute__((interrupt))
 void keyb_handler(struct interrupt_frame *frame)
 {
        pic_send_eoi(1);
-       kprint("Got a keyboard interrupt!\n", 0);
-       inb(0x60);
+       uint8_t scancode = inb(PS2_DATA_PORT);
+       if (was_released) {
+               was_released = 0;
+               return;
+       }
+
+       if (scancode == 0xf0) {
+               was_released = 1;
+               uint8_t scancode = inb(PS2_DATA_PORT);
+               if (scancode == 0x12) {
+                       is_caps = 0;
+               }
+               return;
+       } else {
+               if (scancode == 0x12) {
+                       is_caps = 1;
+                       return;
+               }
+               if (!is_caps) {
+                       kprintc(scancodes[scancode], 0);
+               } else {
+                       kprintc(scancodes[scancode] - ('a'-'A'), 0);
+               }
+       }
 }