Added time sync via esp now

This commit is contained in:
CommanderRedYT
2021-12-13 22:13:39 +01:00
parent f9bc8b341d
commit e07cb9d373
6 changed files with 60 additions and 3 deletions

View File

@ -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

View File

@ -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<makeComponent<MenuItem, mainmenu::CurrentTimeText, DummyAction, StaticMenuItemIcon<&bobbyicons::time>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATUS>, SwitchScreenAction<StatusDisplay>, StaticMenuItemIcon<&espgui::icons::back>>>();
#ifdef FEATURE_LEDSTRIP
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&bobbyicons::neopixel>>>();
@ -94,3 +110,16 @@ void MainMenu::back()
{
switchScreen<StatusDisplay>();
}
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()));
}

View File

@ -25,8 +25,12 @@ class MainMenu :
public espgui::MenuDisplay,
public espgui::StaticText<TEXT_MAINMENU>
{
using Base = espgui::MenuDisplay;
public:
MainMenu();
void back() override;
void start() override;
void redraw() override;
espgui::Label m_label_currentTime{145, 6};
};

View File

@ -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
}
};

View File

@ -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<std::chrono::seconds>(now.time_since_epoch()).count(), time_valid(now) ? "":" (probably invalid)");
const auto seconds = std::chrono::floor<std::chrono::seconds>(now.time_since_epoch());
timeval ts {
.tv_sec = (long int)seconds.count(),
.tv_usec = (long int)std::chrono::floor<std::chrono::microseconds>(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);
}

View File

@ -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();