Files
Elyz/kernel/src/debug.rs

58 lines
1.8 KiB
Rust

pub mod serial;
use embedded_graphics::pixelcolor::Rgb888;
use embedded_graphics::prelude::RgbColor;
pub enum LogLevel {
Info, Warn, Error,
}
impl LogLevel {
pub fn serial_color_code(&self) -> &str {
match self {
LogLevel::Info => "\x1b[32m",
LogLevel::Warn => "\x1b[33m",
LogLevel::Error => "\x1b[31m",
}
}
pub fn console_color(&self) -> Rgb888 {
match self {
LogLevel::Info => Rgb888::GREEN,
LogLevel::Warn => Rgb888::YELLOW,
LogLevel::Error => Rgb888::RED,
}
}
}
#[macro_export]
macro_rules! log {
($console:expr, $level:expr, $module:expr, $($arg:tt)*) => {{
use core::fmt::Write;
use embedded_graphics::pixelcolor::Rgb888;
// Visual screen output
$console.set_color($level.console_color());
let _ = write!($console, "[ LOG ] ");
$console.set_color(Rgb888::WHITE);
let _ = write!($console, "{:<6} | ", $module);
let _ = writeln!($console, $($arg)*);
// Serial debug output
let mut sp = unsafe { $crate::debug::serial::SerialPort::init() };
let _ = writeln!(
sp,
"{}[{:>5}]\x1b[0m {:<8} | {}",
$level.serial_color_code(),
"LOG",
$module,
format_args!($($arg)*)
);
}};
}
#[macro_export] macro_rules! info { ($c:expr, $m:expr, $($p:tt)*) => { $crate::log!($c, $crate::debug::LogLevel::Info, $m, $($p)*) }; }
#[macro_export] macro_rules! warn { ($c:expr, $m:expr, $($p:tt)*) => { $crate::log!($c, $crate::debug::LogLevel::Warn, $m, $($p)*) }; }
#[macro_export] macro_rules! error { ($c:expr, $m:expr, $($p:tt)*) => { $crate::log!($c, $crate::debug::LogLevel::Error, $m, $($p)*) }; }