143 lines
3.2 KiB
C++
143 lines
3.2 KiB
C++
#include "log.h"
|
|
|
|
#include <cstdarg>
|
|
#include <cstdio>
|
|
#include <WiFi.h>
|
|
|
|
#include "clock.h"
|
|
|
|
void doLog(LogLevel level, const char *format, va_list args);
|
|
|
|
auto logLevel = DEBUG;
|
|
|
|
void logSetup() {
|
|
delay(500);
|
|
Serial.begin(115200);
|
|
info("Startup");
|
|
}
|
|
|
|
void execute(const char *cmd) {
|
|
if (strcmp(cmd, "help") == 0) {
|
|
info("HELP");
|
|
info(" network");
|
|
info(" reboot");
|
|
info(" reconnect");
|
|
info(" time");
|
|
} else if (strcmp(cmd, "network") == 0) {
|
|
info("NETWORK");
|
|
info(" %-10s %s", "mac:", WiFi.macAddress().c_str());
|
|
info(" %-10s %s", "state:", WiFi.localIP() != 0 ? "connected" : "disconnected");
|
|
info(" %-10s %s", "ssid:", WiFi.SSID().c_str());
|
|
info(" %-10s %s", "bssid:", WiFi.BSSIDstr().c_str());
|
|
info(" %-10s %s", "ip:", WiFi.localIP().toString().c_str());
|
|
info(" %-10s %s", "mask:", WiFi.subnetMask().toString().c_str());
|
|
info(" %-10s %s", "gateway:", WiFi.gatewayIP().toString().c_str());
|
|
info(" %-10s %s", "dns:", WiFi.dnsIP().toString().c_str());
|
|
} else if (strcmp(cmd, "reboot") == 0) {
|
|
info("REBOOT");
|
|
delay(1000);
|
|
yield();
|
|
ESP.restart();
|
|
} else if (strcmp(cmd, "reconnect") == 0) {
|
|
info("RECONNECT");
|
|
WiFi.disconnect();
|
|
} else if (strcmp(cmd, "time") == 0) {
|
|
info("TIME");
|
|
info(" %-10s %s", "epoch:", time(nullptr));
|
|
info(" %-10s %s", "real:", getClockStr());
|
|
info(" %-10s %s", "startup:", getStartupStr());
|
|
info(" %-10s %s", "uptime:", getUptimeStr());
|
|
} else {
|
|
info("UNKNOWN COMMAND: %s", cmd);
|
|
}
|
|
}
|
|
|
|
void logLoop() {
|
|
static char cmd[64];
|
|
static auto write = cmd;
|
|
if (Serial.available() > 0) {
|
|
const auto c = static_cast<char>(Serial.read());
|
|
switch (c) {
|
|
case 13:
|
|
execute(cmd);
|
|
write = cmd;
|
|
*write = 0;
|
|
break;
|
|
case 8:
|
|
Serial.print(c);
|
|
if (write > cmd) {
|
|
*write-- = 0;
|
|
}
|
|
break;
|
|
default:
|
|
Serial.print(c);
|
|
*write = c;
|
|
write++;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void log(const LogLevel level, const char *format, ...) {
|
|
va_list args;
|
|
va_start(args, format);
|
|
doLog(level, format, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void error(const char *format, ...) {
|
|
va_list args;
|
|
va_start(args, format);
|
|
doLog(ERROR, format, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void warn(const char *format, ...) {
|
|
va_list args;
|
|
va_start(args, format);
|
|
doLog(WARN, format, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void info(const char *format, ...) {
|
|
va_list args;
|
|
va_start(args, format);
|
|
doLog(INFO, format, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void debug(const char *format, ...) {
|
|
va_list args;
|
|
va_start(args, format);
|
|
doLog(DEBUG, format, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void doLog(const LogLevel level, const char *format, const va_list args) {
|
|
if (level > logLevel) {
|
|
return;
|
|
}
|
|
Serial.print(getClockStr());
|
|
switch (level) {
|
|
case ERROR:
|
|
Serial.print(" [ERROR] ");
|
|
break;
|
|
case WARN:
|
|
Serial.print(" [WARN ] ");
|
|
break;
|
|
case INFO:
|
|
Serial.print(" [INFO ] ");
|
|
break;
|
|
case DEBUG:
|
|
Serial.print(" [DEBUG] ");
|
|
break;
|
|
}
|
|
|
|
char message[256];
|
|
vsnprintf(message, sizeof message, format, args);
|
|
Serial.print(message);
|
|
Serial.print("\n");
|
|
|
|
yield();
|
|
}
|