Added a logger thingy

This commit is contained in:
2025-12-27 18:32:10 +00:00
parent ed08cf855a
commit 726b6fd4fd
3 changed files with 131 additions and 0 deletions
+1
View File
@@ -17,6 +17,7 @@ build_flags = -Iinclude/
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-std=gnu++17
-DLOG_LEVEL=LOG_LEVEL_TRACE
build_unflags = -std=gnu++11
# -Ilib/u8g2/csrc
+48
View File
@@ -0,0 +1,48 @@
#include "logger.h"
#include "HardwareSerial.h"
namespace Logger {
inline HardwareSerial& out() {
return Serial2;
}
void WritePrefix(LogLevel lvl) {
switch (lvl) {
case Error: out().print(F("\r[ERR] ")); break;
case Warn: out().print(F("\r[WRN] ")); break;
case Info: out().print(F("\r[INF] ")); break;
case Debug: out().print(F("\r[DBG] ")); break;
case Trace: out().print(F("\r[TRC] ")); break;
}
}
void VPrintf(const char* fmt, va_list args) {
char buffer[128];
vsnprintf(buffer, sizeof(buffer), fmt, args);
out().print(buffer);
}
void Printf(const char* fmt, ...) {
va_list args;
va_start(args, fmt);
VPrintf(fmt, args);
va_end(args);
}
void Printf(const __FlashStringHelper* fmt, ...) {
char buffer[128];
va_list args;
va_start(args, fmt);
vsnprintf_P(buffer, sizeof(buffer),
reinterpret_cast<const char*>(fmt), args);
va_end(args);
out().print(buffer);
}
void Initialize(int8_t rx, int8_t tx) {
Serial2.begin(115200, SERIAL_8N1, rx, tx);
Serial2.flush();
}
};
+82
View File
@@ -0,0 +1,82 @@
#ifndef __LOGGER__
#define __LOGGER__
#include <Arduino.h>
#include <cstdint>
#define LOG_LEVEL_ERROR 0
#define LOG_LEVEL_WARN 1
#define LOG_LEVEL_INFO 2
#define LOG_LEVEL_DEBUG 3
#define LOG_LEVEL_TRACE 4
#define LOG_ENABLED(lvl) ((lvl) <= LOG_LEVEL)
#if LOG_ENABLED(LOG_LEVEL_ERROR)
#define LOG_ERROR(fmt, ...) \
do { \
Logger::WritePrefix(Logger::Error); \
Logger::Printf(fmt, ##__VA_ARGS__); \
} while (0)
#else
#define LOG_ERROR(...) do {} while (0)
#endif
#if LOG_ENABLED(LOG_LEVEL_WARN)
#define LOG_WARN(fmt, ...) \
do { \
Logger::WritePrefix(Logger::Warn); \
Logger::Printf(fmt, ##__VA_ARGS__); \
} while (0)
#else
#define LOG_WARN(...) do {} while (0)
#endif
#if LOG_ENABLED(LOG_LEVEL_INFO)
#define LOG_INFO(fmt, ...) \
do { \
Logger::WritePrefix(Logger::Info); \
Logger::Printf(fmt, ##__VA_ARGS__); \
} while (0)
#else
#define LOG_INFO(...) do {} while (0)
#endif
#if LOG_ENABLED(LOG_LEVEL_DEBUG)
#define LOG_DEBUG(fmt, ...) \
do { \
Logger::WritePrefix(Logger::Debug); \
Logger::Printf(fmt, ##__VA_ARGS__); \
} while (0)
#else
#define LOG_DEBUG(...) do {} while (0)
#endif
#if LOG_ENABLED(LOG_LEVEL_TRACE)
#define LOG_TRACE(fmt, ...) \
do { \
Logger::WritePrefix(Logger::Trace); \
Logger::Printf(fmt, ##__VA_ARGS__); \
} while (0)
#else
#define LOG_TRACE(...) do {} while (0)
#endif
namespace Logger {
enum LogLevel : uint8_t {
Error = LOG_LEVEL_ERROR,
Warn = LOG_LEVEL_WARN,
Info = LOG_LEVEL_INFO,
Debug = LOG_LEVEL_DEBUG,
Trace = LOG_LEVEL_TRACE
};
void Initialize(int8_t rx, int8_t tx);
void WritePrefix(LogLevel lvl);
void VPrintf(const char* fmt, va_list args);
void Printf(const char* fmt, ...);
void Printf(const __FlashStringHelper* fmt, ...);
};
#endif