From ff14910c89ce63b1bb4ae20df0ca14bca540b2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Thu, 9 Jan 2025 11:02:17 +0100 Subject: [PATCH] logLoop for console + USB/OTA envs --- platformio.ini | 36 +++++++++++++++++++++----- src/core/clock.cpp | 38 ++++++++++++++++++++++++---- src/core/clock.h | 8 +++++- src/core/log.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++ src/core/log.h | 2 ++ src/main.cpp | 1 + 6 files changed, 136 insertions(+), 12 deletions(-) diff --git a/platformio.ini b/platformio.ini index 0238a0b..6a80fca 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,19 +1,43 @@ -[env:Sporttafel] +[common] platform = espressif32 board = esp32dev framework = arduino build_type = debug board_build.filesystem = littlefs lib_deps = bblanchon/ArduinoJson -; https://github.com/adafruit/Adafruit_NeoPixel + ; https://github.com/adafruit/Adafruit_NeoPixel https://github.com/me-no-dev/ESPAsyncWebServer.git build_flags = -DWIFI_SSID=\"HappyNet\" -DWIFI_PKEY=\"1Grausame!Sackratte7\" -DWIFI_HOST=\"Sporttafel\" -upload_port = 10.0.0.119 -upload_protocol = espota -;upload_port = /dev/ttyUSB0 -;upload_speed = 921600 monitor_port = /dev/ttyUSB0 monitor_speed = 115200 monitor_filters = esp32_exception_decoder + +[env:Sporttafel_USB] +platform = ${common.platform} +board = ${common.board} +framework = ${common.framework} +build_type = ${common.build_type} +board_build.filesystem = ${common.board_build.filesystem} +lib_deps = ${common.lib_deps} +build_flags = ${common.build_flags} +monitor_port = ${common.monitor_port} +monitor_speed = ${common.monitor_speed} +monitor_filters = ${common.monitor_filters} +upload_port = /dev/ttyUSB0 +upload_speed = 921600 + +[env:Sporttafel_OTA] +platform = ${common.platform} +board = ${common.board} +framework = ${common.framework} +build_type = ${common.build_type} +board_build.filesystem = ${common.board_build.filesystem} +lib_deps = ${common.lib_deps} +build_flags = ${common.build_flags} +monitor_port = ${common.monitor_port} +monitor_speed = ${common.monitor_speed} +monitor_filters = ${common.monitor_filters} +upload_port = /dev/ttyUSB0 +upload_speed = 921600 diff --git a/src/core/clock.cpp b/src/core/clock.cpp index 9941ee5..d7ab0bf 100644 --- a/src/core/clock.cpp +++ b/src/core/clock.cpp @@ -31,7 +31,7 @@ void clockLoop() { clockOffset = now; } else { startupTime = now - clockOffset; - info("clock set after %ld seconds! So startup was at %s", clockOffset, getClockStr()); + info("clock set after %ld seconds! So startup was at %s", clockOffset, getStartupStr()); } } @@ -39,16 +39,44 @@ bool isClockSet() { return startupTime != 0; } -char buffer[20]; -char *getClockStr() { - const auto now = time(nullptr); - tm t{0}; +char *getClockStr(const time_t epoch) { + auto now = epoch; + if (now == 0) { + now = time(nullptr); + } + + tm t{}; localtime_r(&now, &t); + + static char buffer[20]; snprintf(buffer, sizeof buffer, "%04d-%02d-%02d %02d:%02d:%02d", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); return buffer; } +char *getStartupStr() { + return getClockStr(startupTime); +} + +time_t getUptimeSeconds() { + return time(nullptr) - startupTime; +} + +char *getUptimeStr() { + const auto totalSeconds = getUptimeSeconds(); + const auto totalMinutes = totalSeconds / 60; + const auto totalHours = totalMinutes / 60; + + const auto partSeconds = totalSeconds % 60; + const auto partMinutes = totalMinutes % 60; + const auto partHours = totalHours % 24; + const auto partDays = totalHours / 24; + + static char buffer[20]; + snprintf(buffer, sizeof buffer, "%dd %2dh %2dm %2ds", partDays, partHours, partMinutes, partSeconds); + return buffer; +} + bool isCorrectTime(const time_t now) { return now < CLOCK_EPOCH_SECONDS_MIN; } diff --git a/src/core/clock.h b/src/core/clock.h index f3d992a..06ed605 100644 --- a/src/core/clock.h +++ b/src/core/clock.h @@ -7,7 +7,13 @@ void clockLoop(); bool isClockSet(); -char * getClockStr(); +char *getClockStr(time_t epoch = 0); + +char *getStartupStr(); + +time_t getUptimeSeconds(); + +char *getUptimeStr(); bool isCorrectTime(time_t now); diff --git a/src/core/log.cpp b/src/core/log.cpp index 0161406..69b99cd 100644 --- a/src/core/log.cpp +++ b/src/core/log.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "clock.h" @@ -15,6 +16,68 @@ void logSetup() { 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(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); diff --git a/src/core/log.h b/src/core/log.h index eab560e..bd27b5f 100644 --- a/src/core/log.h +++ b/src/core/log.h @@ -10,6 +10,8 @@ enum LogLevel { void logSetup(); +void logLoop(); + void error(const char *format, ...); void warn(const char *format, ...); diff --git a/src/main.cpp b/src/main.cpp index 37eb2b8..c8002c1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,6 +15,7 @@ void setup() { } void loop() { + logLoop(); wifiLoop(); appLoop(); }