kernel/kprint/receivers/
uart.rs1use super::KPrintReceiver;
7use crate::drivers::tty::uart::UartOps;
8use crate::kprint::log_entry::{LogEntryHeader, LogLevel};
9use crate::kprint::state::KPrintState;
10use crate::state::simple_state::SIMPLE_STATE;
11
12pub struct UartReceiver;
13
14impl KPrintReceiver for UartReceiver {
15 fn receive(_state: &mut KPrintState, header: &LogEntryHeader, text: &str) {
16 if !SIMPLE_STATE.is_uart_initialized() {
17 return;
18 }
19
20 let log_level = LogLevel::from_u8(header.flags_and_level.get(
21 LogEntryHeader::LEVEL_START_BIT,
22 LogEntryHeader::LEVEL_NUM_BITS
23 ));
24 if log_level.is_none() { return; }
25 let log_level_letter = log_level.unwrap().get_letter();
26
27 let mut lock = unsafe { SIMPLE_STATE.uart().lock() };
29 let _ = lock.write_byte(log_level_letter);
30 let _ = lock.write_byte(b' ');
31 let _ = lock.write_string(text);
32 }
33}