1 use alloc::sync::Arc;
2 use system_error::SystemError;
3
4 use crate::driver::tty::{
5 console::ConsoleSwitch,
6 termios::WindowSize,
7 tty_driver::TtyOperation,
8 virtual_terminal::virtual_console::{CursorOperation, ScrollDir, VirtualConsoleData},
9 };
10
11 lazy_static! {
12 pub static ref DUMMY_CONSOLE: Arc<DummyConsole> = Arc::new(DummyConsole::new());
13 }
14
15 #[inline]
16 #[allow(dead_code)]
dummy_console() -> Arc<DummyConsole>17 pub fn dummy_console() -> Arc<DummyConsole> {
18 DUMMY_CONSOLE.clone()
19 }
20
21 pub struct DummyConsole;
22
23 impl DummyConsole {
24 pub const COLUNMS: usize = 80;
25 pub const ROWS: usize = 25;
new() -> Self26 pub const fn new() -> Self {
27 DummyConsole
28 }
29 }
30
31 impl ConsoleSwitch for DummyConsole {
con_getxy( &self, _vc_data: &VirtualConsoleData, _pos: usize, ) -> Result<(usize, usize, usize), SystemError>32 fn con_getxy(
33 &self,
34 _vc_data: &VirtualConsoleData,
35 _pos: usize,
36 ) -> Result<(usize, usize, usize), SystemError> {
37 Ok((0, 0, 0))
38 }
39
con_build_attr( &self, _vc_data: &VirtualConsoleData, _color: u8, _intensity: crate::driver::tty::virtual_terminal::virtual_console::VirtualConsoleIntensity, _blink: bool, _underline: bool, _reverse: bool, _italic: bool, ) -> Result<u8, SystemError>40 fn con_build_attr(
41 &self,
42 _vc_data: &VirtualConsoleData,
43 _color: u8,
44 _intensity: crate::driver::tty::virtual_terminal::virtual_console::VirtualConsoleIntensity,
45 _blink: bool,
46 _underline: bool,
47 _reverse: bool,
48 _italic: bool,
49 ) -> Result<u8, SystemError> {
50 Ok(0)
51 }
con_init(&self, vc_data: &mut VirtualConsoleData, init: bool) -> Result<(), SystemError>52 fn con_init(&self, vc_data: &mut VirtualConsoleData, init: bool) -> Result<(), SystemError> {
53 vc_data.color_mode = true;
54
55 if init {
56 vc_data.cols = Self::COLUNMS;
57 vc_data.rows = Self::ROWS;
58 } else {
59 let tty = vc_data.port().port_data().tty().unwrap();
60 tty.resize(
61 tty.clone(),
62 WindowSize::new(Self::ROWS as u16, Self::COLUNMS as u16, 0, 0),
63 )?;
64 }
65
66 Ok(())
67 }
68
con_deinit(&self) -> Result<(), SystemError>69 fn con_deinit(&self) -> Result<(), SystemError> {
70 Ok(())
71 }
72
con_clear( &self, _vc_data: &mut VirtualConsoleData, _sy: usize, _sx: usize, _height: usize, _width: usize, ) -> Result<(), SystemError>73 fn con_clear(
74 &self,
75 _vc_data: &mut VirtualConsoleData,
76 _sy: usize,
77 _sx: usize,
78 _height: usize,
79 _width: usize,
80 ) -> Result<(), SystemError> {
81 Ok(())
82 }
83
con_putc( &self, _vc_data: &VirtualConsoleData, _ch: u16, _ypos: u32, _xpos: u32, ) -> Result<(), SystemError>84 fn con_putc(
85 &self,
86 _vc_data: &VirtualConsoleData,
87 _ch: u16,
88 _ypos: u32,
89 _xpos: u32,
90 ) -> Result<(), SystemError> {
91 Ok(())
92 }
93
con_putcs( &self, _vc_data: &VirtualConsoleData, _buf: &[u16], _count: usize, _ypos: u32, _xpos: u32, ) -> Result<(), SystemError>94 fn con_putcs(
95 &self,
96 _vc_data: &VirtualConsoleData,
97 _buf: &[u16],
98 _count: usize,
99 _ypos: u32,
100 _xpos: u32,
101 ) -> Result<(), SystemError> {
102 Ok(())
103 }
104
con_cursor(&self, _vc_data: &VirtualConsoleData, _op: CursorOperation)105 fn con_cursor(&self, _vc_data: &VirtualConsoleData, _op: CursorOperation) {
106 // Do nothing
107 }
108
con_set_palette( &self, _vc_data: &VirtualConsoleData, _color_table: &[u8], ) -> Result<(), SystemError>109 fn con_set_palette(
110 &self,
111 _vc_data: &VirtualConsoleData,
112 _color_table: &[u8],
113 ) -> Result<(), SystemError> {
114 Ok(())
115 }
116
con_scroll( &self, _vc_data: &mut VirtualConsoleData, _top: usize, _bottom: usize, _dir: ScrollDir, _nr: usize, ) -> bool117 fn con_scroll(
118 &self,
119 _vc_data: &mut VirtualConsoleData,
120 _top: usize,
121 _bottom: usize,
122 _dir: ScrollDir,
123 _nr: usize,
124 ) -> bool {
125 false
126 }
127 }
128