kernel/
console.rs

1use crate::{spinlock::Mutex, uart};
2
3const INPUT_BUF_SIZE: usize = 128;
4
5const BACKSPACE: u8 = 0x08;
6const fn ctrl(c: u8) -> u8 {
7    c - b'@'
8}
9
10pub static CONSOLE: Mutex<Console> = Mutex::new(Console::new(), "console");
11
12pub struct Console {
13    buf: [u8; INPUT_BUF_SIZE],
14    r: usize,
15    w: usize,
16    e: usize,
17}
18
19impl Console {
20    const fn new() -> Self {
21        Self {
22            buf: [0; INPUT_BUF_SIZE],
23            r: 0,
24            w: 0,
25            e: 0,
26        }
27    }
28}
29
30pub fn putc(c: u8) {
31    if c == BACKSPACE {
32        uart::putc_sync(BACKSPACE);
33        uart::putc_sync(b' ');
34        uart::putc_sync(BACKSPACE);
35    } else {
36        uart::putc_sync(c);
37    }
38}
39
40pub fn init() {
41    unsafe { uart::init() };
42
43    // TODO: system calls
44}