/* * Copyright (c) 2023, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace Kernel { class HIDManagement; class SerialIOController : public AtomicRefCounted { friend class HIDManagement; public: enum class DeviceCommand : u8 { GetDeviceID, SetSampleRate, EnablePacketStreaming, DisablePacketStreaming, SetDefaults, }; AK_TYPEDEF_DISTINCT_ORDERED_ID(size_t, PortIndex); virtual ~SerialIOController() = default; virtual ErrorOr reset_device(PortIndex) = 0; virtual ErrorOr send_command(PortIndex, DeviceCommand command) = 0; virtual ErrorOr send_command(PortIndex, DeviceCommand command, u8 data) = 0; virtual ErrorOr read_from_device(PortIndex) = 0; virtual ErrorOr prepare_for_input(PortIndex) = 0; protected: SerialIOController() = default; private: IntrusiveListNode> m_list_node; }; }