xref: /DragonOS/kernel/src/driver/tty/console.rs (revision bd70d2d1f490aabd570a5301b858bd5eb04149fa)
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