PS2KeyboardDevice.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/CircularQueue.h>
  8. #include <AK/DoublyLinkedList.h>
  9. #include <AK/Types.h>
  10. #include <Kernel/API/KeyCode.h>
  11. #include <Kernel/Devices/HID/I8042Controller.h>
  12. #include <Kernel/Devices/HID/KeyboardDevice.h>
  13. #include <Kernel/Interrupts/IRQHandler.h>
  14. #include <Kernel/Random.h>
  15. #include <LibKeyboard/CharacterMap.h>
  16. namespace Kernel {
  17. class PS2KeyboardDevice final : public IRQHandler
  18. , public KeyboardDevice
  19. , public I8042Device {
  20. public:
  21. static RefPtr<PS2KeyboardDevice> try_to_initialize(const I8042Controller&);
  22. virtual ~PS2KeyboardDevice() override;
  23. bool initialize();
  24. virtual StringView purpose() const override { return class_name(); }
  25. // ^I8042Device
  26. virtual void irq_handle_byte_read(u8 byte) override;
  27. virtual void enable_interrupts() override
  28. {
  29. enable_irq();
  30. }
  31. private:
  32. explicit PS2KeyboardDevice(const I8042Controller&);
  33. // ^IRQHandler
  34. virtual bool handle_irq(const RegisterState&) override;
  35. // ^CharacterDevice
  36. virtual StringView class_name() const override { return "KeyboardDevice"; }
  37. };
  38. }