/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include class Console final : public Kernel::CharacterDevice { AK_MAKE_ETERNAL public: static Console& the(); static void initialize(); static bool is_initialized(); Console(); virtual ~Console() 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 const char* 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; };