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