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