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 }