/* * Copyright (c) 2022-2023, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include namespace Kernel { class USBMouseDevice final : public MouseDevice { friend class DeviceManagement; public: static ErrorOr> try_create_instance(USB::Device const&, size_t max_packet_size, NonnullOwnPtr pipe); virtual ~USBMouseDevice() override {}; USB::Device const& device() const { return *m_attached_usb_device; } private: ErrorOr create_and_start_polling_process(size_t max_packet_size); USBMouseDevice(USB::Device const&, NonnullOwnPtr pipe); NonnullOwnPtr m_interrupt_in_pipe; NonnullRefPtr m_attached_usb_device; IntrusiveListNode> m_list_node; public: using List = IntrusiveList<&USBMouseDevice::m_list_node>; }; }