From f10cb18dc47901b8e6dacc41a611a1d4d12379db Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sat, 5 Feb 2022 21:35:19 +0100 Subject: [PATCH 1/4] WIP: Custom typesafe enum menu --- main/CMakeLists.txt | 4 +- main/actions/ledstripanimationactions.cpp | 8 +++ main/actions/ledstripanimationactions.h | 19 +++-- main/displays/menus/ledstripmenu.cpp | 4 +- .../menus/ledstripselectanimationmenu.cpp | 72 ------------------- .../menus/ledstripselectanimationmenu.h | 16 ----- .../displays/menus/typesafeenumchangemenu.cpp | 1 + main/displays/menus/typesafeenumchangemenu.h | 68 ++++++++++++++++++ 8 files changed, 94 insertions(+), 98 deletions(-) delete mode 100644 main/displays/menus/ledstripselectanimationmenu.cpp delete mode 100644 main/displays/menus/ledstripselectanimationmenu.h create mode 100644 main/displays/menus/typesafeenumchangemenu.cpp create mode 100644 main/displays/menus/typesafeenumchangemenu.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index f3bd8f6..eee51c8 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -105,7 +105,6 @@ set(headers displays/menus/invertmenu.h displays/menus/larsmmodesettingsmenu.h displays/menus/ledstripmenu.h - displays/menus/ledstripselectanimationmenu.h displays/menus/ledstripselectblinkmenu.h displays/menus/ledstripselectotamode.h displays/menus/limitssettingsmenu.h @@ -132,6 +131,7 @@ set(headers displays/menus/tempomatmodesettingsmenu.h displays/menus/timersmenu.h displays/menus/timesettingsmenu.h + displays/menus/typesafeenumchangemenu.h displays/menus/udpcloudsettingsmenu.h displays/menus/wifiapclientsmenu.h displays/menus/wifiapsettingsmenu.h @@ -336,7 +336,6 @@ set(sources displays/menus/invertmenu.cpp displays/menus/larsmmodesettingsmenu.cpp displays/menus/ledstripmenu.cpp - displays/menus/ledstripselectanimationmenu.cpp displays/menus/ledstripselectblinkmenu.cpp displays/menus/ledstripselectotamode.cpp displays/menus/limitssettingsmenu.cpp @@ -363,6 +362,7 @@ set(sources displays/menus/tempomatmodesettingsmenu.cpp displays/menus/timersmenu.cpp displays/menus/timesettingsmenu.cpp + displays/menus/typesafeenumchangemenu.cpp displays/menus/udpcloudsettingsmenu.cpp displays/menus/wifiapclientsmenu.cpp displays/menus/wifiapsettingsmenu.cpp diff --git a/main/actions/ledstripanimationactions.cpp b/main/actions/ledstripanimationactions.cpp index e69de29..4f39d63 100644 --- a/main/actions/ledstripanimationactions.cpp +++ b/main/actions/ledstripanimationactions.cpp @@ -0,0 +1,8 @@ +#include "ledstripanimationactions.h" +#ifdef FEATURE_LEDSTRIP +void LedStripSetAnimationAction::triggered() +{ + if (auto result = configs.write_config(configs.ledstrip.animationType, m_animation); !result) + BobbyErrorHandler{}.errorOccured(std::move(result).error()); +} +#endif diff --git a/main/actions/ledstripanimationactions.h b/main/actions/ledstripanimationactions.h index ce0ab14..8360721 100644 --- a/main/actions/ledstripanimationactions.h +++ b/main/actions/ledstripanimationactions.h @@ -11,16 +11,23 @@ #ifdef FEATURE_LEDSTRIP template +class LedStripSetAnimationActionStatic : public virtual espgui::ActionInterface +{ +public: + void triggered() override + { + if (auto result = configs.write_config(configs.ledstrip.animationType, type); !result) + BobbyErrorHandler{}.errorOccured(std::move(result).error()); + } +}; + class LedStripSetAnimationAction : public virtual espgui::ActionInterface { public: + LedStripSetAnimationAction(LedstripAnimation animation) : m_animation{animation} {}; void triggered() override; +private: + const LedstripAnimation m_animation; }; -template -void LedStripSetAnimationAction::triggered() -{ - if (auto result = configs.write_config(configs.ledstrip.animationType, type); !result) - BobbyErrorHandler{}.errorOccured(std::move(result).error()); -} #endif diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 7ef971b..9389193 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -18,7 +18,7 @@ #include "displays/menus/mainmenu.h" #include "globals.h" #include "ledstrip.h" -#include "ledstripselectanimationmenu.h" +#include "displays/menus/typesafeenumchangemenu.h" #include "ledstripselectblinkmenu.h" #include "bobbycheckbox.h" @@ -149,7 +149,7 @@ LedstripMenu::LedstripMenu() constructMenuItem, BobbyCheckbox, EnableLedstripStVOFrontlight>>(); constructMenuItem, BobbyCheckbox, EnableLedAnimationAccessor>>(); - constructMenuItem, espgui::SwitchScreenAction>>(); + constructMenuItem, espgui::SwitchScreenAction>>>(); constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); diff --git a/main/displays/menus/ledstripselectanimationmenu.cpp b/main/displays/menus/ledstripselectanimationmenu.cpp deleted file mode 100644 index 391a705..0000000 --- a/main/displays/menus/ledstripselectanimationmenu.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "ledstripselectanimationmenu.h" - -// Local includes -#include "actions/dummyaction.h" -#include "actions/ledstripanimationactions.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" -#include "ledstripdefines.h" -#include "ledstripmenu.h" -#include "newsettings.h" - -#ifdef FEATURE_LEDSTRIP -namespace { -constexpr char TEXT_SELECTANIMATION[] = "Select Animation"; -constexpr char TEXT_ANIMATION_DEFAULTRAINBOW[] = "Default Rainbow"; -constexpr char TEXT_ANIMATION_BETTERRAINBOW[] = "Better Rainbow"; -constexpr char TEXT_ANIMATION_SPEEDSYNCANIMATION[] = "Speed Sync"; -constexpr char TEXT_ANIMATION_CUSTOMCOLOR[] = "Custom Color"; -constexpr char TEXT_BACK[] = "Back"; - -class CurrentSelectedAnimationText : public virtual espgui::TextInterface -{ -public: - std::string text() const override; -}; - -} // namespace - -LedstripSelectAnimationMenu::LedstripSelectAnimationMenu() -{ - using namespace espgui; - - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); -} - -std::string LedstripSelectAnimationMenu::text() const -{ - return TEXT_SELECTANIMATION; -} - -void LedstripSelectAnimationMenu::back() -{ - espgui::switchScreen(); -} - -namespace { - -std::string CurrentSelectedAnimationText::text() const -{ - switch (configs.ledstrip.animationType.value) - { - case LedstripAnimation::DefaultRainbow: - return TEXT_ANIMATION_DEFAULTRAINBOW; - case LedstripAnimation::BetterRainbow: - return TEXT_ANIMATION_BETTERRAINBOW; - case LedstripAnimation::SpeedSync: - return TEXT_ANIMATION_SPEEDSYNCANIMATION; - case LedstripAnimation::CustomColor: - return TEXT_ANIMATION_CUSTOMCOLOR; - default: - return "Animation Unkown"; - } -} - -} // namespace -#endif diff --git a/main/displays/menus/ledstripselectanimationmenu.h b/main/displays/menus/ledstripselectanimationmenu.h deleted file mode 100644 index 334c25f..0000000 --- a/main/displays/menus/ledstripselectanimationmenu.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -// Local includes -#include "displays/bobbymenudisplay.h" - -#ifdef FEATURE_LEDSTRIP -class LedstripSelectAnimationMenu : public BobbyMenuDisplay -{ -public: - LedstripSelectAnimationMenu(); - - std::string text() const override; - - void back() override; -}; -#endif diff --git a/main/displays/menus/typesafeenumchangemenu.cpp b/main/displays/menus/typesafeenumchangemenu.cpp new file mode 100644 index 0000000..83e252b --- /dev/null +++ b/main/displays/menus/typesafeenumchangemenu.cpp @@ -0,0 +1 @@ +#include "typesafeenumchangemenu.h" diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h new file mode 100644 index 0000000..f2796aa --- /dev/null +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -0,0 +1,68 @@ +#pragma once + +// 3rdparty lib includes +#include +#include +#include + +// local includes +#include "globals.h" +#include "actions/dummyaction.h" +#include "actions/switchscreenaction.h" +#include "displays/bobbymenudisplay.h" + +namespace typesafeenumchangemenu { +constexpr char TEXT_BACK[] = "Back"; +} // namespace typesafeenumchangemenu + +template config> +class TypesafeEnumCurrentValueMenuItemText : + public espgui::TextInterface +{ + std::string text() const override + { + return toString(config.value); + } +}; + +template config> +class TypesafeEnumSetterMenuItem : + public espgui::MenuItem +{ + std::string text() const override + { + return toString(config.value); + } + + void triggered() override + { + + } +}; + +template config> +class TypeSafeChangeMenu : + public BobbyMenuDisplay +{ + TypeSafeChangeMenu() + { + using namespace espgui; + using namespace typesafeenumchangemenu; + constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem>(); + iterate([&](TEnum enum_value, const auto &string_value){ // this line needs to be fixed, help required + constructMenuItem>(enum_value); + }); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } +\ + std::string text() const override + { + return fmt::format("Select {}", config.nvsName()); + } +\ + void back() override + { + espgui::switchScreen(); + } +}; From 3322120464e9748f382fa32d29ba887ddcddd407 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 6 Feb 2022 17:52:56 +0100 Subject: [PATCH 2/4] Made some changes to the menus, still needs to be fixed --- main/displays/menus/ledstripmenu.cpp | 2 +- main/displays/menus/typesafeenumchangemenu.h | 51 ++++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 9389193..84c8c1c 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -149,7 +149,7 @@ LedstripMenu::LedstripMenu() constructMenuItem, BobbyCheckbox, EnableLedstripStVOFrontlight>>(); constructMenuItem, BobbyCheckbox, EnableLedAnimationAccessor>>(); - constructMenuItem, espgui::SwitchScreenAction>>>(); + constructMenuItem, espgui::SwitchScreenActionvoid {})>>>>(); // this needs to be fixed constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h index f2796aa..566c9d9 100644 --- a/main/displays/menus/typesafeenumchangemenu.h +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -10,59 +10,80 @@ #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" #include "displays/bobbymenudisplay.h" +#include "bobbyerrorhandler.h" namespace typesafeenumchangemenu { constexpr char TEXT_BACK[] = "Back"; } // namespace typesafeenumchangemenu -template config> -class TypesafeEnumCurrentValueMenuItemText : - public espgui::TextInterface +template +class TypesafeEnumCurrentValueMenuItem : + public espgui::MenuItem { +public: + TypesafeEnumCurrentValueMenuItem(ConfigWrapper &config) : m_config{config} {} std::string text() const override { - return toString(config.value); + return toString(m_config.value); } + void triggered() override {} + + int color() const override + { + return TFT_DARKGREY; + } +private: + const ConfigWrapper &m_config; }; -template config> +template class TypesafeEnumSetterMenuItem : public espgui::MenuItem { +public: + TypesafeEnumSetterMenuItem(TEnum value, ConfigWrapper &config) : m_value{value}, m_config{config} {} + std::string text() const override { - return toString(config.value); + return toString(m_value); } void triggered() override { - + if (auto result = configs.write_config(m_config, m_value); !result) + BobbyErrorHandler{}.errorOccured(std::move(result).error()); } +private: + const TEnum m_value; + const ConfigWrapper &m_config; }; -template config> +template class TypeSafeChangeMenu : public BobbyMenuDisplay { - TypeSafeChangeMenu() +public: + TypeSafeChangeMenu(ConfigWrapper &config, TIterator iterator) : m_config{config} { using namespace espgui; using namespace typesafeenumchangemenu; - constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem>(m_config); constructMenuItem>(); - iterate([&](TEnum enum_value, const auto &string_value){ // this line needs to be fixed, help required - constructMenuItem>(enum_value); + iterator([&](TEnum enum_value, const auto &string_value){ + constructMenuItem>(enum_value, m_config); }); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } -\ + std::string text() const override { - return fmt::format("Select {}", config.nvsName()); + return fmt::format("Select {}", m_config.nvsName()); } -\ + void back() override { espgui::switchScreen(); } +private: + const ConfigWrapper &m_config; }; From a87599c7ea15d1e05d0299b6685ae3db9a965b75 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 8 Feb 2022 07:54:19 +0100 Subject: [PATCH 3/4] Fixed iterate problem, now the config is the problem --- main/CMakeLists.txt | 1 + main/battery.h | 6 ++-- main/bobbyquickactions.h | 4 +-- main/bobbytypesafeenum.h | 21 +++++++++++++ main/displays/menus/ledstripmenu.cpp | 2 +- main/displays/menus/manageprofilesmenu.h | 6 ++-- main/displays/menus/typesafeenumchangemenu.h | 32 ++++++++++++++++---- main/handbremse.h | 6 ++-- main/ledstrip.h | 6 ++-- 9 files changed, 63 insertions(+), 21 deletions(-) create mode 100644 main/bobbytypesafeenum.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index eee51c8..15c9ab4 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -42,6 +42,7 @@ set(headers bobbycheckbox.h bobbyerrorhandler.h bobbyquickactions.h + bobbytypesafeenum.h buildserver.h can.h changevaluedisplay_bluetoothmode.h diff --git a/main/battery.h b/main/battery.h index e59a00a..5eb2f3a 100644 --- a/main/battery.h +++ b/main/battery.h @@ -3,8 +3,8 @@ // system includes #include -// 3rdparty lib includes -#include +// local includes +#include #define BatteryCellTypeValues(x) \ x(_22P) \ @@ -13,7 +13,7 @@ x(VTC5) \ x(BAK_25R) \ x(HE4) -DECLARE_TYPESAFE_ENUM(BatteryCellType, : uint8_t, BatteryCellTypeValues) +DECLARE_BOBBYTYPESAFE_ENUM(BatteryCellType, : uint8_t, BatteryCellTypeValues) float getBatteryPercentage(float batVoltage, BatteryCellType cellType); diff --git a/main/bobbyquickactions.h b/main/bobbyquickactions.h index 7b9f17d..74d7fac 100644 --- a/main/bobbyquickactions.h +++ b/main/bobbyquickactions.h @@ -1,11 +1,11 @@ #pragma once // 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_TYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) +DECLARE_BOBBYTYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) namespace quickactions { diff --git a/main/bobbytypesafeenum.h b/main/bobbytypesafeenum.h new file mode 100644 index 0000000..ff049b5 --- /dev/null +++ b/main/bobbytypesafeenum.h @@ -0,0 +1,21 @@ +#pragma once + +// 3rdparty lib includes +#include + +template +struct iterateEnum; + +#define DECLARE_TYPESAFE_ENUM_TYPE(Name) \ + template<> \ + struct iterateEnum { \ + template \ + static void iterate(T&&cb) \ + { \ + 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/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 84c8c1c..d3165a2 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -149,7 +149,7 @@ LedstripMenu::LedstripMenu() constructMenuItem, BobbyCheckbox, EnableLedstripStVOFrontlight>>(); constructMenuItem, BobbyCheckbox, EnableLedAnimationAccessor>>(); - constructMenuItem, espgui::SwitchScreenActionvoid {})>>>>(); // this needs to be fixed + constructMenuItem>(&configs.ledstrip.animationType); constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); diff --git a/main/displays/menus/manageprofilesmenu.h b/main/displays/menus/manageprofilesmenu.h index 500645d..b9a57e1 100644 --- a/main/displays/menus/manageprofilesmenu.h +++ b/main/displays/menus/manageprofilesmenu.h @@ -1,9 +1,7 @@ #pragma once -// 3rdparty lib includes -#include - // local includes +#include "bobbytypesafeenum.h" #include "displays/bobbymenudisplay.h" #include "modes/ignoreinputmode.h" @@ -12,7 +10,7 @@ x(Copy) \ x(Swap) \ x(__END__) -DECLARE_TYPESAFE_ENUM(Actions, : uint8_t, ActionValues) +DECLARE_BOBBYTYPESAFE_ENUM(Actions, : uint8_t, ActionValues) class ManageProfilesMenu : public BobbyMenuDisplay { diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h index 566c9d9..027f60c 100644 --- a/main/displays/menus/typesafeenumchangemenu.h +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -21,7 +21,7 @@ class TypesafeEnumCurrentValueMenuItem : public espgui::MenuItem { public: - TypesafeEnumCurrentValueMenuItem(ConfigWrapper &config) : m_config{config} {} + TypesafeEnumCurrentValueMenuItem(const ConfigWrapper &config) : m_config{config} {} std::string text() const override { return toString(m_config.value); @@ -41,7 +41,7 @@ class TypesafeEnumSetterMenuItem : public espgui::MenuItem { public: - TypesafeEnumSetterMenuItem(TEnum value, ConfigWrapper &config) : m_value{value}, m_config{config} {} + TypesafeEnumSetterMenuItem(TEnum value, const ConfigWrapper &config) : m_value{value}, m_config{config} {} std::string text() const override { @@ -58,18 +58,18 @@ private: const ConfigWrapper &m_config; }; -template +template class TypeSafeChangeMenu : public BobbyMenuDisplay { public: - TypeSafeChangeMenu(ConfigWrapper &config, TIterator iterator) : m_config{config} + TypeSafeChangeMenu(const ConfigWrapper &config) : m_config{config} { using namespace espgui; using namespace typesafeenumchangemenu; - constructMenuItem>(m_config); + constructMenuItem>(*m_config); constructMenuItem>(); - iterator([&](TEnum enum_value, const auto &string_value){ + iterateEnum([&](TEnum enum_value, const auto &string_value){ constructMenuItem>(enum_value, m_config); }); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); @@ -87,3 +87,23 @@ public: private: const ConfigWrapper &m_config; }; + +template +class SwitchScreenTypeSafeChangeMenuItem : public espgui::MenuItem +{ +public: + SwitchScreenTypeSafeChangeMenuItem(const ConfigWrapper &config) : m_config{config} {} + + static constexpr const char *STATIC_TEXT = Ttext; + std::string text() const override + { + return Ttext; + } + + void triggered() override + { + espgui::switchScreen>(*m_config); + } +private: + const ConfigWrapper &m_config; +}; diff --git a/main/handbremse.h b/main/handbremse.h index 01ab708..617e329 100644 --- a/main/handbremse.h +++ b/main/handbremse.h @@ -4,14 +4,16 @@ #include // 3rdparty lib includes -#include #include +// local includes +#include "bobbytypesafeenum.h" + #define HandbremseModeValues(x) \ x(MOSFETS_OFF) \ x(OPENMODE) \ x(SPEED_0) -DECLARE_TYPESAFE_ENUM(HandbremseMode, : uint8_t, HandbremseModeValues) +DECLARE_BOBBYTYPESAFE_ENUM(HandbremseMode, : uint8_t, HandbremseModeValues) namespace handbremse { diff --git a/main/ledstrip.h b/main/ledstrip.h index 08f0483..c1214ca 100644 --- a/main/ledstrip.h +++ b/main/ledstrip.h @@ -4,24 +4,24 @@ #include // 3rdparty lib includes -#include #include // local includes +#include "bobbytypesafeenum.h" #include "ledstripdefines.h" #define OtaAnimationModesValues(x) \ x(None) \ x(GreenProgressBar) \ x(ColorChangeAll) -DECLARE_TYPESAFE_ENUM(OtaAnimationModes, : uint8_t, OtaAnimationModesValues) +DECLARE_BOBBYTYPESAFE_ENUM(OtaAnimationModes, : uint8_t, OtaAnimationModesValues) #define LedstripAnimationValues(x) \ x(DefaultRainbow) \ x(BetterRainbow) \ x(SpeedSync) \ x(CustomColor) -DECLARE_TYPESAFE_ENUM(LedstripAnimation, : uint8_t, LedstripAnimationValues) +DECLARE_BOBBYTYPESAFE_ENUM(LedstripAnimation, : uint8_t, LedstripAnimationValues) #ifdef FEATURE_LEDSTRIP enum Bobbycar_Side From e52cf82218a0b2a2cd879b49209b7d54b9307838 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 8 Feb 2022 16:49:04 +0100 Subject: [PATCH 4/4] Converted menus to a better menu for typesafe enums --- main/CMakeLists.txt | 4 - main/bobbyquickactions.h | 4 +- main/bobbytypesafeenum.h | 8 +- main/configutils_bobby.h | 2 + main/configwrapper_bobby.cpp | 1 + main/displays/menus/batterymenu.cpp | 22 ++---- main/displays/menus/handbremssettingsmenu.cpp | 18 +---- main/displays/menus/ledstripmenu.cpp | 6 +- main/displays/menus/manageprofilesmenu.h | 6 +- main/displays/menus/selectbatterytypemenu.cpp | 73 ------------------- main/displays/menus/selectbatterytypemenu.h | 14 ---- main/displays/menus/typesafeenumchangemenu.h | 30 ++++---- main/newsettings.h | 3 +- 13 files changed, 41 insertions(+), 150 deletions(-) delete mode 100644 main/displays/menus/selectbatterytypemenu.cpp delete mode 100644 main/displays/menus/selectbatterytypemenu.h 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" };