diff --git a/kernel/include/kernel/Keyboard.h b/kernel/include/kernel/Keyboard.h index 729f58744..9c5f6f53a 100644 --- a/kernel/include/kernel/Keyboard.h +++ b/kernel/include/kernel/Keyboard.h @@ -37,9 +37,11 @@ namespace Keyboard bool pressed; }; - bool initialize(void (*callback)(KeyEvent)); + bool initialize(); void update_keyboard(); + void register_key_event_callback(void(*callback)(KeyEvent)); + char key_event_to_ascii(KeyEvent); void led_disco(); diff --git a/kernel/kernel/Keyboard.cpp b/kernel/kernel/Keyboard.cpp index d38858ce8..189c3bbc0 100644 --- a/kernel/kernel/Keyboard.cpp +++ b/kernel/kernel/Keyboard.cpp @@ -83,7 +83,7 @@ namespace Keyboard static uint8_t s_led_states = 0b000; static uint8_t s_modifiers = 0x00; - static void (*s_key_callback)(KeyEvent) = nullptr; + static void (*s_key_event_callback)(KeyEvent) = nullptr; static char s_key_to_char[] { @@ -185,7 +185,8 @@ namespace Keyboard while (!s_key_event_queue.Empty()) { - s_key_callback(s_key_event_queue.Front()); + if (s_key_event_callback) + s_key_event_callback(s_key_event_queue.Front()); s_key_event_queue.Pop(); } } @@ -354,7 +355,7 @@ namespace Keyboard } } - bool initialize(void (*callback)(KeyEvent)) + bool initialize() { // https://wiki.osdev.org/%228042%22_PS/2_Controller @@ -424,13 +425,17 @@ namespace Keyboard })); // Register callback and IRQ - s_key_callback = callback; IDT::register_irq_handler(KEYBOARD_IRQ, keyboard_irq_handler); PIC::unmask(KEYBOARD_IRQ); return true; } + void register_key_event_callback(void(*callback)(KeyEvent)) + { + s_key_event_callback = callback; + } + char key_event_to_ascii(KeyEvent event) { char res = s_key_to_char[static_cast(event.key)];