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