Something went wrong. Try again.
A fork of https://github.com/crosspoint-reader/crosspoint-reader
Something went wrong. Try again.
2.4 kB · 84 lines
C
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485#pragma once
#include <HardwareSerial.h>
#include <string>
/*Define ENABLE_SERIAL_LOG to enable loggingCan be set in platformio.ini build_flags or as a compile definition
Define LOG_LEVEL to control log verbosity:0 = ERR only1 = ERR + INF2 = ERR + INF + DBGIf not defined, defaults to 0
If you have a legitimate need for raw Serial access (e.g., binary data,special formatting), use the underlying logSerial object directly: logSerial.printf("Special case: %d\n", value); logSerial.write(binaryData, length);
The logSerial reference (defined below) points to the real Serial object andwon't trigger deprecation warnings.*/
#ifndef LOG_LEVEL#define LOG_LEVEL 0#endif
static HWCDC& logSerial = Serial;
void logPrintf(const char* level, const char* origin, const char* format, ...);
#ifdef ENABLE_SERIAL_LOG#if LOG_LEVEL >= 0#define LOG_ERR(origin, format, ...) logPrintf("ERR", origin, format "\n", ##__VA_ARGS__)#else#define LOG_ERR(origin, format, ...)#endif
#if LOG_LEVEL >= 1#define LOG_INF(origin, format, ...) logPrintf("INF", origin, format "\n", ##__VA_ARGS__)#else#define LOG_INF(origin, format, ...)#endif
#if LOG_LEVEL >= 2#define LOG_DBG(origin, format, ...) logPrintf("DBG", origin, format "\n", ##__VA_ARGS__)#else#define LOG_DBG(origin, format, ...)#endif#else#define LOG_DBG(origin, format, ...)#define LOG_ERR(origin, format, ...)#define LOG_INF(origin, format, ...)#endif
std::string getLastLogs();void clearLastLogs();// Validates the RTC log state (magic word + logHead range). Returns true if// corruption was detected (magic mismatch or logHead out of range), meaning// logMessages is untrusted garbage. Callers should call clearLastLogs() when// this returns true so getLastLogs() does not dump corrupt data into crash reports.bool sanitizeLogHead();
class MySerialImpl : public Print { public: void begin(unsigned long baud) { logSerial.begin(baud); }
// Support boolean conversion for compatibility with code like: // if (Serial) or while (!Serial) operator bool() const { return logSerial; }
__attribute__((deprecated("Use LOG_* macro instead"))) size_t printf(const char* format, ...); size_t write(uint8_t b) override; size_t write(const uint8_t* buffer, size_t size) override; void flush() override; static MySerialImpl instance;};
#ifdef Serial#undef Serial#endif#define Serial MySerialImpl::instance