keyboard.cpp 616 B

12345678910111213141516171819202122232425262728293031
  1. #include <asm/port_io.h>
  2. #include <kernel/hw/keyboard.h>
  3. #include <kernel/input/input_event.h>
  4. extern "C" void
  5. handle_keyboard_interrupt(void)
  6. {
  7. input_event evt {
  8. .type = input_event::input_event_type::KEYBOARD,
  9. .code = KEY_DOWN,
  10. .data = 0
  11. };
  12. uint8_t keycode = asm_inb(PORT_KEYDATA);
  13. if (keycode >= 0xd8) {
  14. // TODO: report not_supported event
  15. return;
  16. }
  17. // key release
  18. if (keycode >= 0x80) {
  19. evt.code = KEY_UP;
  20. keycode -= 0x80;
  21. }
  22. evt.data = keycode;
  23. // TODO: fix it
  24. // commit_input_event(&evt);
  25. (void)evt;
  26. }