diff --git a/kernel/kernel/USB/HID/Keyboard.cpp b/kernel/kernel/USB/HID/Keyboard.cpp index f74ef47f..16f03c36 100644 --- a/kernel/kernel/USB/HID/Keyboard.cpp +++ b/kernel/kernel/USB/HID/Keyboard.cpp @@ -105,13 +105,35 @@ namespace Kernel { ASSERT(m_keyboard_lock.current_processor_has_lock()); - if (usage_page != 0x07) + switch (usage_page) { - dprintln_if(DEBUG_USB_KEYBOARD, "Unsupported keyboard usage page {2H}", usage_page); - return; + case 0x07: + if (usage >= 4 && usage < m_keyboard_state_temp.size()) + m_keyboard_state_temp[usage] = true; + break; + case 0x0C: + switch (usage) + { + case 0x00: + break; + case 0xE2: + m_keyboard_state_temp[0x7F] = true; + break; + case 0xE9: + m_keyboard_state_temp[0x80] = true; + break; + case 0xEA: + m_keyboard_state_temp[0x81] = true; + break; + default: + dprintln_if(DEBUG_USB_KEYBOARD, "Unsupported consumer page usage {2H}", usage); + break; + } + break; + default: + dprintln_if(DEBUG_USB_KEYBOARD, "Unsupported keyboard usage page {2H}", usage_page); + break; } - if (usage >= 4 && usage < m_keyboard_state_temp.size()) - m_keyboard_state_temp[usage] = true; } void USBKeyboard::handle_variable(uint16_t usage_page, uint16_t usage, int64_t state) @@ -140,6 +162,11 @@ namespace Kernel case 0x0C: switch (usage) { + case 0x00: + break; + case 0xE2: + m_keyboard_state_temp[0x7F] = true; + break; case 0xE9: m_keyboard_state_temp[0x80] = true; break;