1*52da9a59SGnoCiYeH use system_error::SystemError; 2*52da9a59SGnoCiYeH 3*52da9a59SGnoCiYeH use super::virtual_terminal::virtual_console::{ 4*52da9a59SGnoCiYeH CursorOperation, ScrollDir, VirtualConsoleData, VirtualConsoleIntensity, 5*52da9a59SGnoCiYeH }; 6*52da9a59SGnoCiYeH 7*52da9a59SGnoCiYeH /// 终端切换相关的回调 8*52da9a59SGnoCiYeH pub trait ConsoleSwitch: Sync + Send { 9*52da9a59SGnoCiYeH /// 初始化,会对vc_data进行一系列初始化操作 10*52da9a59SGnoCiYeH fn con_init(&self, vc_data: &mut VirtualConsoleData, init: bool) -> Result<(), SystemError>; 11*52da9a59SGnoCiYeH 12*52da9a59SGnoCiYeH /// 进行释放等系列操作,目前未使用 13*52da9a59SGnoCiYeH fn con_deinit(&self) -> Result<(), SystemError>; 14*52da9a59SGnoCiYeH 15*52da9a59SGnoCiYeH /// ## 清空console的一片区域 16*52da9a59SGnoCiYeH /// 该函数的所有参数对应的都是以字符为单位 17*52da9a59SGnoCiYeH /// ### 参数: 18*52da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 19*52da9a59SGnoCiYeH /// - sy: 对应区域左上角的y轴 20*52da9a59SGnoCiYeH /// - sx: 对应区域左上角的x轴 21*52da9a59SGnoCiYeH /// - height: 区域高度 22*52da9a59SGnoCiYeH /// - width: 区域宽度 23*52da9a59SGnoCiYeH fn con_clear( 24*52da9a59SGnoCiYeH &self, 25*52da9a59SGnoCiYeH vc_data: &mut VirtualConsoleData, 26*52da9a59SGnoCiYeH sy: usize, 27*52da9a59SGnoCiYeH sx: usize, 28*52da9a59SGnoCiYeH height: usize, 29*52da9a59SGnoCiYeH width: usize, 30*52da9a59SGnoCiYeH ) -> Result<(), SystemError>; 31*52da9a59SGnoCiYeH 32*52da9a59SGnoCiYeH /// ## 向console输出一个字符 33*52da9a59SGnoCiYeH /// ### 参数: 34*52da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 35*52da9a59SGnoCiYeH /// - ch: 数据 36*52da9a59SGnoCiYeH /// - ypos: 起始y坐标 37*52da9a59SGnoCiYeH /// - xpos: 起始x坐标 38*52da9a59SGnoCiYeH fn con_putc( 39*52da9a59SGnoCiYeH &self, 40*52da9a59SGnoCiYeH vc_data: &VirtualConsoleData, 41*52da9a59SGnoCiYeH ch: u16, 42*52da9a59SGnoCiYeH ypos: u32, 43*52da9a59SGnoCiYeH xpos: u32, 44*52da9a59SGnoCiYeH ) -> Result<(), SystemError>; 45*52da9a59SGnoCiYeH 46*52da9a59SGnoCiYeH /// ## 向console输出一串字符 47*52da9a59SGnoCiYeH /// ### 参数: 48*52da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 49*52da9a59SGnoCiYeH /// - buf: 数据 50*52da9a59SGnoCiYeH /// - count: 输出字符数量 51*52da9a59SGnoCiYeH /// - ypos: 起始y坐标 52*52da9a59SGnoCiYeH /// - xpos: 起始x坐标 53*52da9a59SGnoCiYeH fn con_putcs( 54*52da9a59SGnoCiYeH &self, 55*52da9a59SGnoCiYeH vc_data: &VirtualConsoleData, 56*52da9a59SGnoCiYeH buf: &[u16], 57*52da9a59SGnoCiYeH count: usize, 58*52da9a59SGnoCiYeH ypos: u32, 59*52da9a59SGnoCiYeH xpos: u32, 60*52da9a59SGnoCiYeH ) -> Result<(), SystemError>; 61*52da9a59SGnoCiYeH 62*52da9a59SGnoCiYeH /// ## 根据pos计算出对应xy 63*52da9a59SGnoCiYeH /// 64*52da9a59SGnoCiYeH /// ### 返回值: (下一行的起始偏移,x,y) 65*52da9a59SGnoCiYeH fn con_getxy( 66*52da9a59SGnoCiYeH &self, 67*52da9a59SGnoCiYeH _vc_data: &VirtualConsoleData, 68*52da9a59SGnoCiYeH _pos: usize, 69*52da9a59SGnoCiYeH ) -> Result<(usize, usize, usize), SystemError> { 70*52da9a59SGnoCiYeH return Err(SystemError::ENOSYS); 71*52da9a59SGnoCiYeH } 72*52da9a59SGnoCiYeH 73*52da9a59SGnoCiYeH /// ## 对光标进行操作 74*52da9a59SGnoCiYeH /// ### 参数: 75*52da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 76*52da9a59SGnoCiYeH /// - op: 对光标的操作 77*52da9a59SGnoCiYeH fn con_cursor(&self, vc_data: &VirtualConsoleData, op: CursorOperation); 78*52da9a59SGnoCiYeH 79*52da9a59SGnoCiYeH /// ## 根据参数构建出对应的属性 80*52da9a59SGnoCiYeH /// ### 参数: 81*52da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 82*52da9a59SGnoCiYeH /// - color: 颜色 83*52da9a59SGnoCiYeH /// - intensity: 字符强度 84*52da9a59SGnoCiYeH /// - blink: 是否闪烁 85*52da9a59SGnoCiYeH /// - underline: 下划线 86*52da9a59SGnoCiYeH /// - reverse: 颜色反转 87*52da9a59SGnoCiYeH /// - italic: 斜体 88*52da9a59SGnoCiYeH fn con_build_attr( 89*52da9a59SGnoCiYeH &self, 90*52da9a59SGnoCiYeH _vc_data: &VirtualConsoleData, 91*52da9a59SGnoCiYeH _color: u8, 92*52da9a59SGnoCiYeH _intensity: VirtualConsoleIntensity, 93*52da9a59SGnoCiYeH _blink: bool, 94*52da9a59SGnoCiYeH _underline: bool, 95*52da9a59SGnoCiYeH _reverse: bool, 96*52da9a59SGnoCiYeH _italic: bool, 97*52da9a59SGnoCiYeH ) -> Result<u8, SystemError> { 98*52da9a59SGnoCiYeH return Err(SystemError::ENOSYS); 99*52da9a59SGnoCiYeH } 100*52da9a59SGnoCiYeH 101*52da9a59SGnoCiYeH /// ## 设置调色板 102*52da9a59SGnoCiYeH /// ### 参数: 103*52da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 104*52da9a59SGnoCiYeH /// - color_table: 颜色表 105*52da9a59SGnoCiYeH fn con_set_palette( 106*52da9a59SGnoCiYeH &self, 107*52da9a59SGnoCiYeH vc_data: &VirtualConsoleData, 108*52da9a59SGnoCiYeH color_table: &[u8], 109*52da9a59SGnoCiYeH ) -> Result<(), SystemError>; 110*52da9a59SGnoCiYeH 111*52da9a59SGnoCiYeH /// ## 滚动 112*52da9a59SGnoCiYeH /// ### 参数 113*52da9a59SGnoCiYeH /// - top:滚动范围顶部 114*52da9a59SGnoCiYeH /// - bottom: 滚动范围底部 115*52da9a59SGnoCiYeH /// - dir: 滚动方向 116*52da9a59SGnoCiYeH /// - nr: 滚动行数 117*52da9a59SGnoCiYeH fn con_scroll( 118*52da9a59SGnoCiYeH &self, 119*52da9a59SGnoCiYeH vc_data: &mut VirtualConsoleData, 120*52da9a59SGnoCiYeH top: usize, 121*52da9a59SGnoCiYeH bottom: usize, 122*52da9a59SGnoCiYeH dir: ScrollDir, 123*52da9a59SGnoCiYeH nr: usize, 124*52da9a59SGnoCiYeH ) -> bool; 125*52da9a59SGnoCiYeH } 126