diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 9805a23..6c73bfb 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -37,6 +37,7 @@ set(headers changevaluedisplay_wifi_power_t.h cloud.h debugcolorhelpers.h + displays/calibratevoltagedisplay.h displays/gameoflifedisplay.h displays/graphdisplay.h displays/menus/aboutmenu.h diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index f5c1a83..7ee9167 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -171,6 +171,7 @@ struct LedstripBrightnessAccessor : public RefAccessorSaveSettings { ui // Battery struct BatterySeriesCellsAccessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.battery.cellsSeries; } }; struct BatteryParallelCellsAccessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.battery.cellsParallel; } }; +struct BatteryWHperKMAccessor : public RefAccessorSaveSettings { uint16_t &getRef() const override { return settings.battery.watthoursPerKilometer; } }; struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } }; template diff --git a/main/displays/calibratevoltagedisplay.h b/main/displays/calibratevoltagedisplay.h new file mode 100644 index 0000000..f4bb6c0 --- /dev/null +++ b/main/displays/calibratevoltagedisplay.h @@ -0,0 +1,34 @@ +#pragma once + +// Local includes +#include "menudisplay.h" +#include "utils.h" +#include "menuitem.h" +#include "icons/back.h" +#include "icons/settings.h" +#include "texts.h" +#include "actions/dummyaction.h" +#include "actions/switchscreenaction.h" +#include "battery.h" +#include "menus/batterymenu.h" + +using namespace espgui; + +namespace { + class CalibrateVoltageDisplay; + class BatteryMenu; +} + +namespace { + class CalibrateVoltageDisplay : + public MenuDisplay, + public StaticText, + public BackActionInterface> + { + public: + CalibrateVoltageDisplay() + { + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + }; +} // Namespace diff --git a/main/displays/menus/batterymenu.h b/main/displays/menus/batterymenu.h index 92f8c77..e98a449 100644 --- a/main/displays/menus/batterymenu.h +++ b/main/displays/menus/batterymenu.h @@ -12,6 +12,7 @@ #include "mainmenu.h" #include "battery.h" #include "selectbatterytypemenu.h" +#include "displays/calibratevoltagedisplay.h" // Helper class currentBatteryStatus : public virtual TextInterface { public: std::string text() const override { return getBatteryPercentageString(); } }; @@ -20,6 +21,7 @@ using namespace espgui; namespace { class BatteryMenu; + class CalibrateVoltageDisplay; using BatteryCellSeriesChangeScreen = makeComponent< ChangeValueDisplay, @@ -36,6 +38,14 @@ namespace { BackActionInterface>, SwitchScreenAction >; + + using BatteryWHperKMChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + BatteryWHperKMAccessor, + BackActionInterface>, + SwitchScreenAction + >; } namespace { @@ -48,9 +58,13 @@ namespace { BatteryMenu() { constructMenuItem>(); + constructMenuItem>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); + constructMenuItem>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::settings>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } }; diff --git a/main/displays/menus/ledstripmenu.h b/main/displays/menus/ledstripmenu.h index a85a0fb..bb680ae 100644 --- a/main/displays/menus/ledstripmenu.h +++ b/main/displays/menus/ledstripmenu.h @@ -113,9 +113,10 @@ public: constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableBeepWhenBlinkAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableFullBlinkAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); + if (!simplified) { constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOAccessor>>(); } + constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOFrontlight>>(); + if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } + if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/statusdisplay.h b/main/displays/statusdisplay.h index d7ae2be..71a5e0e 100644 --- a/main/displays/statusdisplay.h +++ b/main/displays/statusdisplay.h @@ -16,6 +16,7 @@ #include "widgets/label.h" #include "widgets/progressbar.h" #include "icons/alert.h" +#include "battery.h" // forward declares namespace { @@ -94,6 +95,8 @@ private: Label m_labelBrems{90, 15}; // 60, 15 ProgressBar m_progressBarBrems{150, 15, 90, 15, 0, 1000}; + Label m_batterypercent{0, 30}; + BoardStatus m_frontStatus{42}; BoardStatus m_backStatus{142}; @@ -126,6 +129,8 @@ void StatusDisplay::initScreen() m_labelBrems.start(); m_progressBarBrems.start(); + m_batterypercent.start(); + m_frontStatus.start(); m_backStatus.start(); @@ -161,6 +166,8 @@ void StatusDisplay::redraw() m_labelBrems.redraw(brems ? fmt::format("{:.2f}", *brems) : "?"); m_progressBarBrems.redraw(brems ? *brems : 0); + m_batterypercent.redraw(getBatteryPercentageString()); + m_frontStatus.redraw(controllers.front); m_backStatus.redraw(controllers.back); diff --git a/main/presets.h b/main/presets.h index 20a5a37..6d7cebd 100644 --- a/main/presets.h +++ b/main/presets.h @@ -256,7 +256,8 @@ constexpr Settings::LockscreenSettings defaultLockscreen { constexpr Settings::Battery defaultBattery { .cellsSeries = 12, .cellsParallel = 4, - .cellType = 0 + .cellType = 0, + .watthoursPerKilometer = 10 }; constexpr Settings defaultSettings { diff --git a/main/settings.h b/main/settings.h index 7eb693c..00ba2d2 100644 --- a/main/settings.h +++ b/main/settings.h @@ -175,6 +175,7 @@ struct Settings uint8_t cellsSeries; uint8_t cellsParallel; uint8_t cellType; + uint16_t watthoursPerKilometer; } battery; #endif @@ -289,6 +290,7 @@ void Settings::executeForEveryCommonSetting(T &&callable) callable("batteryCS", battery.cellsSeries); callable("batteryCP", battery.cellsParallel); callable("batteryType", battery.cellType); + callable("whkm", battery.watthoursPerKilometer); callable("lockAlwPresetSw", lockscreen.allowPresetSwitch); callable("lockscreenPin", lockscreen.pin); diff --git a/main/texts.h b/main/texts.h index eb166c5..5aafe0f 100644 --- a/main/texts.h +++ b/main/texts.h @@ -98,6 +98,7 @@ constexpr char TEXT_BATTERY_TYPE_22P[] = "22P cells"; constexpr char TEXT_BATTERY_TYPE_HG2[] = "HG2 cells"; constexpr char TEXT_BATTERY_TYPE_MH1[] = "MH1 cells"; constexpr char TEXT_BATTERY_TYPE_VTC5[] = "VTC5 cells"; +constexpr char TEXT_BATTERY_WHKM[] = "Wh per km"; //SettingsMenu //constexpr char TEXT_SETTINGS[] = "Settings";