diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index ff686f3..ec7fc45 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -132,7 +132,6 @@ set(headers drivingstatistics.h esptexthelpers.h espnowfunctions.h - espnowwrapper.h feedbackparser.h globals.h handbremse.h @@ -336,7 +335,6 @@ set(sources drivingstatistics.cpp esptexthelpers.cpp espnowfunctions.cpp - espnowwrapper.cpp feedbackparser.cpp globals.cpp handbremse.cpp diff --git a/main/displays/menus/mainmenu.cpp b/main/displays/menus/mainmenu.cpp index 6a675b4..453b2b8 100644 --- a/main/displays/menus/mainmenu.cpp +++ b/main/displays/menus/mainmenu.cpp @@ -47,11 +47,27 @@ #include "icons/reboot.h" #include "icons/statistics.h" #include "icons/greenpass.h" +#include "icons/time.h" +#include "tftinstance.h" using namespace espgui; +namespace mainmenu { +/* +class CurrentTimeText : public virtual TextInterface +{ +public: + std::string text() const override + { + return fmt::format("&7Time: {}", local_clock_string()); + } +}; +*/ +} // namespace + MainMenu::MainMenu() { + // constructMenuItem>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); #ifdef FEATURE_LEDSTRIP constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::neopixel>>>(); @@ -94,3 +110,16 @@ void MainMenu::back() { switchScreen(); } + +void MainMenu::start() +{ + Base::start(); + m_label_currentTime.start(); +} + +void MainMenu::redraw() +{ + Base::redraw(); + tft.setTextFont(2); + m_label_currentTime.redraw(fmt::format("&7Time: {}", local_clock_string())); +} diff --git a/main/displays/menus/mainmenu.h b/main/displays/menus/mainmenu.h index ba241b2..0a6338e 100644 --- a/main/displays/menus/mainmenu.h +++ b/main/displays/menus/mainmenu.h @@ -25,8 +25,12 @@ class MainMenu : public espgui::MenuDisplay, public espgui::StaticText { + using Base = espgui::MenuDisplay; public: MainMenu(); void back() override; + void start() override; + void redraw() override; + espgui::Label m_label_currentTime{145, 6}; }; diff --git a/main/displays/menus/timesettingsmenu.cpp b/main/displays/menus/timesettingsmenu.cpp index c71dfe2..ff8ab82 100644 --- a/main/displays/menus/timesettingsmenu.cpp +++ b/main/displays/menus/timesettingsmenu.cpp @@ -37,7 +37,8 @@ public: #ifdef CONFIG_ESPCHRONO_SUPPORT_DEFAULT_TIMEZONE return fmt::format("local: {}", espchrono::toString(espchrono::toDateTime(espchrono::local_clock::now()))); #else - return "TODO"; + // Crude local time implementation + return fmt::format("local: {}", espchrono::toString(espchrono::toDateTime(espchrono::utc_clock::now() + settings.timeSettings.timezoneOffset))); #endif } }; diff --git a/main/utils.cpp b/main/utils.cpp index 358e768..0c8edea 100644 --- a/main/utils.cpp +++ b/main/utils.cpp @@ -337,3 +337,26 @@ uint8_t time_to_percent(espchrono::milliseconds32 repeat, espchrono::millisecond else return invert ? numLeds : 0; } + +void time_set_now(espchrono::utc_clock::time_point now) +{ + using namespace espchrono; + // ESP_LOGI("BOBBY", "%s (%lld)%s", toString(toDateTime(now)).c_str(), std::chrono::floor(now.time_since_epoch()).count(), time_valid(now) ? "":" (probably invalid)"); + const auto seconds = std::chrono::floor(now.time_since_epoch()); + + timeval ts { + .tv_sec = (long int)seconds.count(), + .tv_usec = (long int)std::chrono::floor(now.time_since_epoch() - seconds).count() + }; + timezone tz { + .tz_minuteswest = 0, + .tz_dsttime = 0 + }; + settimeofday(&ts, &tz); +} + +std::string local_clock_string() +{ + const auto dt = espchrono::toDateTime(espchrono::utc_clock::now() + settings.timeSettings.timezoneOffset); + return fmt::format("{:02d}:{:02d}:{:02d}", dt.hour, dt.minute, dt.second); +} diff --git a/main/utils.h b/main/utils.h index 1b35324..ba20812 100644 --- a/main/utils.h +++ b/main/utils.h @@ -59,3 +59,5 @@ void readPotis(); float wattToAmpere(float watt); float wattToMotorCurrent(float watt); uint8_t time_to_percent(espchrono::milliseconds32 repeat, espchrono::milliseconds32 riseTime, espchrono::milliseconds32 fullTime, size_t numLeds, bool invert); +void time_set_now(espchrono::utc_clock::time_point now); +std::string local_clock_string();