Skip to content

Commit e8c8886

Browse files
committed
refactor: added debug feature
1 parent 92c840b commit e8c8886

File tree

5 files changed

+101
-18
lines changed

5 files changed

+101
-18
lines changed

src/drivers/OLEDDriver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ OLEDDriver::OLEDDriver() : display(Config::OLED::WIDTH, Config::OLED::HEIGHT, &W
1111

1212
bool OLEDDriver::begin() {
1313
if (!display.begin(SSD1306_SWITCHCAPVCC, Config::OLED::ADDRESS)) {
14-
Logger::logln("SSD1306 allocation failed");
14+
LOG_ERROR("SSD1306 allocation failed");
1515
return false;
1616
}
1717

src/system/CycleComputer.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,7 @@ void CycleComputer::logDebugInfo(Mode currentMode, const char* value) {
7171

7272
int modeInt = (int)currentMode;
7373
if (lastDebugMode != modeInt) {
74-
Logger::log("[CycleComputer] Mode changed: ");
75-
Logger::log(modeInt);
76-
Logger::log(" Value: ");
77-
Logger::logln(value);
74+
LOG_DEBUG("[CycleComputer] Mode changed: %d Value: %s", modeInt, value);
7875
lastDebugMode = modeInt;
7976
}
8077
#endif

src/system/InputManager.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ InputEvent InputManager::update() {
1515
bool bPressed = btnB.isPressed();
1616

1717
if ((aPressed && btnB.isHeld()) || (bPressed && btnA.isHeld())) {
18-
Logger::logln("[InputManager] 同時に押された");
18+
LOG_DEBUG("[InputManager] 同時に押された");
1919
return InputEvent::BTN_BOTH;
2020
}
2121

2222
if (aPressed) {
23-
Logger::logln("[InputManager] Aボタンが押された");
23+
LOG_DEBUG("[InputManager] Aボタンが押された");
2424
return InputEvent::BTN_A;
2525
}
2626

2727
if (bPressed) {
28-
Logger::logln("[InputManager] Bボタンが押された");
28+
LOG_DEBUG("[InputManager] Bボタンが押された");
2929
return InputEvent::BTN_B;
3030
}
3131

src/system/Logger.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#include "Logger.h"
2+
3+
#include <cstdarg>
4+
#include <cstdio>
5+
#include <cstring>
6+
7+
#ifdef DEBUG_MODE
8+
LogLevel currentLogLevel = LogLevel::INFO;
9+
#else
10+
LogLevel currentLogLevel = LogLevel::NONE;
11+
#endif
12+
13+
#ifdef DEBUG_MODE
14+
void Logger::log(LogLevel level, const char* file, int line, const char* func, const char* fmt, ...) {
15+
if (level < currentLogLevel) return;
16+
17+
char buf[256];
18+
va_list args;
19+
va_start(args, fmt);
20+
vsnprintf(buf, sizeof(buf), fmt, args);
21+
va_end(args);
22+
23+
const char* levelStr = "";
24+
switch (level) {
25+
case LogLevel::DEBUG:
26+
levelStr = "DEBUG";
27+
break;
28+
case LogLevel::INFO:
29+
levelStr = "INFO";
30+
break;
31+
case LogLevel::WARN:
32+
levelStr = "WARN";
33+
break;
34+
case LogLevel::ERROR:
35+
levelStr = "ERROR";
36+
break;
37+
default:
38+
break;
39+
}
40+
41+
// Timestamp
42+
unsigned long t = millis();
43+
unsigned long h = t / 3600000;
44+
t %= 3600000;
45+
unsigned long m = t / 60000;
46+
t %= 60000;
47+
unsigned long s = t / 1000;
48+
unsigned long ms = t % 1000;
49+
50+
char timestamp[32];
51+
snprintf(timestamp, sizeof(timestamp), "[%02lu:%02lu:%02lu.%03lu]", h, m, s, ms);
52+
53+
// File name (basename)
54+
const char* filename = strrchr(file, '/');
55+
if (filename)
56+
filename++;
57+
else
58+
filename = file;
59+
60+
Serial.print(timestamp);
61+
Serial.print(" [");
62+
Serial.print(levelStr);
63+
Serial.print("] ");
64+
Serial.print(filename);
65+
Serial.print(":");
66+
Serial.print(line);
67+
Serial.print(" (");
68+
Serial.print(func);
69+
Serial.print("): ");
70+
Serial.println(buf);
71+
}
72+
#endif

src/system/Logger.h

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,33 @@
44

55
#include "../Config.h"
66

7+
enum class LogLevel {
8+
DEBUG,
9+
INFO,
10+
WARN,
11+
ERROR,
12+
NONE
13+
};
14+
15+
extern LogLevel currentLogLevel;
16+
717
class Logger {
818
public:
9-
template <typename T>
10-
static void log(const T& msg) {
11-
#ifdef DEBUG_MODE
12-
Serial.print(msg);
13-
#endif
19+
static void setLogLevel(LogLevel level) {
20+
currentLogLevel = level;
1421
}
1522

16-
template <typename T>
17-
static void logln(const T& msg) {
23+
static void log(LogLevel level, const char* file, int line, const char* func, const char* fmt, ...) __attribute__((format(printf, 5, 6)));
24+
};
25+
1826
#ifdef DEBUG_MODE
19-
Serial.println(msg);
27+
#define LOG_DEBUG(fmt, ...) Logger::log(LogLevel::DEBUG, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__)
28+
#define LOG_INFO(fmt, ...) Logger::log(LogLevel::INFO, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__)
29+
#define LOG_WARN(fmt, ...) Logger::log(LogLevel::WARN, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__)
30+
#define LOG_ERROR(fmt, ...) Logger::log(LogLevel::ERROR, __FILE__, __LINE__, __func__, fmt, ##__VA_ARGS__)
31+
#else
32+
#define LOG_DEBUG(fmt, ...) ((void)0)
33+
#define LOG_INFO(fmt, ...) ((void)0)
34+
#define LOG_WARN(fmt, ...) ((void)0)
35+
#define LOG_ERROR(fmt, ...) ((void)0)
2036
#endif
21-
}
22-
};

0 commit comments

Comments
 (0)