use {crate::logger::TERMINAL_LOGGER, core::fmt::Write, spin::Mutex}; pub static SERIAL_CONSOLE: Mutex<SerialConsole> = Mutex::new(SerialConsole { uart: 0x09000000 as *mut u8, }); pub struct SerialConsole { uart: *mut u8, } impl core::fmt::Write for SerialConsole { fn write_str(&mut self, s: &str) -> core::fmt::Result { for c in s.chars() { unsafe { *self.uart = c as u8 } } Ok(()) } } unsafe impl Sync for SerialConsole {} unsafe impl Send for SerialConsole {} pub fn log(args: core::fmt::Arguments<'_>) -> core::fmt::Result { SERIAL_CONSOLE.lock().write_fmt(args)?; // TERMINAL_LOGGER.lock().write_fmt(args)?; Ok(()) }