/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace Kernel { class PS2KeyboardDevice final : public IRQHandler , public KeyboardDevice , public I8042Device { friend class DeviceManagement; public: static RefPtr try_to_initialize(const I8042Controller&); virtual ~PS2KeyboardDevice() override; bool initialize(); virtual StringView purpose() const override { return class_name(); } // ^I8042Device virtual void irq_handle_byte_read(u8 byte) override; virtual void enable_interrupts() override { enable_irq(); } private: explicit PS2KeyboardDevice(const I8042Controller&); // ^IRQHandler virtual bool handle_irq(const RegisterState&) override; // ^CharacterDevice virtual StringView class_name() const override { return "KeyboardDevice"sv; } }; }