Implemented time settings

This commit is contained in:
2021-08-11 22:41:37 +02:00
parent 518c4d075d
commit 162f95ab13
18 changed files with 246 additions and 0 deletions

BIN
icons/time.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -35,6 +35,7 @@ set(headers
bmsutils.h
changevaluedisplay_bluetoothmode.h
changevaluedisplay_bool.h
changevaluedisplay_daylightsavingmode.h
changevaluedisplay_larsmmode_mode.h
changevaluedisplay_unifiedmodelmode.h
changevaluedisplay_wifi_mode_t.h
@@ -72,6 +73,7 @@ set(headers
displays/menus/stationwifisettingsmenu.h
displays/menus/tempomatmodesettingsmenu.h
displays/menus/timersmenu.h
displays/menus/timesettingsmenu.h
displays/menus/wifisettingsmenu.h
displays/menus/controllerhardwaresettingsmenu.h
displays/menus/boardcomputerhardwaresettingsmenu.h
@@ -119,6 +121,7 @@ set(headers
icons/reboot.h
icons/scan.h
icons/settings.h
icons/time.h
icons/unchecked.h
icons/update.h
icons/wifi.h
@@ -167,6 +170,7 @@ set(headers
statistics.h
textinterface.h
texts.h
time_bobbycar.h
unifiedmodelmode.h
utils.h
webserver.h

View File

@@ -47,6 +47,9 @@ struct CloudEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRe
struct CloudTransmitTimeoutAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.cloudSettings.cloudTransmitTimeout; } };
#endif
struct TimezoneOffsetAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.timeSettings.timezoneOffset; } };
struct DaylightSavingModeAccessor : public RefAccessorSaveSettings<espchrono::DayLightSavingMode> { espchrono::DayLightSavingMode &getRef() const override { return settings.timeSettings.daylightSavingMode; } };
struct FrontLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableFrontLeft; } };
struct FrontRightEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableFrontRight; } };
struct BackLeftEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.controllerHardware.enableBackLeft; } };

View File

@@ -1,7 +1,9 @@
#pragma once
// 3rdparty lib includes
#include <fmt/core.h>
// local includes
#include "display.h"
#include "textinterface.h"
#include "actioninterface.h"
@@ -155,6 +157,7 @@ void ChangeValueDisplay<Tvalue>::confirm()
#endif
#include "changevaluedisplay_controlmode.h"
#include "changevaluedisplay_controltype.h"
#include "changevaluedisplay_daylightsavingmode.h"
#include "changevaluedisplay_larsmmode_mode.h"
#include "changevaluedisplay_unifiedmodelmode.h"
#include "changevaluedisplay_wifi_mode_t.h"

View File

@@ -1,5 +1,6 @@
#pragma once
// local includes
#include "changevaluedisplay.h"
#include "menudisplay.h"
#include "utils.h"

View File

@@ -1,5 +1,6 @@
#pragma once
// local includes
#include "changevaluedisplay.h"
#include "menudisplay.h"
#include "actioninterface.h"

View File

@@ -1,7 +1,9 @@
#pragma once
// esp-idf includes
#include <esp_log.h>
// local includes
#include "changevaluedisplay.h"
#include "menudisplay.h"
#include "utils.h"

View File

@@ -1,7 +1,9 @@
#pragma once
// esp-idf includes
#include <esp_log.h>
// local includes
#include "changevaluedisplay.h"
#include "menudisplay.h"
#include "utils.h"

View File

@@ -0,0 +1,55 @@
#pragma once
// esp-idf includes
#include <esp_log.h>
// 3rdparty lib includes
#include <espchrono.h>
// local includes
#include "changevaluedisplay.h"
#include "menudisplay.h"
#include "utils.h"
#include "actions/setvalueaction.h"
#include "actions/backproxyaction.h"
#include "icons/back.h"
#include "texts.h"
namespace {
template<>
class ChangeValueDisplay<espchrono::DayLightSavingMode> :
public MenuDisplay,
public virtual AccessorInterface<espchrono::DayLightSavingMode>,
public virtual ActionInterface
{
using Base = MenuDisplay;
public:
ChangeValueDisplay();
void start() override;
};
ChangeValueDisplay<espchrono::DayLightSavingMode>::ChangeValueDisplay()
{
constructMenuItem<makeComponentArgs<MenuItem, SetValueAction<espchrono::DayLightSavingMode>, StaticText<TEXT_NONE>>>(espchrono::DayLightSavingMode::None, *this, *this);
constructMenuItem<makeComponentArgs<MenuItem, SetValueAction<espchrono::DayLightSavingMode>, StaticText<TEXT_EUROPEANSUMMERTIME>>>(espchrono::DayLightSavingMode::EuropeanSummerTime, *this, *this);
constructMenuItem<makeComponentArgs<MenuItem, SetValueAction<espchrono::DayLightSavingMode>, StaticText<TEXT_USDAYLIGHTTIME>>>(espchrono::DayLightSavingMode::UsDaylightTime, *this, *this);
constructMenuItem<makeComponentArgs<MenuItem, BackProxyAction, StaticText<TEXT_BACK>, StaticMenuItemIcon<&icons::back>>>(*this);
}
void ChangeValueDisplay<espchrono::DayLightSavingMode>::start()
{
Base::start();
switch (const auto value = getValue())
{
case espchrono::DayLightSavingMode::None: setSelectedIndex(0); break;
case espchrono::DayLightSavingMode::EuropeanSummerTime: setSelectedIndex(1); break;
case espchrono::DayLightSavingMode::UsDaylightTime: setSelectedIndex(2); break;
default:
ESP_LOGW("BOBBY", "Unknown DayLightSavingMode: %i", int(value));
setSelectedIndex(3);
}
}
}

View File

@@ -10,6 +10,7 @@
#if defined(FEATURE_BLUETOOTH) || defined(FEATURE_BLE)
#include "icons/bluetooth.h"
#endif
#include "icons/time.h"
#include "icons/hardware.h"
#include "icons/buzzer.h"
#include "icons/info.h"
@@ -25,6 +26,7 @@ class WifiSettingsMenu;
class BluetoothSettingsMenu;
class BleSettingsMenu;
class CloudSettingsMenu;
class TimeSettingsMenu;
class ModesSettingsMenu;
class ControllerHardwareSettingsMenu;
class BoardcomputerHardwareSettingsMenu;
@@ -66,6 +68,7 @@ public:
#ifdef FEATURE_CLOUD
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDSETTINGS>, SwitchScreenAction<CloudSettingsMenu>>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_TIME>, SwitchScreenAction<TimeSettingsMenu>, StaticMenuItemIcon<&icons::time>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODESSETTINGS>, SwitchScreenAction<ModesSettingsMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CONTROLLERHARDWARESETTINGS>, SwitchScreenAction<ControllerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BOARDCOMPUTERHARDWARESETTINGS>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&icons::hardware>>>();

View File

@@ -0,0 +1,65 @@
#pragma once
// 3rdparty lib includes
#include <espchrono.h>
#include <fmt/core.h>
// local includes
#include "menudisplay.h"
#include "utils.h"
#include "actions/switchscreenaction.h"
#include "icons/back.h"
#include "texts.h"
#include "accessors/settingsaccessors.h"
// forward declares
namespace {
class SettingsMenu;
class TimeSettingsMenu;
} // namespace
namespace {
class CurrentUtcDateTime : public virtual TextInterface
{
public:
std::string text() const override { return fmt::format("utc: {}", espchrono::toString(espchrono::toDateTime(espchrono::utc_clock::now()))); }
};
class CurrentLocalDateTime : public virtual TextInterface
{
public:
std::string text() const override { return fmt::format("local: {}", espchrono::toString(espchrono::toDateTime(espchrono::local_clock::now()))); }
};
using TimezoneOffsetChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_OFFSET>,
TimezoneOffsetAccessor,
BackActionInterface<SwitchScreenAction<TimeSettingsMenu>>,
SwitchScreenAction<TimeSettingsMenu>
>;
using DaylightSavingModeChangeDisplay = makeComponent<
ChangeValueDisplay<espchrono::DayLightSavingMode>,
StaticText<TEXT_DAYLIGHTSAVINGMODE>,
DaylightSavingModeAccessor,
BackActionInterface<SwitchScreenAction<TimeSettingsMenu>>,
SwitchScreenAction<TimeSettingsMenu>
>;
class TimeSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_TIME>,
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
{
public:
TimeSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, CurrentUtcDateTime, StaticFont<2>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CurrentLocalDateTime, StaticFont<2>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OFFSET>, SwitchScreenAction<TimezoneOffsetChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DAYLIGHTSAVINGMODE>, SwitchScreenAction<DaylightSavingModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::back>>>();
}
};
} // namespace

46
main/icons/time.h Normal file
View File

@@ -0,0 +1,46 @@
#pragma once
#include "icon.h"
namespace {
namespace icons {
const Icon<24, 24> time{{
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5AAE, 0x6B2F, 0x7391, 0x7391, 0x7391, 0x7391, 0x7370, 0x7350, 0x62EF, // 0x0010 (16) pixels
0x5AAE, 0x528E, 0xFFC0, 0xFF80, 0xFF80, 0xFF80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x62AE, 0x62EF, 0x8C53, // 0x0020 (32) pixels
0x9CD6, 0x9CF6, 0x9D17, 0x9CF6, 0x9CF6, 0x94B5, 0x8C74, 0x8C34, 0x7BB1, 0x83CC, 0xDE85, 0xFFA1, 0xFFA1, 0xFFA1, 0xFFA0, 0x0000, // 0x0030 (48) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x62CE, 0x7370, 0xAD57, 0xAD58, 0x9CD6, 0x9CF5, 0xA515, 0xA514, 0xA535, 0xA535, 0x94B4, 0x8433, // 0x0040 (64) pixels
0x9CD2, 0xBDAC, 0xD646, 0xF764, 0xFFA3, 0xFFA2, 0xFFA1, 0xFFA0, 0x0000, 0x0000, 0x0000, 0x62EF, 0x7BD2, 0xAD98, 0xA517, 0xA516, // 0x0050 (80) pixels
0xB595, 0xCE57, 0xDE94, 0xDE51, 0xE71A, 0xEF5D, 0xDEDA, 0xC617, 0xBDCF, 0xD668, 0xF749, 0xF76D, 0xFFAB, 0xFFA5, 0xFFA2, 0xFF81, // 0x0060 (96) pixels
0x0000, 0x0000, 0x62CE, 0x7BB1, 0xAD57, 0x9D16, 0xAD56, 0xD656, 0xD60F, 0xD5EB, 0xDE2E, 0xC614, 0xCE79, 0xF79D, 0xEF7D, 0xEF5B, // 0x0070 (112) pixels
0xEF30, 0xF748, 0xF78F, 0xFFB8, 0xFFB4, 0xFFA9, 0xFFA2, 0xFF81, 0x0000, 0x0000, 0x62EF, 0xA517, 0x9CF6, 0xAD56, 0xDEB8, 0xD5CB, // 0x0080 (128) pixels
0xDE70, 0xE6B2, 0xE692, 0xDE92, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7C, 0xF771, 0xFF88, 0xFFAF, 0xFFB7, 0xFFB4, 0xF76A, 0xFF82, 0xFFA1, // 0x0090 (144) pixels
0x0000, 0x5A8D, 0x8C33, 0xA537, 0x9CF5, 0xE71B, 0x8BE8, 0x9C8C, 0xDE72, 0xE690, 0xDE6F, 0xDE6F, 0xF7BE, 0xF79E, 0xF79D, 0xEF7C, // 0x00A0 (160) pixels
0xF774, 0xF78C, 0xFF8A, 0xFF8D, 0xF76B, 0xEF06, 0xE6E4, 0xFFA0, 0x0000, 0x62EF, 0xA537, 0x8C74, 0xCE59, 0xF79D, 0xE6F8, 0x8C71, // 0x00B0 (176) pixels
0x942A, 0xD60E, 0xDE2D, 0xDE2C, 0xF7BE, 0xF7BE, 0xF79D, 0xEF7D, 0xEF5A, 0xF772, 0xF76C, 0xF769, 0xDE87, 0xC5EA, 0x9CCA, 0x0000, // 0x00C0 (192) pixels
0x0000, 0x7BD2, 0x9CD6, 0x9CD4, 0xDEFB, 0xF79E, 0xF7BE, 0xF79D, 0x94B1, 0x7B67, 0xCD89, 0xD5CA, 0xF7BE, 0xF79E, 0xF79D, 0xEF7D, // 0x00D0 (208) pixels
0xEF5C, 0xEF5A, 0xEF56, 0xEF53, 0xBDD0, 0x8C50, 0x7370, 0x0000, 0x0000, 0x8C33, 0x9475, 0xAD76, 0xEF5D, 0xF79D, 0xF79E, 0xF7BE, // 0x00E0 (224) pixels
0xF7BE, 0xA533, 0x7B47, 0xB4E7, 0xE71B, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xE71B, 0xD69A, 0x7391, 0x7391, 0x0000, // 0x00F0 (240) pixels
0x0000, 0x8C53, 0x8C54, 0xB5B7, 0xE73C, 0xDEFB, 0xF79D, 0xF79E, 0xF7BE, 0xF79E, 0x9CD3, 0x8C71, 0x94B2, 0xC618, 0xEF7D, 0xEF5D, // 0x0100 (256) pixels
0xEF5C, 0xE73C, 0xD6BA, 0xDEDA, 0xE71C, 0x7370, 0x7BB2, 0x0000, 0x0000, 0x8433, 0x8433, 0xBDD7, 0xDEDA, 0xC638, 0xEF7D, 0xF79D, // 0x0110 (272) pixels
0xF79E, 0xF79D, 0xA534, 0xC618, 0xC618, 0xAD75, 0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xC617, 0xD699, 0xE73C, 0x7370, 0x7BD2, 0x0000, // 0x0120 (288) pixels
0x0000, 0x83F3, 0x8413, 0xBDD7, 0xEF5C, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xBDD6, 0x0020, 0x630C, 0x8430, 0xD6BA, 0xEF5D, 0xEF5C, // 0x0130 (304) pixels
0xE73C, 0xE71C, 0xE71B, 0xDEFB, 0xE71C, 0x7370, 0x73B1, 0x0000, 0x0000, 0x7BB2, 0x8433, 0xAD56, 0xE71B, 0xEF5C, 0xEF5D, 0xEF7D, // 0x0140 (320) pixels
0xB596, 0x0000, 0x738E, 0xDEDB, 0xEF7D, 0xEF5D, 0xEF5C, 0xE73C, 0xE73C, 0xE71B, 0xDEFB, 0xE71C, 0xC619, 0x7391, 0x7371, 0x0000, // 0x0150 (336) pixels
0x0000, 0x6B0F, 0x8C54, 0x8C53, 0xD6BA, 0xE73C, 0xEF5C, 0xEF5D, 0x7BEF, 0x6B4D, 0xD6BA, 0xEF5C, 0xEF5C, 0xE73C, 0xE73C, 0xE71C, // 0x0160 (352) pixels
0xE71B, 0xDEFB, 0xDEFB, 0xE71C, 0x9493, 0x83F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BF3, 0x8412, 0xBDD7, 0xE71B, 0xE73C, 0xE73C, // 0x0170 (368) pixels
0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71B, 0xDEFB, 0xDEFB, 0xDEFB, 0xCE7A, 0x7BD2, 0x7BB2, 0x0000, 0x0000, // 0x0180 (384) pixels
0x0000, 0x0000, 0x630F, 0x8413, 0x9473, 0xD69A, 0xE71C, 0xE71C, 0xE71C, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xE71B, 0xDEFB, // 0x0190 (400) pixels
0xDEFB, 0xDEDB, 0xDEFB, 0x9CD4, 0x7BD2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7371, 0x83F3, 0x9CD4, 0xD6BA, 0xE71B, // 0x01A0 (416) pixels
0xE71B, 0xE71B, 0xE71B, 0xCE79, 0xCE79, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xE73C, 0xAD36, 0x7BB2, 0x6B50, 0x4A2B, 0x0000, 0x0000, // 0x01B0 (432) pixels
0x0000, 0x0000, 0x18A3, 0x528D, 0x7BB2, 0x7BD2, 0x94B4, 0xD69A, 0xDEFB, 0xDEFB, 0xDEFB, 0xCE58, 0xCE58, 0xDEFB, 0xDEFB, 0xDEFB, // 0x01C0 (448) pixels
0xDEFC, 0x9CD5, 0x73B1, 0x73B1, 0x524C, 0x1062, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2926, 0x526C, 0x7391, 0x7BF3, 0x8C53, // 0x01D0 (464) pixels
0xAD56, 0xC639, 0xDEFB, 0xE73C, 0xE73C, 0xE71C, 0xCE59, 0xB597, 0x8C53, 0x7BB2, 0x7391, 0x524C, 0x20E5, 0x0000, 0x0000, 0x0000, // 0x01E0 (480) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x18C4, 0x41EA, 0x630F, 0x7BB2, 0x8434, 0x8413, 0x8C53, 0x8C53, 0x8C53, 0x8C53, 0x8413, 0x8413, // 0x01F0 (496) pixels
0x7391, 0x630F, 0x41EA, 0x18A3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2926, 0x524C, // 0x0200 (512) pixels
0x5AAE, 0x6B50, 0x7BB2, 0x83F3, 0x83F3, 0x7BB2, 0x6B30, 0x5AAD, 0x524C, 0x2105, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A3, 0x41C9, 0x4A2B, 0x524C, 0x524C, 0x4A2B, 0x39A9, 0x10A3, // 0x0220 (544) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0230 (560) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0240 (576) pixels
}};
}
}

View File

@@ -68,6 +68,7 @@ using namespace std::chrono_literals;
#include "displays/menus/settingsmenu.h"
#include "displays/menus/stationwifisettingsmenu.h"
#include "displays/menus/timersmenu.h"
#include "displays/menus/timesettingsmenu.h"
#include "displays/menus/wifiscanmenu.h"
#include "displays/menus/wifisettingsmenu.h"
#ifdef FEATURE_BMS
@@ -132,6 +133,7 @@ using namespace std::chrono_literals;
#include "cloud.h"
#endif
#include "wifi_bobbycar.h"
#include "time_bobbycar.h"
namespace {
std::optional<espchrono::millis_clock::time_point> lastWifiUpdate;

View File

@@ -1,5 +1,8 @@
#pragma once
// 3rdparty lib includes
#include <espchrono.h>
// local includes
#include "settings.h"
#include "stringsettings.h"
@@ -21,6 +24,11 @@ constexpr Settings::Limits kidsLimits {
.phaseAdvMax = 20
};
constexpr Settings::TimeSettings defaultTimeSettings {
.timezoneOffset = 60,
.daylightSavingMode = espchrono::DayLightSavingMode::EuropeanSummerTime
};
constexpr Settings::ControllerHardware defaultControllerHardware {
.enableFrontLeft = true,
.enableFrontRight = true,
@@ -202,6 +210,7 @@ constexpr Settings defaultSettings {
#ifdef FEATURE_BLE
.bleSettings = defaultBleSettings,
#endif
.timeSettings = defaultTimeSettings,
.controllerHardware = defaultControllerHardware,
.boardcomputerHardware = defaultBoardcomputerHardware,
#ifdef FEATURE_CLOUD

View File

@@ -53,6 +53,11 @@ struct Settings
} bleSettings;
#endif
struct TimeSettings {
int16_t timezoneOffset;
espchrono::DayLightSavingMode daylightSavingMode;
} timeSettings;
struct ControllerHardware {
bool enableFrontLeft, enableFrontRight, enableBackLeft, enableBackRight;
bool invertFrontLeft, invertFrontRight, invertBackLeft, invertBackRight;
@@ -153,6 +158,9 @@ void Settings::executeForEveryCommonSetting(T &&callable)
callable("bleEnabled", bleSettings.bleEnabled);
#endif
callable("timezoneOffset", timeSettings.timezoneOffset);
callable("daylightSaving", timeSettings.daylightSavingMode);
callable("wheelDiameter", controllerHardware.wheelDiameter);
callable("numMagnetPoles", controllerHardware.numMagnetPoles);
callable("swapFrontBack", controllerHardware.swapFrontBack);

View File

@@ -1,15 +1,20 @@
#pragma once
// system includes
#include <type_traits>
#include <optional>
// esp-idf includes
#include <nvs_flash.h>
#include <nvs.h>
#include <esp_log.h>
// 3rdparty lib includes
#include <fmt/core.h>
#include <cpputils.h>
#include <espchrono.h>
// local includes
#include "settings.h"
#ifdef FEATURE_BLUETOOTH
#include "bluetoothmode.h"
@@ -217,6 +222,14 @@ template<> struct nvsGetterHelper<wifi_mode_t> { static esp_err_t nvs_get(nvs_ha
*out_value = wifi_mode_t(tempValue);
return err;
}};
template<> struct nvsGetterHelper<espchrono::DayLightSavingMode> { static esp_err_t nvs_get(nvs_handle handle, const char* key, espchrono::DayLightSavingMode* out_value)
{
uint8_t tempValue;
esp_err_t err = nvs_get_u8(handle, key, &tempValue);
if (err == ESP_OK)
*out_value = espchrono::DayLightSavingMode(tempValue);
return err;
}};
template<typename T>
bool SettingsPersister::load(T &settings)
@@ -300,6 +313,10 @@ template<> struct nvsSetterHelper<wifi_mode_t> { static esp_err_t nvs_set(nvs_ha
{
return nvs_set_u8(handle, key, uint8_t(value));
}};
template<> struct nvsSetterHelper<espchrono::DayLightSavingMode> { static esp_err_t nvs_set(nvs_handle handle, const char* key, espchrono::DayLightSavingMode value)
{
return nvs_set_u8(handle, key, uint8_t(value));
}};
template<typename T>
bool SettingsPersister::save(T &settings)

View File

@@ -93,6 +93,7 @@ constexpr char TEXT_WIFISETTINGS[] = "WiFi settings";
//constexpr char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings";
//constexpr char TEXT_BLESETTINGS[] = "BLE settings";
//constexpr char TEXT_CLOUDSETTINGS[] = "Cloud settings";
constexpr char TEXT_TIME[] = "Time";
constexpr char TEXT_MODESSETTINGS[] = "Modes settings";
constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings";
constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings";
@@ -328,6 +329,12 @@ constexpr char TEXT_CLOUDSENDRATE[] = "Cloud send rate";
#endif
//constexpr char TEXT_BACK[] = "Back";
//TimeSettingsMenu
//constexpr char TEXT_TIME[] = "Time";
constexpr char TEXT_OFFSET[] = "Offset";
constexpr char TEXT_DAYLIGHTSAVINGMODE[] = "Daylight Saving Mode";
//constexpr char TEXT_BACK[] = "Back";
//ChangeValueDisplay<BluetoothMode>
constexpr char TEXT_OFF[] = "Off";
constexpr char TEXT_MASTER[] = "Master";
@@ -351,6 +358,12 @@ constexpr char TEXT_SINUSOIDAL[] = "Sinusoidal";
constexpr char TEXT_FIELDORIENTEDCONTROL[] = "Field oriented control";
//constexpr char TEXT_BACK[] = "Back";
//ChangeValueDisplay<espchrono::DayLightSavingMode>
constexpr char TEXT_NONE[] = "None";
constexpr char TEXT_EUROPEANSUMMERTIME[] = "EuropeanSummerTime";
constexpr char TEXT_USDAYLIGHTTIME[] = "UsDaylightTime";
//constexpr char TEXT_BACK[] = "Back";
//ChangeValueDisplay<LarsmMode::Mode>
constexpr char TEXT_LARSMMODE1[] = "Mode1";
constexpr char TEXT_LARSMMODE2[] = "Mode2";

12
main/time_bobbycar.h Normal file
View File

@@ -0,0 +1,12 @@
#pragma once
// 3rdparty lib includes
#include <espchrono.h>
// local includes
#include "globals.h"
auto espchrono::local_clock::timezone() noexcept -> time_zone
{
return time_zone{minutes32{settings.timeSettings.timezoneOffset}, settings.timeSettings.daylightSavingMode};
}