X-Git-Url: http://git.dujemihanovic.xyz/%7B%7B?a=blobdiff_plain;f=kernel%2Farch%2Fx86%2Firq%2Fsample_handler.c;h=72a86c61bb0da2dc7fc88d814db36563374b6fde;hb=cbb0204cd5f26375290d72bd4027e42832786f22;hp=f4f4a4bfefad5aacf742f3c6ce2046c86eb1b85e;hpb=628db992cdf71f22597a2dcc86bcf456ff7c8db8;p=nameless-os.git diff --git a/kernel/arch/x86/irq/sample_handler.c b/kernel/arch/x86/irq/sample_handler.c index f4f4a4b..72a86c6 100644 --- a/kernel/arch/x86/irq/sample_handler.c +++ b/kernel/arch/x86/irq/sample_handler.c @@ -2,6 +2,10 @@ #include #include #include +#include + +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); + } + } }