MouseDevice.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  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/API/MousePacket.h>
  12. #include <Kernel/Devices/CharacterDevice.h>
  13. #include <Kernel/Devices/HID/HIDDevice.h>
  14. #include <Kernel/Interrupts/IRQHandler.h>
  15. #include <Kernel/Random.h>
  16. namespace Kernel {
  17. class MouseDevice : public HIDDevice {
  18. public:
  19. virtual ~MouseDevice() override;
  20. // ^CharacterDevice
  21. virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override;
  22. virtual bool can_read(const FileDescription&, size_t) const override;
  23. virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
  24. virtual bool can_write(const FileDescription&, size_t) const override { return true; }
  25. // ^HIDDevice
  26. virtual Type instrument_type() const override { return Type::Mouse; }
  27. // ^Device
  28. virtual mode_t required_mode() const override { return 0440; }
  29. virtual String device_name() const override { return String::formatted("mouse{}", minor()); }
  30. protected:
  31. MouseDevice();
  32. // ^CharacterDevice
  33. virtual StringView class_name() const override { return "MouseDevice"; }
  34. mutable Spinlock<u8> m_queue_lock;
  35. CircularQueue<MousePacket, 100> m_queue;
  36. };
  37. }