os/device/console/
mod.rs

1//! 控制台驱动模块
2
3pub mod frame_console;
4pub mod uart_console;
5
6use alloc::{string::String, sync::Arc, vec::Vec};
7use spin::RwLock;
8
9lazy_static::lazy_static! {
10    /// 全局控制台列表
11    pub static ref CONSOLES: RwLock<Vec<Arc<dyn Console>>> = RwLock::new(Vec::new());
12    /// 全局主控制台
13    pub static ref MAIN_CONSOLE: RwLock<Option<Arc<dyn Console>>> = RwLock::new(None);
14}
15
16pub trait Console: Send + Sync {
17    /// 向控制台写入字符串
18    fn write_str(&self, s: &str);
19
20    /// 从控制台读取一个字符
21    fn read_char(&self) -> char;
22
23    /// 从控制台读取一行字符串,直到遇到换行符
24    fn read_line(&self, buf: &mut String);
25
26    /// 刷新控制台输出缓冲区
27    fn flush(&self);
28}
29
30/// 初始化控制台设备
31pub fn init() {
32    MAIN_CONSOLE.write().replace(CONSOLES.read()[0].clone());
33    // frame_console::init();
34}