From 4dd6c85df2bff179032ed8bd175d470828469dae Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 11 Feb 2025 02:16:38 +0200 Subject: [PATCH] Kernel: Fix USB keyboard Scroll lock I was using 8 bit modifier and ScrollLock bit does not fit this. Also I was not generating ScrollLock keypresses --- kernel/include/kernel/USB/HID/Keyboard.h | 2 +- kernel/kernel/USB/HID/Keyboard.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/include/kernel/USB/HID/Keyboard.h b/kernel/include/kernel/USB/HID/Keyboard.h index 7a738e36..df4f3286 100644 --- a/kernel/include/kernel/USB/HID/Keyboard.h +++ b/kernel/include/kernel/USB/HID/Keyboard.h @@ -31,7 +31,7 @@ namespace Kernel BAN::Array m_keyboard_state { false }; BAN::Array m_keyboard_state_temp { false }; - uint8_t m_toggle_mask { 0 }; + uint16_t m_toggle_mask { 0 }; BAN::Optional m_repeat_scancode; uint8_t m_repeat_modifier { 0 }; diff --git a/kernel/kernel/USB/HID/Keyboard.cpp b/kernel/kernel/USB/HID/Keyboard.cpp index d5dd476e..404b3282 100644 --- a/kernel/kernel/USB/HID/Keyboard.cpp +++ b/kernel/kernel/USB/HID/Keyboard.cpp @@ -31,7 +31,7 @@ namespace Kernel // FIXME: RawKeyEvent probably should only contain keycode. // Modifier should be determined when converting to KeyEvent. - uint8_t modifier = 0; + uint16_t modifier = 0; #define READ_MODIFIER(scancode, key_modifier) \ if (m_keyboard_state_temp[scancode]) \ @@ -238,6 +238,7 @@ namespace Kernel s_scancode_to_keycode[0x4D] = keycode_function(17); s_scancode_to_keycode[0x4B] = keycode_function(18); s_scancode_to_keycode[0x4E] = keycode_function(19); + s_scancode_to_keycode[0x47] = keycode_function(20); s_scancode_to_keycode[0x53] = keycode_numpad(0, 0); s_scancode_to_keycode[0x54] = keycode_numpad(0, 1);