/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Kernel { class ConsoleDevice final : public CharacterDevice { AK_MAKE_ETERNAL public: static ConsoleDevice& the(); static void initialize(); static bool is_initialized(); ConsoleDevice(); virtual ~ConsoleDevice() override; // ^CharacterDevice virtual bool can_read(const Kernel::FileDescription&, size_t) const override; virtual bool can_write(const Kernel::FileDescription&, size_t) const override { return true; } virtual Kernel::KResultOr read(FileDescription&, u64, Kernel::UserOrKernelBuffer&, size_t) override; virtual Kernel::KResultOr write(FileDescription&, u64, const Kernel::UserOrKernelBuffer&, size_t) override; virtual StringView class_name() const override { return "Console"; } void put_char(char); const CircularQueue& logbuffer() const { return m_logbuffer; } // ^Device virtual mode_t required_mode() const override { return 0666; } virtual String device_name() const override { return "console"; } private: CircularQueue m_logbuffer; }; }