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