MOS Source Code
Loading...
Searching...
No Matches
console.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
3#pragma once
4
5#include <ansi_colors.h>
6#include <array>
7#include <mos/io/io.hpp>
11#include <mos/mos_global.h>
12#include <mos/tasks/wait.hpp>
13#include <mos/types.hpp>
14
24
26
27template<size_t buf_size>
28struct Buffer
29{
30 u8 buf[buf_size] __aligned(buf_size) = { 0 };
31 const size_t size = buf_size;
32};
33
34struct Console : public IO
35{
37
38 public:
39 template<size_t buf_size>
41 {
42 this->reader.buf = readBuf->buf;
43 this->reader.size = readBuf->size;
45 }
46
47 virtual ~Console() = default;
48
49 void Register();
50
51 public:
52 size_t Write(const char *data, size_t size);
53 size_t WriteColored(const char *data, size_t size, StandardColor fg, StandardColor bg);
54 void putc(u8 c);
55
56 private:
57 virtual bool clear() = 0;
59 virtual size_t do_write(const char *data, size_t size) = 0;
60
61 public:
62 // IO interface
63 virtual size_t on_read(void *, size_t) override;
64 virtual size_t on_write(const void *, size_t) override;
65 virtual void on_closed() override;
66
67 public:
68 // IO interface
69 virtual mos::string name() const override;
70
71 private:
73
74 private:
75 const ConsoleCapFlags caps;
77
78 struct reader
79 {
81 u8 *buf = nullptr;
83 size_t size = 0;
85
86 struct
87 {
90
92 waitlist_t waitlist; // waitlist for readers
93};
94
95extern std::array<Console *, 128> consoles;
96
97std::optional<Console *> console_get(mos::string_view name);
98std::optional<Console *> console_get_by_prefix(mos::string_view name);
std::array< Console *, 128 > consoles
Definition console.cpp:20
std::optional< Console * > console_get(mos::string_view name)
Definition console.cpp:23
std::optional< Console * > console_get_by_prefix(mos::string_view name)
Definition console.cpp:32
ConsoleCapability
Definition console.hpp:16
@ CONSOLE_CAP_COLOR
Definition console.hpp:17
@ CONSOLE_CAP_READ
console supports read
Definition console.hpp:22
@ CONSOLE_CAP_CLEAR
Definition console.hpp:18
@ CONSOLE_CAP_GET_SIZE
Definition console.hpp:19
@ CONSOLE_CAP_CURSOR_MOVE
Definition console.hpp:21
@ CONSOLE_CAP_CURSOR_HIDE
Definition console.hpp:20
StandardColor
Definition ansi_colors.h:18
@ White
Definition ansi_colors.h:34
@ Black
Definition ansi_colors.h:19
MOSAPI void ring_buffer_pos_init(ring_buffer_pos_t *pos, size_t capacity)
basic_string_view< char > string_view
mos::basic_string< char > string
Definition string.hpp:395
size_t size
Definition slab.cpp:32
const char * name
Definition slab.cpp:33
u8 buf[buf_size] __aligned(buf_size)
const size_t size
Definition console.hpp:31
ring_buffer_pos_t pos
Definition console.hpp:82
spinlock_t lock
Definition console.hpp:80
struct Console::reader reader
Console(mos::string_view name, ConsoleCapFlags caps, Buffer< buf_size > *readBuf, StandardColor fg, StandardColor bg)
Definition console.hpp:40
const StandardColor default_bg
Definition console.hpp:76
size_t WriteColored(const char *data, size_t size, StandardColor fg, StandardColor bg)
Definition console.cpp:58
StandardColor bg
Definition console.hpp:36
virtual size_t do_write(const char *data, size_t size)=0
virtual mos::string name() const override
Definition console.cpp:143
mos::string_view conName
Definition console.hpp:91
virtual bool set_color(StandardColor fg, StandardColor bg)=0
void Register()
Definition console.cpp:51
spinlock_t lock
Definition console.hpp:88
virtual size_t on_write(const void *, size_t) override
Definition console.cpp:117
void putc(u8 c)
Definition console.cpp:125
StandardColor fg
Definition console.hpp:36
const StandardColor default_fg
Definition console.hpp:76
virtual bool clear()=0
struct Console::@330233373312361211116347355025210137337367045127 writer
const ConsoleCapFlags caps
Definition console.hpp:75
waitlist_t waitlist
Definition console.hpp:92
virtual ~Console()=default
virtual void on_closed() override
Definition console.cpp:148
virtual size_t on_read(void *, size_t) override
Definition console.cpp:83
size_t Write(const char *data, size_t size)
Definition console.cpp:76
IO(IOFlags flags, io_type_t type)
Definition io.cpp:35
unsigned char u8
Definition types.h:15
#define MOS_ENUM_FLAGS(enum, flags)
Definition types.hpp:236