add logs macro
This commit is contained in:
parent
1ce4ed7fe9
commit
adc45f6aa2
4 changed files with 143 additions and 12 deletions
|
@ -44,7 +44,7 @@ impl TimeManager for Timer {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sleep(&self, duration: Duration) {
|
fn sleep(&self, duration: Duration) {
|
||||||
if duration.as_nanos() == 0 {
|
if duration.is_zero() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
121
src/log.rs
Normal file
121
src/log.rs
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
//! Module implementing the `print!`/`println!` macro.
|
||||||
|
|
||||||
|
/// Log an debug info
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! debug {
|
||||||
|
($string:expr) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] DEBUG: ", $string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
($format_string:expr, $($arg:tt)*) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] DEBUG: ", $format_string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
$($arg)*
|
||||||
|
));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Log an info
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! info {
|
||||||
|
($string:expr) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] INFO: ", $string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
($format_string:expr, $($arg:tt)*) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] INFO: ", $format_string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
$($arg)*
|
||||||
|
));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Log an warning
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! warn {
|
||||||
|
($string:expr) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] WARN: ", $string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
($format_string:expr, $($arg:tt)*) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] WARN: ", $format_string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
$($arg)*
|
||||||
|
));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Log an error
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! error {
|
||||||
|
($string:expr) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] ERR: ", $string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
($format_string:expr, $($arg:tt)*) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] ERR: ", $format_string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
$($arg)*
|
||||||
|
));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Log a fatal error
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! fatal {
|
||||||
|
($string:expr) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] FATAL: ", $string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
($format_string:expr, $($arg:tt)*) => ({
|
||||||
|
use $crate::traits::time::TimeManager;
|
||||||
|
let timestamp = $crate::time_manager().uptime();
|
||||||
|
$crate::print::_print(format_args_nl!(
|
||||||
|
concat!("[{:>6}.{:06}] FATAL: ", $format_string),
|
||||||
|
timestamp.as_secs(),
|
||||||
|
timestamp.subsec_micros(),
|
||||||
|
$($arg)*
|
||||||
|
));
|
||||||
|
})
|
||||||
|
}
|
25
src/main.rs
25
src/main.rs
|
@ -20,6 +20,8 @@ mod utils;
|
||||||
mod panic;
|
mod panic;
|
||||||
#[cfg(not(test))]
|
#[cfg(not(test))]
|
||||||
mod print;
|
mod print;
|
||||||
|
#[cfg(not(test))]
|
||||||
|
mod log;
|
||||||
|
|
||||||
#[cfg(not(test))]
|
#[cfg(not(test))]
|
||||||
use core::arch::global_asm;
|
use core::arch::global_asm;
|
||||||
|
@ -74,6 +76,12 @@ pub unsafe fn _start_rust() -> ! {
|
||||||
bsp::rpi3::uart::init();
|
bsp::rpi3::uart::init();
|
||||||
println!("Hello there");
|
println!("Hello there");
|
||||||
|
|
||||||
|
debug!("debug");
|
||||||
|
info!("info");
|
||||||
|
warn!("warn");
|
||||||
|
error!("error");
|
||||||
|
fatal!("fatal");
|
||||||
|
|
||||||
let mut buffer = ['X'; 200];
|
let mut buffer = ['X'; 200];
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
let mut c = console().read_char();
|
let mut c = console().read_char();
|
||||||
|
@ -95,22 +103,23 @@ pub unsafe fn _start_rust() -> ! {
|
||||||
println!("");
|
println!("");
|
||||||
|
|
||||||
match gpio::set_pin_fonction(21, gpio::PinFunction::Output) {
|
match gpio::set_pin_fonction(21, gpio::PinFunction::Output) {
|
||||||
Ok(()) => println!("Successfully set pin to output"),
|
Ok(()) => info!("Successfully set pin to output"),
|
||||||
Err(err) => println!("Failled to set pin: {err}"),
|
Err(err) => warn!("Failled to set pin: {}", err),
|
||||||
}
|
}
|
||||||
loop {
|
loop {
|
||||||
let uptime = time_manager().uptime();
|
|
||||||
match gpio::set_pin_output_state(21, gpio::PinOutputState::High) {
|
match gpio::set_pin_output_state(21, gpio::PinOutputState::High) {
|
||||||
Ok(()) => println!("[{:>6}.{:06}] OUTPUT 21 UP", uptime.as_secs(), uptime.subsec_micros()),
|
Ok(()) => info!("OUTPUT 21 UP"),
|
||||||
Err(_err) => println!("Failled to set pin 21 to High"),
|
Err(_err) => warn!("Failled to set pin 21 to High"),
|
||||||
}
|
}
|
||||||
time_manager().sleep(Duration::from_secs(1));
|
time_manager().sleep(Duration::from_secs(1));
|
||||||
let uptime = time_manager().uptime();
|
|
||||||
match gpio::set_pin_output_state(21, gpio::PinOutputState::Low) {
|
match gpio::set_pin_output_state(21, gpio::PinOutputState::Low) {
|
||||||
Ok(()) => println!("[{:>6}.{:06}] OUTPUT 21 DOWN", uptime.as_secs(), uptime.subsec_micros()),
|
Ok(()) => info!("OUTPUT 21 DOWN"),
|
||||||
Err(_err) => println!("Failled to set pin 21 to Low"),
|
Err(_err) => warn!("Failled to set pin 21 to Low"),
|
||||||
}
|
}
|
||||||
time_manager().sleep(Duration::from_secs(1));
|
time_manager().sleep(Duration::from_secs(1));
|
||||||
|
if time_manager().uptime().as_secs() >= 60 {
|
||||||
|
panic!("Times out");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
println!("Hello there");
|
println!("Hello there");
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use core::panic::PanicInfo;
|
use core::panic::PanicInfo;
|
||||||
|
|
||||||
use crate::println;
|
use crate::fatal;
|
||||||
use crate::wait_forever;
|
use crate::wait_forever;
|
||||||
|
|
||||||
/// Avoid nested panic
|
/// Avoid nested panic
|
||||||
|
@ -32,10 +32,11 @@ fn panic(info: &PanicInfo) -> ! {
|
||||||
_ => ("???", 0, 0),
|
_ => ("???", 0, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
println!(
|
fatal!(
|
||||||
"Kernel panic!\n\n\
|
"Kernel panic!\n\n\
|
||||||
Panic location:\n File: '{location}', line {line}, column {column}\n\n\
|
Panic location:\n File: '{}', line {}, column {}\n\n\
|
||||||
{}",
|
{}",
|
||||||
|
location, line, column,
|
||||||
info.message().unwrap_or(&format_args!(""))
|
info.message().unwrap_or(&format_args!(""))
|
||||||
);
|
);
|
||||||
wait_forever()
|
wait_forever()
|
||||||
|
|
Loading…
Reference in a new issue