diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 15c9ab4..cff3d00 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -49,7 +49,6 @@ set(headers changevaluedisplay_bobbyquickactions.h changevaluedisplay_controlmode.h changevaluedisplay_controltype.h - changevaluedisplay_handbremsmode.h changevaluedisplay_larsmmode_mode.h changevaluedisplay_unifiedmodelmode.h cloud.h @@ -120,7 +119,6 @@ set(headers displays/menus/networksettingsmenu.h displays/menus/otamenu.h displays/menus/profilesmenu.h - displays/menus/selectbatterytypemenu.h displays/menus/selectbuildserverbranch.h displays/menus/selectbuildservermenu.h displays/menus/selectmodemenu.h @@ -282,7 +280,6 @@ set(sources changevaluedisplay_bobbyquickactions.cpp changevaluedisplay_controlmode.cpp changevaluedisplay_controltype.cpp - changevaluedisplay_handbremsmode.cpp changevaluedisplay_larsmmode_mode.cpp changevaluedisplay_unifiedmodelmode.cpp cloud.cpp @@ -351,7 +348,6 @@ set(sources displays/menus/networksettingsmenu.cpp displays/menus/otamenu.cpp displays/menus/profilesmenu.cpp - displays/menus/selectbatterytypemenu.cpp displays/menus/selectbuildserverbranch.cpp displays/menus/selectbuildservermenu.cpp displays/menus/selectmodemenu.cpp diff --git a/main/bobbyquickactions.h b/main/bobbyquickactions.h index 74d7fac..e5576b2 100644 --- a/main/bobbyquickactions.h +++ b/main/bobbyquickactions.h @@ -2,10 +2,10 @@ // 3rdparty lib includes #include +#include // local includes #include "bobbybuttons.h" -#include "bobbytypesafeenum.h" #define BobbyQuickActionsValues(x) \ x(NONE) \ @@ -14,7 +14,7 @@ x(HANDBREMSE) \ x(OPEN_GARAGE) \ x(WIFI_SCAN) -DECLARE_BOBBYTYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) +DECLARE_TYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) namespace quickactions { diff --git a/main/bobbytypesafeenum.h b/main/bobbytypesafeenum.h index ff049b5..74ee5b8 100644 --- a/main/bobbytypesafeenum.h +++ b/main/bobbytypesafeenum.h @@ -6,7 +6,9 @@ template struct iterateEnum; -#define DECLARE_TYPESAFE_ENUM_TYPE(Name) \ +#define DECLARE_BOBBYTYPESAFE_ENUM(Name, Derivation, Values) \ + DECLARE_TYPESAFE_ENUM(Name, Derivation, Values) \ + \ template<> \ struct iterateEnum { \ template \ @@ -15,7 +17,3 @@ struct iterateEnum; return iterate##Name(std::forward(cb)); \ } \ }; - -#define DECLARE_BOBBYTYPESAFE_ENUM(Name, Derivation, Values) \ - DECLARE_TYPESAFE_ENUM(Name, Derivation, Values) \ - DECLARE_TYPESAFE_ENUM_TYPE(Name) diff --git a/main/configutils_bobby.h b/main/configutils_bobby.h index 5347054..9a2ddcb 100644 --- a/main/configutils_bobby.h +++ b/main/configutils_bobby.h @@ -5,6 +5,7 @@ #include // local includes +#include "battery.h" #include "ledstrip.h" #include "handbremse.h" #include "bobbyquickactions.h" @@ -13,3 +14,4 @@ IMPLEMENT_NVS_GET_SET_ENUM(OtaAnimationModes) IMPLEMENT_NVS_GET_SET_ENUM(HandbremseMode) IMPLEMENT_NVS_GET_SET_ENUM(LedstripAnimation) IMPLEMENT_NVS_GET_SET_ENUM(BobbyQuickActions) +IMPLEMENT_NVS_GET_SET_ENUM(BatteryCellType) diff --git a/main/configwrapper_bobby.cpp b/main/configwrapper_bobby.cpp index af7a64b..b31e2a2 100644 --- a/main/configwrapper_bobby.cpp +++ b/main/configwrapper_bobby.cpp @@ -8,3 +8,4 @@ INSTANTIATE_CONFIGWRAPPER_TEMPLATES(OtaAnimationModes) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(HandbremseMode) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(LedstripAnimation) INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BobbyQuickActions) +INSTANTIATE_CONFIGWRAPPER_TEMPLATES(BatteryCellType) diff --git a/main/displays/menus/batterymenu.cpp b/main/displays/menus/batterymenu.cpp index 2861d8d..c027654 100644 --- a/main/displays/menus/batterymenu.cpp +++ b/main/displays/menus/batterymenu.cpp @@ -12,29 +12,21 @@ #include // Local includes -#include "utils.h" -#include "icons/settings.h" -#include "battery.h" -#include "selectbatterytypemenu.h" -#include "displays/bobbychangevaluedisplay.h" -#include "mainmenu.h" -#include "displays/calibratevoltagedisplay.h" #include "accessors/settingsaccessors.h" #include "battery.h" +#include "displays/bobbychangevaluedisplay.h" +#include "displays/calibratevoltagedisplay.h" +#include "icons/settings.h" +#include "mainmenu.h" +#include "typesafeenumchangemenu.h" +#include "utils.h" namespace { constexpr char TEXT_BATTERY[] = "Battery"; constexpr char TEXT_CELL_SERIES[] = "Cells (Series)"; constexpr char TEXT_CELL_PARALLEL[] = "Cells (Parallel)"; constexpr char TEXT_SELECT_CELL_TYPE[] = "Select Cell Type"; -constexpr char TEXT_CELL_TYPE[] = "Cell Type"; constexpr char TEXT_BATTERY_CALIBRATE[] = "Calibrate Voltages"; -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_TYPE_BAK_25R[] = "BAK / 25R cells"; -constexpr char TEXT_BATTERY_TYPE_HE4[] = "HE4 cells"; constexpr char TEXT_BATTERY_WHKM[] = "Wh per km"; constexpr char TEXT_BATTERY_APPLYCALIB[] = "Apply calibration"; constexpr char TEXT_VOLTAGECALIBRATION_RESET[] = "Reset calibration"; @@ -85,7 +77,7 @@ BatteryMenu::BatteryMenu() constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem>(&configs.battery.cellType); constructMenuItem>(); constructMenuItem>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::settings>>>(); diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp index cb85968..186b10f 100644 --- a/main/displays/menus/handbremssettingsmenu.cpp +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -9,6 +9,7 @@ // local includes #include "displays/bobbychangevaluedisplay.h" +#include "displays/menus/typesafeenumchangemenu.h" #include "accessors/settingsaccessors.h" #include "changevaluedisplay_handbremsmode.h" #include "displays/menus/defaultmodesettingsmenu.h" @@ -30,21 +31,6 @@ using HandBremsTriggerTimeoutChangeValueDisplay = espgui::makeComponent< espgui::ConfirmActionInterface>, espgui::BackActionInterface> >; -using HandBremsModeChangeValueDisplay = espgui::makeComponent< - BobbyChangeValueDisplay, - espgui::StaticText, - HandbremsModeAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> ->; -class HandBremsModeText : public virtual espgui::TextInterface -{ -public: - std::string text() const override - { - return fmt::format("Mode: &2{}", configs.handbremse.mode.valueAsString()); - } -}; } HandbremsSettingsMenu::HandbremsSettingsMenu() @@ -53,7 +39,7 @@ HandbremsSettingsMenu::HandbremsSettingsMenu() constructMenuItem, BobbyCheckbox, HandbremsEnabledAccessor>>(); constructMenuItem, BobbyCheckbox, HandbremsAutomaticAccessor>>(); constructMenuItem, BobbyCheckbox, HandbremsVisualizeAccessor>>(); - constructMenuItem>>(); + constructMenuItem>(&configs.handbremse.mode); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index d3165a2..908f1a5 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -11,16 +11,16 @@ #include // local includes -#include "displays/bobbychangevaluedisplay.h" #include "accessors/settingsaccessors.h" +#include "bobbycheckbox.h" +#include "displays/bobbychangevaluedisplay.h" #include "displays/ledstripcolorsdisplay.h" #include "displays/menus/ledstripselectotamode.h" #include "displays/menus/mainmenu.h" +#include "displays/menus/typesafeenumchangemenu.h" #include "globals.h" #include "ledstrip.h" -#include "displays/menus/typesafeenumchangemenu.h" #include "ledstripselectblinkmenu.h" -#include "bobbycheckbox.h" // clang-format off diff --git a/main/displays/menus/manageprofilesmenu.h b/main/displays/menus/manageprofilesmenu.h index b9a57e1..500645d 100644 --- a/main/displays/menus/manageprofilesmenu.h +++ b/main/displays/menus/manageprofilesmenu.h @@ -1,7 +1,9 @@ #pragma once +// 3rdparty lib includes +#include + // local includes -#include "bobbytypesafeenum.h" #include "displays/bobbymenudisplay.h" #include "modes/ignoreinputmode.h" @@ -10,7 +12,7 @@ x(Copy) \ x(Swap) \ x(__END__) -DECLARE_BOBBYTYPESAFE_ENUM(Actions, : uint8_t, ActionValues) +DECLARE_TYPESAFE_ENUM(Actions, : uint8_t, ActionValues) class ManageProfilesMenu : public BobbyMenuDisplay { diff --git a/main/displays/menus/selectbatterytypemenu.cpp b/main/displays/menus/selectbatterytypemenu.cpp deleted file mode 100644 index 6626671..0000000 --- a/main/displays/menus/selectbatterytypemenu.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "selectbatterytypemenu.h" - -// 3rdparty lib includes -#include -#include -#include -#include -#include - -// local includes -#include "battery.h" -#include "newsettings.h" -#include "utils.h" -#include "displays/menus/batterymenu.h" -#include "batterymenu.h" -#include "displays/menus/mainmenu.h" - -namespace { -constexpr char TEXT_CELL_SERIES[] = "Cells (Series)"; -constexpr char TEXT_CELL_PARALLEL[] = "Cells (Parallel)"; -constexpr char TEXT_SELECT_CELL_TYPE[] = "Select Cell Type"; -constexpr char TEXT_CELL_TYPE[] = "Cell Type"; -constexpr char TEXT_BATTERY_CALIBRATE[] = "Calibrate Voltages"; -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_TYPE_BAK_25R[] = "BAK / 25R cells"; -constexpr char TEXT_BATTERY_TYPE_HE4[] = "HE4 cells"; -constexpr char TEXT_BATTERY_WHKM[] = "Wh per km"; -constexpr char TEXT_BATTERY_APPLYCALIB[] = "Apply calibration"; -constexpr char TEXT_VOLTAGECALIBRATION_RESET[] = "Reset calibration"; -constexpr char TEXT_BACK[] = "Back"; - -class CurrentBatteryTypeText : public virtual espgui::TextInterface -{ -public: - std::string text() const override - { - return getBatteryCellTypeString(); - } -}; - -template -class BatterySelectTypeAction : public virtual espgui::ActionInterface -{ -public: - void triggered() override { configs.write_config(configs.battery.cellType, uint8_t(T)); } -}; -} // namespace - -BatteryTypeMenu::BatteryTypeMenu() -{ - using namespace espgui; - constructMenuItem>(); - constructMenuItem, BatterySelectTypeAction>>(); - constructMenuItem, BatterySelectTypeAction>>(); - constructMenuItem, BatterySelectTypeAction>>(); - constructMenuItem, BatterySelectTypeAction>>(); - constructMenuItem, BatterySelectTypeAction>>(); - constructMenuItem, BatterySelectTypeAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); -} - -std::string BatteryTypeMenu::text() const -{ - return TEXT_SELECT_CELL_TYPE; -} - -void BatteryTypeMenu::back() -{ - espgui::switchScreen(); -} diff --git a/main/displays/menus/selectbatterytypemenu.h b/main/displays/menus/selectbatterytypemenu.h deleted file mode 100644 index cf84b49..0000000 --- a/main/displays/menus/selectbatterytypemenu.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -// Local includes -#include "displays/bobbymenudisplay.h" - -class BatteryTypeMenu : public BobbyMenuDisplay -{ -public: - BatteryTypeMenu(); - - std::string text() const override; - - void back() override; -}; diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h index 027f60c..4a9d730 100644 --- a/main/displays/menus/typesafeenumchangemenu.h +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -14,17 +14,16 @@ namespace typesafeenumchangemenu { constexpr char TEXT_BACK[] = "Back"; -} // namespace typesafeenumchangemenu template class TypesafeEnumCurrentValueMenuItem : public espgui::MenuItem { public: - TypesafeEnumCurrentValueMenuItem(const ConfigWrapper &config) : m_config{config} {} + TypesafeEnumCurrentValueMenuItem(ConfigWrapper* config) : m_config{config} {} std::string text() const override { - return toString(m_config.value); + return toString(m_config->value); } void triggered() override {} @@ -33,7 +32,7 @@ public: return TFT_DARKGREY; } private: - const ConfigWrapper &m_config; + ConfigWrapper* m_config; }; template @@ -41,7 +40,7 @@ class TypesafeEnumSetterMenuItem : public espgui::MenuItem { public: - TypesafeEnumSetterMenuItem(TEnum value, const ConfigWrapper &config) : m_value{value}, m_config{config} {} + TypesafeEnumSetterMenuItem(TEnum value, ConfigWrapper* config) : m_value{value}, m_config{config} {} std::string text() const override { @@ -50,12 +49,12 @@ public: void triggered() override { - if (auto result = configs.write_config(m_config, m_value); !result) + if (auto result = m_config->write(configs.nvs_handle_user, m_value); !result) BobbyErrorHandler{}.errorOccured(std::move(result).error()); } private: const TEnum m_value; - const ConfigWrapper &m_config; + ConfigWrapper* m_config; }; template @@ -63,13 +62,13 @@ class TypeSafeChangeMenu : public BobbyMenuDisplay { public: - TypeSafeChangeMenu(const ConfigWrapper &config) : m_config{config} + TypeSafeChangeMenu(ConfigWrapper* config) : m_config{config} { using namespace espgui; using namespace typesafeenumchangemenu; - constructMenuItem>(*m_config); + constructMenuItem>(m_config); constructMenuItem>(); - iterateEnum([&](TEnum enum_value, const auto &string_value){ + iterateEnum::iterate([&](TEnum enum_value, const auto &string_value){ constructMenuItem>(enum_value, m_config); }); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); @@ -77,7 +76,7 @@ public: std::string text() const override { - return fmt::format("Select {}", m_config.nvsName()); + return fmt::format("Select {}", m_config->nvsName()); } void back() override @@ -85,14 +84,15 @@ public: espgui::switchScreen(); } private: - const ConfigWrapper &m_config; + ConfigWrapper* m_config; }; +} // namespace typesafeenumchangemenu template class SwitchScreenTypeSafeChangeMenuItem : public espgui::MenuItem { public: - SwitchScreenTypeSafeChangeMenuItem(const ConfigWrapper &config) : m_config{config} {} + SwitchScreenTypeSafeChangeMenuItem(ConfigWrapper* config) : m_config{config} {} static constexpr const char *STATIC_TEXT = Ttext; std::string text() const override @@ -102,8 +102,8 @@ public: void triggered() override { - espgui::switchScreen>(*m_config); + espgui::switchScreen>(m_config); } private: - const ConfigWrapper &m_config; + ConfigWrapper* m_config; }; diff --git a/main/newsettings.h b/main/newsettings.h index ed2bb91..cbf8cc9 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -21,6 +21,7 @@ #include // local includes +#include "battery.h" #include "ledstrip.h" #include "unifiedmodelmode.h" #include "displays/lockscreen.h" @@ -253,7 +254,7 @@ public: struct { ConfigWrapper cellsSeries {12, DoReset, {}, "batteryCS" }; ConfigWrapper cellsParallel {10, DoReset, {}, "batteryCP" }; - ConfigWrapper cellType {0, DoReset, {}, "batteryType" }; + ConfigWrapper cellType {BatteryCellType::_22P, DoReset, {}, "batteryType" }; ConfigWrapper watthoursPerKilometer{25, DoReset, {}, "whkm" }; ConfigWrapper front30VoltCalibration{3000, DoReset, {}, "batF30VCal" }; ConfigWrapper back30VoltCalibration {3000, DoReset, {}, "batB30VCal" };