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 <mos/io/io.hpp>
10#include <mos/mos_global.h>
11#include <mos/tasks/wait.hpp>
12#include <mos/types.hpp>
13
23
25
26template<size_t buf_size>
27struct Buffer
28{
29 u8 buf[buf_size] __aligned(buf_size) = { 0 };
30 const size_t size = buf_size;
31};
32
33struct Console // : public io_t
34{
37 const char *name = "<unnamed>";
39 waitlist_t waitlist; // waitlist for read
40
41 template<size_t buf_size>
49
50 virtual ~Console() = default;
51
52 struct
53 {
56 u8 *buf = nullptr;
57 size_t size = 0;
59
60 struct
61 {
64
67
68 public:
69 size_t write(const char *data, size_t size)
70 {
72 size_t ret = do_write(data, size);
74 return ret;
75 }
76
77 size_t write_color(const char *data, size_t size, standard_color_t fg, standard_color_t bg)
78 {
81 {
82 if (this->fg != fg || this->bg != bg)
83 {
84 set_color(fg, bg);
85 this->fg = fg;
86 this->bg = bg;
87 }
88 }
89
90 size_t ret = do_write(data, size);
92 return ret;
93 }
94
95 void putc(u8 c);
96
97 public:
98 virtual bool extra_setup()
99 {
100 return true;
101 }
102
103 virtual bool get_size(u32 *width, u32 *height) = 0;
105 virtual bool clear() = 0;
106
107 public: // TODO: make protected
108 virtual size_t do_write(const char *data, size_t size) = 0;
109};
110
111extern list_head consoles;
112
113void console_register(Console *con);
114Console *console_get(const char *name);
115Console *console_get_by_prefix(const char *prefix);
list_head consoles
Definition console.cpp:17
Console * console_get_by_prefix(const char *prefix)
Definition console.cpp:130
void console_register(Console *con)
Definition console.cpp:92
console_caps
Definition console.hpp:15
@ CONSOLE_CAP_COLOR
Definition console.hpp:16
@ CONSOLE_CAP_READ
console supports read
Definition console.hpp:21
@ CONSOLE_CAP_CLEAR
Definition console.hpp:17
@ CONSOLE_CAP_GET_SIZE
Definition console.hpp:18
@ CONSOLE_CAP_CURSOR_MOVE
Definition console.hpp:20
@ CONSOLE_CAP_CURSOR_HIDE
Definition console.hpp:19
Console * console_get(const char *name)
Definition console.cpp:117
standard_color_t
Definition ansi_colors.h:18
@ White
Definition ansi_colors.h:34
@ Black
Definition ansi_colors.h:19
list_node_t list_head
A linked list head.
Definition list.hpp:23
#define do_write(fd, buffer, size)
Definition libipc.cpp:21
const char * name
Definition slab.cpp:35
#define spinlock_acquire(lock)
Definition spinlock.hpp:64
#define spinlock_release(lock)
Definition spinlock.hpp:65
u8 buf[buf_size] __aligned(buf_size)
const size_t size
Definition console.hpp:30
standard_color_t fg
Definition console.hpp:65
console_caps caps
Definition console.hpp:38
standard_color_t bg
Definition console.hpp:65
virtual size_t do_write(const char *data, size_t size)=0
virtual bool extra_setup()
Definition console.hpp:98
virtual bool set_color(standard_color_t fg, standard_color_t bg)=0
virtual bool get_size(u32 *width, u32 *height)=0
struct Console::@330233373312361211116347355025210137337367045127 reader
as_linked_list
Definition console.hpp:35
size_t write_color(const char *data, size_t size, standard_color_t fg, standard_color_t bg)
Definition console.hpp:77
standard_color_t default_fg
Definition console.hpp:66
ring_buffer_pos_t pos
Definition console.hpp:55
struct Console::@320337056237367035102365240171133364340037030012 writer
io_t io
Definition console.hpp:36
spinlock_t lock
Definition console.hpp:54
size_t size
Definition console.hpp:57
const char * name
Definition console.hpp:37
void putc(u8 c)
Definition console.cpp:21
virtual bool clear()=0
standard_color_t default_bg
Definition console.hpp:66
size_t write(const char *data, size_t size)
Definition console.hpp:69
waitlist_t waitlist
Definition console.hpp:39
virtual ~Console()=default
u8 * buf
Definition console.hpp:56
Console(const char *name, console_caps caps, Buffer< buf_size > *read_buf, standard_color_t default_fg, standard_color_t default_bg)
Definition console.hpp:42
Definition io.hpp:48
unsigned int u32
Definition types.h:17
unsigned char u8
Definition types.h:15
#define MOS_ENUM_OPERATORS(_enum)
Definition types.hpp:113
void waitlist_init(waitlist_t *list)
Definition wait.cpp:15