diff --git a/src/logging.rs b/src/logging.rs index 8ea0401..3aa1400 100644 --- a/src/logging.rs +++ b/src/logging.rs @@ -1,11 +1,13 @@ +#![allow(static_mut_refs)] + use embassy_sync::blocking_mutex::{raw::CriticalSectionRawMutex, Mutex}; use esp_println::println; use log::{LevelFilter, Metadata, Record}; -use static_cell::StaticCell; // Provides a threadsafe serial logger pub struct RenderbugLogger { lock: Mutex, + current_level: LevelFilter, default_level: LevelFilter } @@ -13,12 +15,14 @@ impl Default for RenderbugLogger { fn default() -> Self { Self { lock: Mutex::new(()), + current_level: LevelFilter::Info, default_level: LevelFilter::Info } } } -static LOGGER: StaticCell = StaticCell::new(); +//static LOGGER: StaticCell = StaticCell::new(); +static mut LOGGER: Option = None; impl RenderbugLogger { pub fn init_logger() { @@ -33,7 +37,8 @@ impl RenderbugLogger { _ => LevelFilter::Info }; - let logger = LOGGER.init(RenderbugLogger { default_level, ..Default::default() }); + unsafe { LOGGER.replace(RenderbugLogger { default_level, current_level: default_level, ..Default::default() }) }; + let logger = unsafe { LOGGER.as_mut().unwrap() }; unsafe { critical_section::with(|_| { log::set_logger_racy(logger).ok(); @@ -41,6 +46,25 @@ impl RenderbugLogger { }); }; } + + pub fn set_level(level: LevelFilter) { + unsafe { + critical_section::with(|_| { + log::set_max_level_racy(level); + LOGGER.as_mut().unwrap().current_level = level; + }) + } + } + + pub fn reset_level() { + unsafe { + critical_section::with(|_| { + let logger = LOGGER.as_mut().unwrap(); + log::set_max_level_racy(logger.default_level); + logger.current_level = logger.default_level; + }) + } + } } impl log::Log for RenderbugLogger {