forked from INotFail/Elyz
58 lines
1.8 KiB
Rust
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)*) }; }
|