#[macro_export] macro_rules! kprint { ($($arg:tt)*) => {{ use core::fmt::Write; let _ = write!($crate::arch::serial::SerialWriter, $($arg)*); }}; } #[macro_export] macro_rules! kprintln { () => { $crate::kprint!("\n") }; ($($arg:tt)*) => {{ $crate::kprint!("{}\n", format_args!($($arg)*)); }}; } pub const KLOG_GUTTER: usize = 13; #[macro_export] macro_rules! klog { ($tag:expr, error, $($arg:tt)*) => {{ $crate::log::klog_impl($tag, lancer_log::Severity::Error, format_args!($($arg)*)); }}; ($tag:expr, warn, $($arg:tt)*) => {{ $crate::log::klog_impl($tag, lancer_log::Severity::Warn, format_args!($($arg)*)); }}; ($tag:expr, $($arg:tt)*) => {{ $crate::log::klog_impl($tag, lancer_log::Severity::Info, format_args!($($arg)*)); }}; } pub fn klog_impl(tag: &str, severity: lancer_log::Severity, message: core::fmt::Arguments<'_>) { use core::fmt::Write; let tsc = crate::wcet::tsc::read_tsc(); crate::flight::recorder().append(tsc, severity, tag, message); let mut w = crate::arch::serial::SerialWriter; let _ = lancer_log::format::write_gutter(&mut w, tag, severity, message, KLOG_GUTTER); let _ = w.write_str("\n"); } #[macro_export] macro_rules! show { ($domain:ident, error, $($arg:tt)*) => {{ $crate::log::kernel_show( stringify!($domain), lancer_log::Severity::Error, format_args!($($arg)*), ); }}; ($domain:ident, warn, $($arg:tt)*) => {{ $crate::log::kernel_show( stringify!($domain), lancer_log::Severity::Warn, format_args!($($arg)*), ); }}; ($domain:ident, $($arg:tt)*) => {{ $crate::log::kernel_show( stringify!($domain), lancer_log::Severity::Info, format_args!($($arg)*), ); }}; } #[macro_export] macro_rules! phase_begin { ($domain:ident) => {{ match $crate::dashboard::domain_to_section(stringify!($domain)) { Some(idx) => $crate::dashboard::dash().begin_phase(idx), None => {} } }}; } #[macro_export] macro_rules! phase_end { ($domain:ident) => {{ match $crate::dashboard::domain_to_section(stringify!($domain)) { Some(idx) => $crate::dashboard::dash().end_phase(idx), None => {} } }}; } #[macro_export] macro_rules! phase_fail { ($domain:ident) => {{ match $crate::dashboard::domain_to_section(stringify!($domain)) { Some(idx) => $crate::dashboard::dash().fail_phase(idx), None => {} } }}; } #[allow(dead_code)] pub fn kernel_show( domain: &str, severity: lancer_log::Severity, message: core::fmt::Arguments<'_>, ) { use core::fmt::Write; let tsc = crate::wcet::tsc::read_tsc(); crate::flight::recorder().append(tsc, severity, domain, message); match crate::dashboard::domain_to_section(domain) { Some(idx) => { let mut buf = crate::dashboard::FmtBuf::new(); let _ = lancer_log::format::write_message_only(&mut buf, severity, message); crate::dashboard::dash().log(idx, buf.as_str()); } None => { let mut w = crate::arch::serial::SerialWriter; let _ = lancer_log::format::write_gutter(&mut w, domain, severity, message, KLOG_GUTTER); let _ = w.write_str("\n"); } } }