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