#pragma once #include #include #include #include "pico/time.h" #include "ring_buffer.h" struct log_entry { uint32_t timestamp_us; std::string message; }; inline ring_buffer g_debug_log; inline void dlog(std::string_view msg) { g_debug_log.push(log_entry{static_cast(time_us_32()), std::string(msg)}); } inline std::vector dlog_drain() { std::vector result; uint16_t n = g_debug_log.used(); result.reserve(n); for (uint16_t i = 0; i < n; i++) { log_entry e; g_debug_log.peek(std::span{&e, 1}); result.push_back(std::move(e)); g_debug_log.consume(1); } return result; }