152da9a59SGnoCiYeH use system_error::SystemError; 252da9a59SGnoCiYeH 352da9a59SGnoCiYeH use super::virtual_terminal::virtual_console::{ 452da9a59SGnoCiYeH CursorOperation, ScrollDir, VirtualConsoleData, VirtualConsoleIntensity, 552da9a59SGnoCiYeH }; 652da9a59SGnoCiYeH 752da9a59SGnoCiYeH /// 终端切换相关的回调 852da9a59SGnoCiYeH pub trait ConsoleSwitch: Sync + Send { 952da9a59SGnoCiYeH /// 初始化,会对vc_data进行一系列初始化操作 con_init(&self, vc_data: &mut VirtualConsoleData, init: bool) -> Result<(), SystemError>1052da9a59SGnoCiYeH fn con_init(&self, vc_data: &mut VirtualConsoleData, init: bool) -> Result<(), SystemError>; 1152da9a59SGnoCiYeH 1252da9a59SGnoCiYeH /// 进行释放等系列操作,目前未使用 13*bd70d2d1SLoGin #[allow(dead_code)] con_deinit(&self) -> Result<(), SystemError>1452da9a59SGnoCiYeH fn con_deinit(&self) -> Result<(), SystemError>; 1552da9a59SGnoCiYeH 1652da9a59SGnoCiYeH /// ## 清空console的一片区域 1752da9a59SGnoCiYeH /// 该函数的所有参数对应的都是以字符为单位 1852da9a59SGnoCiYeH /// ### 参数: 1952da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 2052da9a59SGnoCiYeH /// - sy: 对应区域左上角的y轴 2152da9a59SGnoCiYeH /// - sx: 对应区域左上角的x轴 2252da9a59SGnoCiYeH /// - height: 区域高度 2352da9a59SGnoCiYeH /// - width: 区域宽度 con_clear( &self, vc_data: &mut VirtualConsoleData, sy: usize, sx: usize, height: usize, width: usize, ) -> Result<(), SystemError>2452da9a59SGnoCiYeH fn con_clear( 2552da9a59SGnoCiYeH &self, 2652da9a59SGnoCiYeH vc_data: &mut VirtualConsoleData, 2752da9a59SGnoCiYeH sy: usize, 2852da9a59SGnoCiYeH sx: usize, 2952da9a59SGnoCiYeH height: usize, 3052da9a59SGnoCiYeH width: usize, 3152da9a59SGnoCiYeH ) -> Result<(), SystemError>; 3252da9a59SGnoCiYeH 3352da9a59SGnoCiYeH /// ## 向console输出一个字符 3452da9a59SGnoCiYeH /// ### 参数: 3552da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 3652da9a59SGnoCiYeH /// - ch: 数据 3752da9a59SGnoCiYeH /// - ypos: 起始y坐标 3852da9a59SGnoCiYeH /// - xpos: 起始x坐标 con_putc( &self, vc_data: &VirtualConsoleData, ch: u16, ypos: u32, xpos: u32, ) -> Result<(), SystemError>3952da9a59SGnoCiYeH fn con_putc( 4052da9a59SGnoCiYeH &self, 4152da9a59SGnoCiYeH vc_data: &VirtualConsoleData, 4252da9a59SGnoCiYeH ch: u16, 4352da9a59SGnoCiYeH ypos: u32, 4452da9a59SGnoCiYeH xpos: u32, 4552da9a59SGnoCiYeH ) -> Result<(), SystemError>; 4652da9a59SGnoCiYeH 4752da9a59SGnoCiYeH /// ## 向console输出一串字符 4852da9a59SGnoCiYeH /// ### 参数: 4952da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 5052da9a59SGnoCiYeH /// - buf: 数据 5152da9a59SGnoCiYeH /// - count: 输出字符数量 5252da9a59SGnoCiYeH /// - ypos: 起始y坐标 5352da9a59SGnoCiYeH /// - xpos: 起始x坐标 con_putcs( &self, vc_data: &VirtualConsoleData, buf: &[u16], count: usize, ypos: u32, xpos: u32, ) -> Result<(), SystemError>5452da9a59SGnoCiYeH fn con_putcs( 5552da9a59SGnoCiYeH &self, 5652da9a59SGnoCiYeH vc_data: &VirtualConsoleData, 5752da9a59SGnoCiYeH buf: &[u16], 5852da9a59SGnoCiYeH count: usize, 5952da9a59SGnoCiYeH ypos: u32, 6052da9a59SGnoCiYeH xpos: u32, 6152da9a59SGnoCiYeH ) -> Result<(), SystemError>; 6252da9a59SGnoCiYeH 6352da9a59SGnoCiYeH /// ## 根据pos计算出对应xy 6452da9a59SGnoCiYeH /// 6552da9a59SGnoCiYeH /// ### 返回值: (下一行的起始偏移,x,y) con_getxy( &self, _vc_data: &VirtualConsoleData, _pos: usize, ) -> Result<(usize, usize, usize), SystemError>6652da9a59SGnoCiYeH fn con_getxy( 6752da9a59SGnoCiYeH &self, 6852da9a59SGnoCiYeH _vc_data: &VirtualConsoleData, 6952da9a59SGnoCiYeH _pos: usize, 7052da9a59SGnoCiYeH ) -> Result<(usize, usize, usize), SystemError> { 7152da9a59SGnoCiYeH return Err(SystemError::ENOSYS); 7252da9a59SGnoCiYeH } 7352da9a59SGnoCiYeH 7452da9a59SGnoCiYeH /// ## 对光标进行操作 7552da9a59SGnoCiYeH /// ### 参数: 7652da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 7752da9a59SGnoCiYeH /// - op: 对光标的操作 con_cursor(&self, vc_data: &VirtualConsoleData, op: CursorOperation)7852da9a59SGnoCiYeH fn con_cursor(&self, vc_data: &VirtualConsoleData, op: CursorOperation); 7952da9a59SGnoCiYeH 8052da9a59SGnoCiYeH /// ## 根据参数构建出对应的属性 8152da9a59SGnoCiYeH /// ### 参数: 8252da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 8352da9a59SGnoCiYeH /// - color: 颜色 8452da9a59SGnoCiYeH /// - intensity: 字符强度 8552da9a59SGnoCiYeH /// - blink: 是否闪烁 8652da9a59SGnoCiYeH /// - underline: 下划线 8752da9a59SGnoCiYeH /// - reverse: 颜色反转 8852da9a59SGnoCiYeH /// - italic: 斜体 89b5b571e0SLoGin #[allow(clippy::too_many_arguments)] con_build_attr( &self, _vc_data: &VirtualConsoleData, _color: u8, _intensity: VirtualConsoleIntensity, _blink: bool, _underline: bool, _reverse: bool, _italic: bool, ) -> Result<u8, SystemError>9052da9a59SGnoCiYeH fn con_build_attr( 9152da9a59SGnoCiYeH &self, 9252da9a59SGnoCiYeH _vc_data: &VirtualConsoleData, 9352da9a59SGnoCiYeH _color: u8, 9452da9a59SGnoCiYeH _intensity: VirtualConsoleIntensity, 9552da9a59SGnoCiYeH _blink: bool, 9652da9a59SGnoCiYeH _underline: bool, 9752da9a59SGnoCiYeH _reverse: bool, 9852da9a59SGnoCiYeH _italic: bool, 9952da9a59SGnoCiYeH ) -> Result<u8, SystemError> { 10052da9a59SGnoCiYeH return Err(SystemError::ENOSYS); 10152da9a59SGnoCiYeH } 10252da9a59SGnoCiYeH 10352da9a59SGnoCiYeH /// ## 设置调色板 10452da9a59SGnoCiYeH /// ### 参数: 10552da9a59SGnoCiYeH /// - vc_data: 对应的ConsoleData 10652da9a59SGnoCiYeH /// - color_table: 颜色表 con_set_palette( &self, vc_data: &VirtualConsoleData, color_table: &[u8], ) -> Result<(), SystemError>10752da9a59SGnoCiYeH fn con_set_palette( 10852da9a59SGnoCiYeH &self, 10952da9a59SGnoCiYeH vc_data: &VirtualConsoleData, 11052da9a59SGnoCiYeH color_table: &[u8], 11152da9a59SGnoCiYeH ) -> Result<(), SystemError>; 11252da9a59SGnoCiYeH 11352da9a59SGnoCiYeH /// ## 滚动 11452da9a59SGnoCiYeH /// ### 参数 11552da9a59SGnoCiYeH /// - top:滚动范围顶部 11652da9a59SGnoCiYeH /// - bottom: 滚动范围底部 11752da9a59SGnoCiYeH /// - dir: 滚动方向 11852da9a59SGnoCiYeH /// - nr: 滚动行数 con_scroll( &self, vc_data: &mut VirtualConsoleData, top: usize, bottom: usize, dir: ScrollDir, nr: usize, ) -> bool11952da9a59SGnoCiYeH fn con_scroll( 12052da9a59SGnoCiYeH &self, 12152da9a59SGnoCiYeH vc_data: &mut VirtualConsoleData, 12252da9a59SGnoCiYeH top: usize, 12352da9a59SGnoCiYeH bottom: usize, 12452da9a59SGnoCiYeH dir: ScrollDir, 12552da9a59SGnoCiYeH nr: usize, 12652da9a59SGnoCiYeH ) -> bool; 12752da9a59SGnoCiYeH } 128