ConsoleDevice.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/CircularQueue.h>
  8. #include <AK/Vector.h>
  9. #include <Kernel/Devices/CharacterDevice.h>
  10. namespace Kernel {
  11. class ConsoleDevice final : public CharacterDevice {
  12. AK_MAKE_ETERNAL
  13. public:
  14. static ConsoleDevice& the();
  15. static void initialize();
  16. static bool is_initialized();
  17. ConsoleDevice();
  18. virtual ~ConsoleDevice() override;
  19. // ^CharacterDevice
  20. virtual bool can_read(const Kernel::FileDescription&, size_t) const override;
  21. virtual bool can_write(const Kernel::FileDescription&, size_t) const override { return true; }
  22. virtual Kernel::KResultOr<size_t> read(FileDescription&, u64, Kernel::UserOrKernelBuffer&, size_t) override;
  23. virtual Kernel::KResultOr<size_t> write(FileDescription&, u64, const Kernel::UserOrKernelBuffer&, size_t) override;
  24. virtual StringView class_name() const override { return "Console"; }
  25. void put_char(char);
  26. const CircularQueue<char, 16384>& logbuffer() const { return m_logbuffer; }
  27. // ^Device
  28. virtual mode_t required_mode() const override { return 0666; }
  29. virtual String device_name() const override { return "console"; }
  30. private:
  31. CircularQueue<char, 16384> m_logbuffer;
  32. };
  33. }