commit c8c2f86087cf6eb2332514550c029fb5cf7d60a2 Author: Eduardo Silva Date: Sun Dec 28 01:18:55 2025 +0000 First commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..53c540d --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# EmbESLogger +Simple logger for my ESP32 projects. Currently only being used on CDashDisplay. diff --git a/library.json b/library.json new file mode 100644 index 0000000..b5b8d4d --- /dev/null +++ b/library.json @@ -0,0 +1,20 @@ +{ + "name": "embeslogger", + "version": "0.1.0", + "description": "Simple Logging utilities", + "keywords": "ESP32-8048S043, ESP32, curses", + "repository": + { + "type": "git", + "url": "https://github.com/ESilva15/embeslogger" + }, + "authors": + [ + { + "name": "Eduardo Silva", + "maintainer": true + } + ], + "frameworks": "*", + "platforms": "*" +} diff --git a/library.properties b/library.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/logger.cpp b/src/logger.cpp new file mode 100644 index 0000000..25c6192 --- /dev/null +++ b/src/logger.cpp @@ -0,0 +1,49 @@ +#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(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(); + } +}; + diff --git a/src/logger.h b/src/logger.h new file mode 100644 index 0000000..0a29e99 --- /dev/null +++ b/src/logger.h @@ -0,0 +1,82 @@ +#ifndef __LOGGER__ +#define __LOGGER__ + +#include +#include + +#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