From f50f6eaf1ea61d56b5782adbe430c33125f124c3 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 29 Dec 2021 18:09:57 +0100 Subject: [PATCH 1/6] ADC calib in newsettings --- config_allfeatures.cmake | 4 -- config_comred.cmake | 4 -- config_feedc0de.cmake | 4 -- config_greyhash.cmake | 4 -- config_mick.cmake | 4 -- config_nofeatures.cmake | 4 -- config_peter.cmake | 4 -- main/accessors/settingsaccessors.h | 20 +++++-- main/bobbybuttons.cpp | 73 ++++++++++++------------- main/bobbybuttons.h | 6 ++ main/displays/bobbychangevaluedisplay.h | 50 ++--------------- main/displays/bobbydisplay.cpp | 50 ++--------------- main/displays/bobbydisplaywithtitle.cpp | 50 ++--------------- main/displays/bobbygraphdisplay.h | 50 ++--------------- main/displays/bobbymenudisplay.cpp | 50 ++--------------- main/displays/bobbysplitgraphdisplay.h | 50 ++--------------- main/displays/calibratedisplay.cpp | 17 +++--- main/dpad5wire_2out.h | 3 +- main/newsettings.h | 46 +++++++++++----- main/potis.cpp | 19 ++++--- main/presets.h | 8 --- main/settings.h | 13 ----- 22 files changed, 138 insertions(+), 395 deletions(-) diff --git a/config_allfeatures.cmake b/config_allfeatures.cmake index 627b772..2526881 100644 --- a/config_allfeatures.cmake +++ b/config_allfeatures.cmake @@ -80,10 +80,6 @@ set(BOBBYCAR_BUILDFLAGS # -DDPAD_6WIRESW_DEBUG -DFEATURE_GSCHISSENE_DIODE - -DDEFAULT_GASMIN=842 - -DDEFAULT_GASMAX=2480 - -DDEFAULT_BREMSMIN=826 - -DDEFAULT_BREMSMAX=2502 -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/config_comred.cmake b/config_comred.cmake index 4167af5..dbc51d7 100644 --- a/config_comred.cmake +++ b/config_comred.cmake @@ -80,10 +80,6 @@ set(BOBBYCAR_BUILDFLAGS # -DDPAD_6WIRESW_DEBUG -DFEATURE_GSCHISSENE_DIODE - -DDEFAULT_GASMIN=842 - -DDEFAULT_GASMAX=2480 - -DDEFAULT_BREMSMIN=826 - -DDEFAULT_BREMSMAX=2502 -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/config_feedc0de.cmake b/config_feedc0de.cmake index 23ea111..438c036 100644 --- a/config_feedc0de.cmake +++ b/config_feedc0de.cmake @@ -61,10 +61,6 @@ set(BOBBYCAR_BUILDFLAGS -DDPAD_5WIRESW_QUICKACTION_DOWN=3 -DDPAD_5WIRESW_QUICKACTION_UP=6 # -DDPAD_5WIRESW_DEBUG - -DDEFAULT_GASMIN=200 - -DDEFAULT_GASMAX=1070 - -DDEFAULT_BREMSMIN=270 - -DDEFAULT_BREMSMAX=1800 -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/config_greyhash.cmake b/config_greyhash.cmake index 3055769..76582e3 100644 --- a/config_greyhash.cmake +++ b/config_greyhash.cmake @@ -57,10 +57,6 @@ set(BOBBYCAR_BUILDFLAGS -DDPAD_5WIRESW_PROFILE2=7 -DDPAD_5WIRESW_PROFILE3=3 # -DDPAD_5WIRESW_DEBUG - -DDEFAULT_GASMIN=842 - -DDEFAULT_GASMAX=2480 - -DDEFAULT_BREMSMIN=826 - -DDEFAULT_BREMSMAX=2502 # -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/config_mick.cmake b/config_mick.cmake index 2e04bec..1380aff 100644 --- a/config_mick.cmake +++ b/config_mick.cmake @@ -57,10 +57,6 @@ set(BOBBYCAR_BUILDFLAGS # -DDPAD_5WIRESW_PROFILE2=7 # -DDPAD_5WIRESW_PROFILE3=3 # -DDPAD_5WIRESW_DEBUG - -DDEFAULT_GASMIN=184 - -DDEFAULT_GASMAX=1329 - -DDEFAULT_BREMSMIN=28 - -DDEFAULT_BREMSMAX=500 -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/config_nofeatures.cmake b/config_nofeatures.cmake index d2943ff..e9a61cd 100644 --- a/config_nofeatures.cmake +++ b/config_nofeatures.cmake @@ -80,10 +80,6 @@ set(BOBBYCAR_BUILDFLAGS # -DDPAD_6WIRESW_DEBUG # -DFEATURE_GSCHISSENE_DIODE - -DDEFAULT_GASMIN=842 - -DDEFAULT_GASMAX=2480 - -DDEFAULT_BREMSMIN=826 - -DDEFAULT_BREMSMAX=2502 # -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/config_peter.cmake b/config_peter.cmake index e616ae9..260d561 100644 --- a/config_peter.cmake +++ b/config_peter.cmake @@ -61,10 +61,6 @@ set(BOBBYCAR_BUILDFLAGS -DDPAD_5WIRESW_QUICKACTION_DOWN=3 -DDPAD_5WIRESW_QUICKACTION_UP=6 # -DDPAD_5WIRESW_DEBUG - -DDEFAULT_GASMIN=842 - -DDEFAULT_GASMAX=2480 - -DDEFAULT_BREMSMIN=826 - -DDEFAULT_BREMSMAX=2502 -DFEATURE_BLE # -DFEATURE_BLUETOOTH # -DFEATURE_BMS diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index d393361..c68f33d 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -14,6 +14,14 @@ struct RefAccessorSaveSettings : public virtual espgui::RefAccessor { void setValue(T value) override { espgui::RefAccessor::setValue(value); saveSettings(); }; }; +template +struct NewSettingsAccessor : public virtual espgui::AccessorInterface +{ + virtual ConfigWrapper& getConfig() const = 0; + + T getValue() const override { return getConfig().value; } + void setValue(T value) override { configs.write_config(getConfig(), value); } +}; // Bms #ifdef FEATURE_BMS @@ -150,13 +158,13 @@ struct CanReceiveTimeoutAccessor : public RefAccessorSaveSettings { int #endif // Input devices -struct SampleCountAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.sampleCount; } }; -struct GasMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMin; } }; -struct GasMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMax; } }; -struct BremsMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMin; } }; -struct BremsMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMax; } }; +struct SampleCountAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.sampleCount; } }; +struct GasMinAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.gasMin; } }; +struct GasMaxAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.gasMax; } }; +struct BremsMinAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.bremsMin; } }; +struct BremsMaxAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.bremsMax; } }; #if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW) -struct DPadDebounceAccessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.boardcomputerHardware.dpadDebounce; } }; +struct DPadDebounceAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.dpadDebounce; } }; #endif #ifdef FEATURE_GAMETRAK struct GametrakXMinAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakXMin; } }; diff --git a/main/bobbybuttons.cpp b/main/bobbybuttons.cpp index 58318a0..4226e04 100644 --- a/main/bobbybuttons.cpp +++ b/main/bobbybuttons.cpp @@ -1,50 +1,29 @@ #include "bobbybuttons.h" -void BobbyButtons::rawButtonPressed(uint8_t button) +std::optional translateRawButton(uint8_t button) { - //Base::rawButtonPressed(button); switch (button) { using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; + case 0: return Button::Left; + case 1: return Button::Right; + case 2: return Button::Up; + case 3: return Button::Down; + case 4: return Button(BobbyButton::Profile0); + case 5: return Button(BobbyButton::Profile1); + case 6: return Button(BobbyButton::Profile2); + case 7: return Button(BobbyButton::Profile3); + case 8: return Button(BobbyButton::Left2); + case 9: return Button(BobbyButton::Right2); + case 10: return Button(BobbyButton::Up2); + case 11: return Button(BobbyButton::Down2); } + + return std::nullopt; } -void BobbyButtons::rawButtonReleased(uint8_t button) +void buttonPressedCommon(espgui::Button button) { - //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } -} - -void BobbyButtons::buttonPressed(espgui::Button button) -{ - //Base::buttonPressed(button); switch (BobbyButton(button)) { case BobbyButton::Profile0: /* TODO */ break; @@ -59,6 +38,26 @@ void BobbyButtons::buttonPressed(espgui::Button button) } } +void BobbyButtons::rawButtonPressed(uint8_t button) +{ + //Base::rawButtonPressed(button); + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); +} + +void BobbyButtons::rawButtonReleased(uint8_t button) +{ + //Base::rawButtonReleased(button); + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); +} + +void BobbyButtons::buttonPressed(espgui::Button button) +{ + //Base::buttonPressed(button); + buttonPressedCommon(button); +} + void BobbyButtons::buttonReleased(espgui::Button button) { //Base::buttonReleased(button); diff --git a/main/bobbybuttons.h b/main/bobbybuttons.h index 145b792..7c7ad8f 100644 --- a/main/bobbybuttons.h +++ b/main/bobbybuttons.h @@ -1,5 +1,8 @@ #pragma once +// system includes +#include + // 3rdparty lib includes #include "buttonsinterface.h" @@ -17,6 +20,9 @@ enum BobbyButton Back = espgui::Button::Left }; +std::optional translateRawButton(uint8_t button); +void buttonPressedCommon(espgui::Button button); + class BobbyButtons : public virtual espgui::ButtonsInterface { public: diff --git a/main/displays/bobbychangevaluedisplay.h b/main/displays/bobbychangevaluedisplay.h index ea6d504..6f7dcb1 100644 --- a/main/displays/bobbychangevaluedisplay.h +++ b/main/displays/bobbychangevaluedisplay.h @@ -23,63 +23,23 @@ template void BobbyChangeValueDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); - switch (button) - { - using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); } template void BobbyChangeValueDisplay::rawButtonReleased(uint8_t button) { //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); } template void BobbyChangeValueDisplay::buttonPressed(espgui::Button button) { Base::buttonPressed(button); - - switch (BobbyButton(button)) - { - case BobbyButton::Profile0: /* TODO */ break; - case BobbyButton::Profile1: /* TODO */ break; - case BobbyButton::Profile2: /* TODO */ break; - case BobbyButton::Profile3: /* TODO */ break; - case BobbyButton::Left2: /* TODO */ break; - case BobbyButton::Right2: /* TODO */ break; - case BobbyButton::Up2: /* TODO */ break; - case BobbyButton::Down2: /* TODO */ break; - default:; - } + buttonPressedCommon(button); } template diff --git a/main/displays/bobbydisplay.cpp b/main/displays/bobbydisplay.cpp index 09b0c50..79c0f64 100644 --- a/main/displays/bobbydisplay.cpp +++ b/main/displays/bobbydisplay.cpp @@ -3,61 +3,21 @@ void BobbyDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); - switch (button) - { - using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); } void BobbyDisplay::rawButtonReleased(uint8_t button) { //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); } void BobbyDisplay::buttonPressed(espgui::Button button) { //Base::buttonPressed(button); - - switch (BobbyButton(button)) - { - case BobbyButton::Profile0: /* TODO */ break; - case BobbyButton::Profile1: /* TODO */ break; - case BobbyButton::Profile2: /* TODO */ break; - case BobbyButton::Profile3: /* TODO */ break; - case BobbyButton::Left2: /* TODO */ break; - case BobbyButton::Right2: /* TODO */ break; - case BobbyButton::Up2: /* TODO */ break; - case BobbyButton::Down2: /* TODO */ break; - default:; - } + buttonPressedCommon(button); } void BobbyDisplay::buttonReleased(espgui::Button button) diff --git a/main/displays/bobbydisplaywithtitle.cpp b/main/displays/bobbydisplaywithtitle.cpp index 088ea63..dfcf76b 100644 --- a/main/displays/bobbydisplaywithtitle.cpp +++ b/main/displays/bobbydisplaywithtitle.cpp @@ -3,61 +3,21 @@ void BobbyDisplayWithTitle::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); - switch (button) - { - using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); } void BobbyDisplayWithTitle::rawButtonReleased(uint8_t button) { //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); } void BobbyDisplayWithTitle::buttonPressed(espgui::Button button) { //Base::buttonPressed(button); - - switch (BobbyButton(button)) - { - case BobbyButton::Profile0: /* TODO */ break; - case BobbyButton::Profile1: /* TODO */ break; - case BobbyButton::Profile2: /* TODO */ break; - case BobbyButton::Profile3: /* TODO */ break; - case BobbyButton::Left2: /* TODO */ break; - case BobbyButton::Right2: /* TODO */ break; - case BobbyButton::Up2: /* TODO */ break; - case BobbyButton::Down2: /* TODO */ break; - default:; - } + buttonPressedCommon(button); } void BobbyDisplayWithTitle::buttonReleased(espgui::Button button) diff --git a/main/displays/bobbygraphdisplay.h b/main/displays/bobbygraphdisplay.h index 6eedcbc..66fefd8 100644 --- a/main/displays/bobbygraphdisplay.h +++ b/main/displays/bobbygraphdisplay.h @@ -23,63 +23,23 @@ template void BobbyGraphDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); - switch (button) - { - using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); } template void BobbyGraphDisplay::rawButtonReleased(uint8_t button) { //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); } template void BobbyGraphDisplay::buttonPressed(espgui::Button button) { Base::buttonPressed(button); - - switch (BobbyButton(button)) - { - case BobbyButton::Profile0: /* TODO */ break; - case BobbyButton::Profile1: /* TODO */ break; - case BobbyButton::Profile2: /* TODO */ break; - case BobbyButton::Profile3: /* TODO */ break; - case BobbyButton::Left2: /* TODO */ break; - case BobbyButton::Right2: /* TODO */ break; - case BobbyButton::Up2: /* TODO */ break; - case BobbyButton::Down2: /* TODO */ break; - default:; - } + buttonPressedCommon(button); } template diff --git a/main/displays/bobbymenudisplay.cpp b/main/displays/bobbymenudisplay.cpp index 91adb16..a1d3ab3 100644 --- a/main/displays/bobbymenudisplay.cpp +++ b/main/displays/bobbymenudisplay.cpp @@ -3,61 +3,21 @@ void BobbyMenuDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); - switch (button) - { - using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); } void BobbyMenuDisplay::rawButtonReleased(uint8_t button) { //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); } void BobbyMenuDisplay::buttonPressed(espgui::Button button) { Base::buttonPressed(button); - - switch (BobbyButton(button)) - { - case BobbyButton::Profile0: /* TODO */ break; - case BobbyButton::Profile1: /* TODO */ break; - case BobbyButton::Profile2: /* TODO */ break; - case BobbyButton::Profile3: /* TODO */ break; - case BobbyButton::Left2: /* TODO */ break; - case BobbyButton::Right2: /* TODO */ break; - case BobbyButton::Up2: /* TODO */ break; - case BobbyButton::Down2: /* TODO */ break; - default:; - } + buttonPressedCommon(button); } void BobbyMenuDisplay::buttonReleased(espgui::Button button) diff --git a/main/displays/bobbysplitgraphdisplay.h b/main/displays/bobbysplitgraphdisplay.h index 45c7fab..29a9c73 100644 --- a/main/displays/bobbysplitgraphdisplay.h +++ b/main/displays/bobbysplitgraphdisplay.h @@ -23,63 +23,23 @@ template void BobbySplitGraphDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); - switch (button) - { - using espgui::Button; - case 0: buttonPressed(Button::Left); break; - case 1: buttonPressed(Button::Right); break; - case 2: buttonPressed(Button::Up); break; - case 3: buttonPressed(Button::Down); break; - case 4: buttonPressed(Button(BobbyButton::Profile0)); break; - case 5: buttonPressed(Button(BobbyButton::Profile1)); break; - case 6: buttonPressed(Button(BobbyButton::Profile2)); break; - case 7: buttonPressed(Button(BobbyButton::Profile3)); break; - case 8: buttonPressed(Button(BobbyButton::Left2)); break; - case 9: buttonPressed(Button(BobbyButton::Right2)); break; - case 10: buttonPressed(Button(BobbyButton::Up2)); break; - case 11: buttonPressed(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); } template void BobbySplitGraphDisplay::rawButtonReleased(uint8_t button) { //Base::rawButtonReleased(button); - switch (button) - { - using espgui::Button; - case 0: buttonReleased(Button::Left); break; - case 1: buttonReleased(Button::Right); break; - case 2: buttonReleased(Button::Up); break; - case 3: buttonReleased(Button::Down); break; - case 4: buttonReleased(Button(BobbyButton::Profile0)); break; - case 5: buttonReleased(Button(BobbyButton::Profile1)); break; - case 6: buttonReleased(Button(BobbyButton::Profile2)); break; - case 7: buttonReleased(Button(BobbyButton::Profile3)); break; - case 8: buttonReleased(Button(BobbyButton::Left2)); break; - case 9: buttonReleased(Button(BobbyButton::Right2)); break; - case 10: buttonReleased(Button(BobbyButton::Up2)); break; - case 11: buttonReleased(Button(BobbyButton::Down2)); break; - } + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); } template void BobbySplitGraphDisplay::buttonPressed(espgui::Button button) { Base::buttonPressed(button); - - switch (BobbyButton(button)) - { - case BobbyButton::Profile0: /* TODO */ break; - case BobbyButton::Profile1: /* TODO */ break; - case BobbyButton::Profile2: /* TODO */ break; - case BobbyButton::Profile3: /* TODO */ break; - case BobbyButton::Left2: /* TODO */ break; - case BobbyButton::Right2: /* TODO */ break; - case BobbyButton::Up2: /* TODO */ break; - case BobbyButton::Down2: /* TODO */ break; - default:; - } + buttonPressedCommon(button); } template diff --git a/main/displays/calibratedisplay.cpp b/main/displays/calibratedisplay.cpp index 7d94e18..59b845a 100644 --- a/main/displays/calibratedisplay.cpp +++ b/main/displays/calibratedisplay.cpp @@ -8,6 +8,7 @@ #include "displays/menus/mainmenu.h" #include "displays/statusdisplay.h" #include "displays/menus/boardcomputerhardwaresettingsmenu.h" +#include "newsettings.h" CalibrateDisplay::CalibrateDisplay(bool bootup) : m_bootup{bootup} @@ -274,16 +275,16 @@ void CalibrateDisplay::buttonPressed(espgui::Button button) void CalibrateDisplay::copyFromSettings() { - m_gasMin = settings.boardcomputerHardware.gasMin; - m_gasMax = settings.boardcomputerHardware.gasMax; - m_bremsMin = settings.boardcomputerHardware.bremsMin; - m_bremsMax = settings.boardcomputerHardware.bremsMax; + m_gasMin = configs.gasMin.value; + m_gasMax = configs.gasMax.value; + m_bremsMin = configs.bremsMin.value; + m_bremsMax = configs.bremsMax.value; } void CalibrateDisplay::copyToSettings() { - settings.boardcomputerHardware.gasMin = m_gasMin; - settings.boardcomputerHardware.gasMax = m_gasMax; - settings.boardcomputerHardware.bremsMin = m_bremsMin; - settings.boardcomputerHardware.bremsMax = m_bremsMax; + configs.write_config(configs.gasMin, m_gasMin); + configs.write_config(configs.gasMax, m_gasMax); + configs.write_config(configs.bremsMin, m_bremsMin); + configs.write_config(configs.bremsMax, m_bremsMax); } diff --git a/main/dpad5wire_2out.h b/main/dpad5wire_2out.h index 34c1aff..db41d9d 100644 --- a/main/dpad5wire_2out.h +++ b/main/dpad5wire_2out.h @@ -14,6 +14,7 @@ #include "buttons.h" #include "types.h" #include "globals.h" +#include "newsettings.h" namespace { namespace dpad5wire_2out { @@ -167,7 +168,7 @@ void update() const auto now = espchrono::millis_clock::now(); - const std::chrono::milliseconds dpadDebounce{settings.boardcomputerHardware.dpadDebounce}; + const std::chrono::milliseconds dpadDebounce{configs.dpadDebounce.value}; if (lastState.up != newState.up && now - debounceUp > dpadDebounce) { diff --git a/main/newsettings.h b/main/newsettings.h index bf7ff56..f5f4a92 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -83,10 +83,10 @@ class ConfigContainer using mac_t = wifi_stack::mac_t; public: - // default allowReset constraints nvsName - ConfigWrapper> baseMacAddressOverride{std::nullopt, NoReset, {}, "baseMacAddrOver" }; - ConfigWrapper hostname {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "hostname" }; - ConfigWrapper wifiStaEnabled {true, DoReset, {}, "wifiStaEnabled" }; + // default allowReset constraints nvsName + ConfigWrapper> baseMacAddressOverride{std::nullopt, NoReset, {}, "baseMacAddrOver" }; + ConfigWrapper hostname {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "hostname" }; + ConfigWrapper wifiStaEnabled {true, DoReset, {}, "wifiStaEnabled" }; std::array wifi_configs { WiFiConfig {"wifi_ssid0", "wifi_key0", "wifi_usestatic0", "wifi_static_ip0", "wifi_stati_sub0", "wifi_stat_gate0", "wifi_usestadns0", "wifi_stat_dnsA0", "wifi_stat_dnsB0", "wifi_stat_dnsC0"}, WiFiConfig {"wifi_ssid1", "wifi_key1", "wifi_usestatic1", "wifi_static_ip1", "wifi_stati_sub1", "wifi_stat_gate1", "wifi_usestadns1", "wifi_stat_dnsA1", "wifi_stat_dnsB1", "wifi_stat_dnsC1"}, @@ -99,22 +99,30 @@ public: WiFiConfig {"wifi_ssid8", "wifi_key8", "wifi_usestatic8", "wifi_static_ip8", "wifi_stati_sub8", "wifi_stat_gate8", "wifi_usestadns8", "wifi_stat_dnsA8", "wifi_stat_dnsB8", "wifi_stat_dnsC8"}, WiFiConfig {"wifi_ssid9", "wifi_key9", "wifi_usestatic9", "wifi_static_ip9", "wifi_stati_sub9", "wifi_stat_gate9", "wifi_usestadns9", "wifi_stat_dnsA9", "wifi_stat_dnsB9", "wifi_stat_dnsC9"} }; - ConfigWrapper wifiStaMinRssi {-90, DoReset, {}, "wifiStaMinRssi" }; + ConfigWrapper wifiStaMinRssi {-90, DoReset, {}, "wifiStaMinRssi" }; - ConfigWrapper wifiApEnabled {true, DoReset, {}, "wifiApEnabled" }; - ConfigWrapper wifiApName {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "wifiApName" }; + ConfigWrapper wifiApEnabled {true, DoReset, {}, "wifiApEnabled" }; + ConfigWrapper wifiApName {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "wifiApName" }; ConfigWrapper wifiApKey {"Passwort_123", DoReset, StringOr>, "wifiApKey" }; - ConfigWrapper wifiApChannel {1, DoReset, {}, "wifiApChannel" }; - ConfigWrapper wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" }; + ConfigWrapper wifiApChannel {1, DoReset, {}, "wifiApChannel" }; + ConfigWrapper wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" }; - ConfigWrapper timeServerEnabled {false, DoReset, {}, "timeServerEnabl" }; - ConfigWrapper timeServer {"europe.pool.ntp.org", NoReset, StringMaxSize<64>, "timeServer" }; - ConfigWrapper timeSyncMode {SNTP_SYNC_MODE_IMMED, NoReset, {}, "timeSyncMode" }; + ConfigWrapper timeServerEnabled {false, DoReset, {}, "timeServerEnabl" }; + ConfigWrapper timeServer {"europe.pool.ntp.org", NoReset, StringMaxSize<64>, "timeServer" }; + ConfigWrapper timeSyncMode {SNTP_SYNC_MODE_IMMED, NoReset, {}, "timeSyncMode" }; ConfigWrapper timeSyncInterval{espchrono::milliseconds32{CONFIG_LWIP_SNTP_UPDATE_DELAY}, NoReset, MinTimeSyncInterval, "timeSyncInterva" }; - ConfigWrapper timezoneOffset{espchrono::minutes32{60}, DoReset, {}, "timezoneOffset" }; // MinMaxValue - ConfigWrappertimeDst{espchrono::DayLightSavingMode::EuropeanSummerTime, DoReset, {}, "time_dst" }; + ConfigWrapper timezoneOffset{espchrono::minutes32{60}, DoReset, {}, "timezoneOffset" }; // MinMaxValue + ConfigWrappertimeDst{espchrono::DayLightSavingMode::EuropeanSummerTime, DoReset, {}, "time_dst" }; - ConfigWrapper canBusResetOnError {false, DoReset, {}, "canBusRstErr" }; + ConfigWrapper canBusResetOnError {false, DoReset, {}, "canBusRstErr" }; + + ConfigWrapper sampleCount {50, DoReset, {}, "sampleCount" }; + ConfigWrapper gasMin {0, DoReset, MinMaxValue, "gasMin" }; + ConfigWrapper gasMax {4095, DoReset, MinMaxValue, "gasMax" }; + ConfigWrapper bremsMin {0, DoReset, MinMaxValue, "bremsMin" }; + ConfigWrapper bremsMax {4096, DoReset, MinMaxValue, "bremsMax" }; + + ConfigWrapper dpadDebounce {25, DoReset, {}, "dpadDebounce" }; std::array wireless_door_configs { WirelessDoorsConfig { "door_id0", "door_token0" }, @@ -274,6 +282,14 @@ public: \ x(canBusResetOnError) \ \ + x(sampleCount) \ + x(gasMin) \ + x(gasMax) \ + x(bremsMin) \ + x(bremsMax) \ + \ + x(dpadDebounce) \ + \ x(wireless_door_configs[0].doorId) \ x(wireless_door_configs[0].doorToken) \ x(wireless_door_configs[1].doorId) \ diff --git a/main/potis.cpp b/main/potis.cpp index bc20584..3d80e52 100644 --- a/main/potis.cpp +++ b/main/potis.cpp @@ -9,6 +9,7 @@ #ifdef FEATURE_CAN #include "can.h" #endif +#include "newsettings.h" using namespace std::chrono_literals; @@ -26,13 +27,13 @@ void readPotis() { [[maybe_unused]] constexpr auto sampleMultipleTimes = [](uint8_t pin){ - analogRead(pin); - double sum{}; - const auto sampleCount = settings.boardcomputerHardware.sampleCount; - for (int i = 0; i < sampleCount; i++) - sum += analogRead(pin); - return sum / sampleCount; - }; + analogRead(pin); + double sum{}; + const auto sampleCount = configs.sampleCount.value; + for (int i = 0; i < sampleCount; i++) + sum += analogRead(pin); + return sum / sampleCount; + }; raw_gas = std::nullopt; raw_brems = std::nullopt; @@ -65,11 +66,11 @@ void readPotis() #endif if (raw_gas) - gas = cpputils::mapValueClamped(*raw_gas, settings.boardcomputerHardware.gasMin, settings.boardcomputerHardware.gasMax, 0., 1000.); + gas = cpputils::mapValueClamped(*raw_gas, configs.gasMin.value, configs.gasMax.value, 0., 1000.); else gas = std::nullopt; if (raw_brems) - brems = cpputils::mapValueClamped(*raw_brems, settings.boardcomputerHardware.bremsMin, settings.boardcomputerHardware.bremsMax, 0., 1000.); + brems = cpputils::mapValueClamped(*raw_brems, configs.bremsMin.value, configs.bremsMax.value, 0., 1000.); else brems = std::nullopt; diff --git a/main/presets.h b/main/presets.h index a172063..19906d7 100644 --- a/main/presets.h +++ b/main/presets.h @@ -123,14 +123,6 @@ constexpr Settings::BoardcomputerHardware::TimersSettings defaultTimersSettings }; constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { - .sampleCount = 50, - .gasMin = DEFAULT_GASMIN, - .gasMax = DEFAULT_GASMAX, - .bremsMin = DEFAULT_BREMSMIN, - .bremsMax = DEFAULT_BREMSMAX, -#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW) - .dpadDebounce = 25, -#endif #ifdef FEATURE_GAMETRAK .gametrakXMin = DEFAULT_GAMETRAKXMIN, .gametrakXMax = DEFAULT_GAMETRAKXMAX, diff --git a/main/settings.h b/main/settings.h index a13a908..0a16df3 100644 --- a/main/settings.h +++ b/main/settings.h @@ -70,11 +70,6 @@ struct Settings } controllerHardware; struct BoardcomputerHardware { - int16_t sampleCount; - int16_t gasMin, gasMax, bremsMin, bremsMax; -#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW) - uint8_t dpadDebounce; -#endif #ifdef FEATURE_GAMETRAK int16_t gametrakXMin, gametrakXMax, gametrakYMin, gametrakYMax, gametrakDistMin, gametrakDistMax; #endif @@ -243,14 +238,6 @@ void Settings::executeForEveryCommonSetting(T &&callable) callable("canReceiveTimeo", controllerHardware.canReceiveTimeout); #endif - callable("sampleCount", boardcomputerHardware.sampleCount); - callable("gasMin", boardcomputerHardware.gasMin); - callable("gasMax", boardcomputerHardware.gasMax); - callable("bremsMin", boardcomputerHardware.bremsMin); - callable("bremsMax", boardcomputerHardware.bremsMax); -#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) - callable("dpadDebounce", boardcomputerHardware.dpadDebounce); -#endif #ifdef FEATURE_GAMETRAK callable("gametrakXMin", boardcomputerHardware.gametrakXMin); callable("gametrakXMax", boardcomputerHardware.gametrakXMax); From 9540898ced042e350328b60ba5551cca37b6a939 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 29 Dec 2021 18:53:59 +0100 Subject: [PATCH 2/6] Lots of improvements with newsettings --- main/displays/menus/commanddebugmenu.h | 5 +- main/displays/menus/feedbackdebugmenu.h | 5 +- main/displays/menus/motorfeedbackdebugmenu.h | 9 +- main/displays/menus/motorstatedebugmenu.h | 9 +- main/dpad6wire.h | 3 +- main/newsettings.h | 8 +- main/webserver_newsettings.cpp | 201 ++++++++++++++++--- 7 files changed, 200 insertions(+), 40 deletions(-) diff --git a/main/displays/menus/commanddebugmenu.h b/main/displays/menus/commanddebugmenu.h index 14fbc6e..c8e4685 100644 --- a/main/displays/menus/commanddebugmenu.h +++ b/main/displays/menus/commanddebugmenu.h @@ -2,6 +2,7 @@ // local includes #include "displays/bobbymenudisplay.h" +#include "debugmenu.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -30,7 +31,7 @@ public: } }; -class FrontCommandDebugMenu : public CommandDebugMenu {}; -class BackCommandDebugMenu : public CommandDebugMenu {}; +using FrontCommandDebugMenu = CommandDebugMenu; +using BackCommandDebugMenu = CommandDebugMenu; } // namespace diff --git a/main/displays/menus/feedbackdebugmenu.h b/main/displays/menus/feedbackdebugmenu.h index 4f6d60c..3fd6ee4 100644 --- a/main/displays/menus/feedbackdebugmenu.h +++ b/main/displays/menus/feedbackdebugmenu.h @@ -2,6 +2,7 @@ // local includes #include "displays/bobbymenudisplay.h" +#include "debugmenu.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -33,7 +34,7 @@ public: } }; -class FrontFeedbackDebugMenu : public FeedbackDebugMenu {}; -class BackFeedbackDebugMenu : public FeedbackDebugMenu {}; +using FrontFeedbackDebugMenu = FeedbackDebugMenu; +using BackFeedbackDebugMenu = FeedbackDebugMenu; } // namespace diff --git a/main/displays/menus/motorfeedbackdebugmenu.h b/main/displays/menus/motorfeedbackdebugmenu.h index 80375c3..bd4a3f8 100644 --- a/main/displays/menus/motorfeedbackdebugmenu.h +++ b/main/displays/menus/motorfeedbackdebugmenu.h @@ -2,6 +2,7 @@ // local includes #include "displays/bobbymenudisplay.h" +#include "debugmenu.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -40,7 +41,7 @@ public: } }; -class FrontLeftMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; -class FrontRightMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; -class BackLeftMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; -class BackRightMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; +using FrontLeftMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; +using FrontRightMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; +using BackLeftMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; +using BackRightMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; diff --git a/main/displays/menus/motorstatedebugmenu.h b/main/displays/menus/motorstatedebugmenu.h index bfa01da..c231bc0 100644 --- a/main/displays/menus/motorstatedebugmenu.h +++ b/main/displays/menus/motorstatedebugmenu.h @@ -8,6 +8,7 @@ // local includes #include "displays/bobbymenudisplay.h" +#include "debugmenu.h" #include "utils.h" #include "texts.h" #include "debugtexthelpers.h" @@ -37,7 +38,7 @@ public: } }; -class FrontLeftMotorStateDebugMenu : public MotorStateDebugMenu {}; -class FrontRightMotorStateDebugMenu : public MotorStateDebugMenu {}; -class BackLeftMotorStateDebugMenu : public MotorStateDebugMenu {}; -class BackRightMotorStateDebugMenu : public MotorStateDebugMenu {}; +using FrontLeftMotorStateDebugMenu = MotorStateDebugMenu; +using FrontRightMotorStateDebugMenu = MotorStateDebugMenu; +using BackLeftMotorStateDebugMenu = MotorStateDebugMenu; +using BackRightMotorStateDebugMenu = MotorStateDebugMenu; diff --git a/main/dpad6wire.h b/main/dpad6wire.h index b353811..643095b 100644 --- a/main/dpad6wire.h +++ b/main/dpad6wire.h @@ -13,6 +13,7 @@ #include "buttons.h" #include "types.h" #include "globals.h" +#include "newsettings.h" namespace { namespace dpad6wire { @@ -135,7 +136,7 @@ void update() const auto now = espchrono::millis_clock::now(); - const std::chrono::milliseconds dpadDebounce{settings.boardcomputerHardware.dpadDebounce}; + const std::chrono::milliseconds dpadDebounce{configs.dpadDebounce.value}; if (lastState.up != newState.up && now - debounceUp > dpadDebounce) { diff --git a/main/newsettings.h b/main/newsettings.h index f5f4a92..f4cbcee 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -84,7 +84,7 @@ class ConfigContainer public: // default allowReset constraints nvsName - ConfigWrapper> baseMacAddressOverride{std::nullopt, NoReset, {}, "baseMacAddrOver" }; + ConfigWrapper> baseMacAddressOverride{std::nullopt, DoReset, {}, "baseMacAddrOver" }; ConfigWrapper hostname {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "hostname" }; ConfigWrapper wifiStaEnabled {true, DoReset, {}, "wifiStaEnabled" }; std::array wifi_configs { @@ -108,9 +108,9 @@ public: ConfigWrapper wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" }; ConfigWrapper timeServerEnabled {false, DoReset, {}, "timeServerEnabl" }; - ConfigWrapper timeServer {"europe.pool.ntp.org", NoReset, StringMaxSize<64>, "timeServer" }; - ConfigWrapper timeSyncMode {SNTP_SYNC_MODE_IMMED, NoReset, {}, "timeSyncMode" }; - ConfigWrapper timeSyncInterval{espchrono::milliseconds32{CONFIG_LWIP_SNTP_UPDATE_DELAY}, NoReset, MinTimeSyncInterval, "timeSyncInterva" }; + ConfigWrapper timeServer {"europe.pool.ntp.org", DoReset, StringMaxSize<64>, "timeServer" }; + ConfigWrapper timeSyncMode {SNTP_SYNC_MODE_IMMED, DoReset, {}, "timeSyncMode" }; + ConfigWrapper timeSyncInterval{espchrono::milliseconds32{CONFIG_LWIP_SNTP_UPDATE_DELAY}, DoReset, MinTimeSyncInterval, "timeSyncInterva" }; ConfigWrapper timezoneOffset{espchrono::minutes32{60}, DoReset, {}, "timezoneOffset" }; // MinMaxValue ConfigWrappertimeDst{espchrono::DayLightSavingMode::EuropeanSummerTime, DoReset, {}, "time_dst" }; diff --git a/main/webserver_newsettings.cpp b/main/webserver_newsettings.cpp index 2af1af2..ab8a85c 100644 --- a/main/webserver_newsettings.cpp +++ b/main/webserver_newsettings.cpp @@ -17,6 +17,7 @@ #include #include #include +#include // local includes #include "newsettings.h" @@ -29,13 +30,26 @@ using esphttpdutils::HtmlTag; namespace { constexpr const char * const TAG = "BOBBYWEB"; +template +struct is_duration : std::false_type {}; + +template +struct is_duration> : std::true_type {}; + +template +inline constexpr bool is_duration_v = is_duration<_Tp>::value; + template typename std::enable_if< - !std::is_same::value && - !std::is_integral::value && - !std::is_same::value && - !std::is_same::value && - !std::is_same::value + !std::is_same_v && + !std::is_integral_v && + !is_duration_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v> && + !std::is_same_v && + !std::is_same_v , bool>::type showInputForSetting(std::string_view key, T value, std::string &body) { @@ -46,7 +60,7 @@ showInputForSetting(std::string_view key, T value, std::string &body) template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type showInputForSetting(std::string_view key, T value, std::string &body) { @@ -60,8 +74,8 @@ showInputForSetting(std::string_view key, T value, std::string &body) template typename std::enable_if< - !std::is_same::value && - std::is_integral::value + !std::is_same_v && + std::is_integral_v , bool>::type showInputForSetting(std::string_view key, T value, std::string &body) { @@ -75,7 +89,19 @@ showInputForSetting(std::string_view key, T value, std::string &body) template typename std::enable_if< - std::is_same::value + is_duration_v +, bool>::type +showInputForSetting(std::string_view key, T value, std::string &body) +{ + body += fmt::format("", + esphttpdutils::htmlentities(key), + value.count()); + return true; +} + +template +typename std::enable_if< + std::is_same_v , bool>::type showInputForSetting(std::string_view key, T value, std::string &body) { @@ -87,7 +113,7 @@ showInputForSetting(std::string_view key, T value, std::string &body) template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type showInputForSetting(std::string_view key, T value, std::string &body) { @@ -99,20 +125,79 @@ showInputForSetting(std::string_view key, T value, std::string &body) template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type showInputForSetting(std::string_view key, T value, std::string &body) { - body += fmt::format("", + body += fmt::format("", esphttpdutils::htmlentities(key), esphttpdutils::htmlentities(wifi_stack::toString(value))); return true; } + +template +typename std::enable_if< + std::is_same_v> +, bool>::type +showInputForSetting(std::string_view key, T value, std::string &body) +{ + body += fmt::format(" ?", + esphttpdutils::htmlentities(key), + value ? esphttpdutils::htmlentities(wifi_stack::toString(*value)) : std::string{}); + return true; +} + +template +typename std::enable_if< + std::is_same_v +, bool>::type +showInputForSetting(std::string_view key, T value, std::string &body) +{ + HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; + +#define HANDLE_ENUM_KEY(x) \ + { \ + HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(x), value == x ? " selected" : ""), body}; \ + body += esphttpdutils::htmlentities(#x); \ + } + HANDLE_ENUM_KEY(WIFI_AUTH_OPEN) + HANDLE_ENUM_KEY(WIFI_AUTH_WEP) + HANDLE_ENUM_KEY(WIFI_AUTH_WPA_PSK) + HANDLE_ENUM_KEY(WIFI_AUTH_WPA2_PSK) + HANDLE_ENUM_KEY(WIFI_AUTH_WPA_WPA2_PSK) + HANDLE_ENUM_KEY(WIFI_AUTH_WPA2_ENTERPRISE) + HANDLE_ENUM_KEY(WIFI_AUTH_WPA3_PSK) + HANDLE_ENUM_KEY(WIFI_AUTH_WPA2_WPA3_PSK) + HANDLE_ENUM_KEY(WIFI_AUTH_WAPI_PSK) + HANDLE_ENUM_KEY(WIFI_AUTH_MAX) +#undef HANDLE_ENUM_KEY + return true; +} + +template +typename std::enable_if< + std::is_same_v + , bool>::type +showInputForSetting(std::string_view key, T value, std::string &body) +{ + HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; + +#define HANDLE_ENUM_KEY(x) \ + { \ + HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(x), value == x ? " selected" : ""), body}; \ + body += esphttpdutils::htmlentities(#x); \ + } + HANDLE_ENUM_KEY(SNTP_SYNC_MODE_IMMED) + HANDLE_ENUM_KEY(SNTP_SYNC_MODE_SMOOTH) +#undef HANDLE_ENUM_KEY + return true; +} } // namespace esp_err_t webserver_newSettings_handler(httpd_req_t *req) { #ifndef FEATURE_IS_MIR_EGAL_OB_DER_WEBSERVER_KORREKT_ARBEITET + ESP_LOGI(TAG, "trying to lock..."); espcpputils::LockHelper helper{webserver_lock->handle, std::chrono::ceil(5s).count()}; if (!helper.locked()) { @@ -238,11 +323,14 @@ esp_err_t webserver_newSettings_handler(httpd_req_t *req) namespace { template typename std::enable_if< - !std::is_same::value && - !std::is_integral::value && - !std::is_same::value && - !std::is_same::value && - !std::is_same::value + !std::is_same_v && + !std::is_integral_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v> && + !std::is_same_v && + !std::is_same_v , bool>::type saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) { @@ -252,7 +340,7 @@ saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &bo template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) { @@ -291,8 +379,8 @@ saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &bo template typename std::enable_if< - !std::is_same::value && - std::is_integral::value + !std::is_same_v && + std::is_integral_v , bool>::type saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) { @@ -318,7 +406,7 @@ saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &bo template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) { @@ -336,7 +424,7 @@ saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &bo template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) { @@ -362,7 +450,7 @@ saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &bo template typename std::enable_if< - std::is_same::value + std::is_same_v , bool>::type saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) { @@ -385,6 +473,72 @@ saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &bo return false; } } + +template +typename std::enable_if< + std::is_same_v> +, bool>::type +saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +{ + if (newValue.empty()) + { + if (const auto result = configs.write_config(config, std::nullopt); result) + { + body += "applied"; + return true; + } + else + { + body += result.error(); + return false; + } + } + else if (const auto parsed = wifi_stack::fromString(newValue); parsed) + { + if (const auto result = configs.write_config(config, *parsed); result) + { + body += "applied"; + return true; + } + else + { + body += result.error(); + return false; + } + } + else + { + body += parsed.error(); + return false; + } +} + +template +typename std::enable_if< + std::is_same_v || + std::is_same_v +, bool>::type +saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +{ + if (auto parsed = cpputils::fromString>(newValue)) + { + if (const auto result = configs.write_config(config, T(*parsed)); result) + { + body += "applied"; + return true; + } + else + { + body += result.error(); + return false; + } + } + else + { + body += fmt::format("could not parse {}", newValue); + return false; + } +} } // namespace esp_err_t webserver_saveNewSettings_handler(httpd_req_t *req) @@ -432,6 +586,7 @@ esp_err_t webserver_saveNewSettings_handler(httpd_req_t *req) esphttpdutils::urldecode(valueBuf, valueBufEncoded); body += nvsName; + body += ": "; if (!saveSetting(config, valueBuf, body)) success = false; body += '\n'; From 3cd17b647980d69d0b84156aba06ed87aadce4e3 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 29 Dec 2021 19:50:45 +0100 Subject: [PATCH 3/6] More settings refactorings --- components/esp-gui-lib | 2 +- main/CMakeLists.txt | 351 ++++++++++----------- main/accessorhelpers.h | 24 ++ main/accessors/globalaccessors.cpp | 1 - main/accessors/settingsaccessors.cpp | 1 - main/accessors/settingsaccessors.h | 58 +--- main/accessors/wifiapconfigaccessors.cpp | 12 - main/accessors/wifiapconfigaccessors.h | 28 +- main/bobbybuttons.cpp | 2 +- main/bobbybuttons.h | 2 +- main/changevaluedisplay_wifi_mode_t.cpp | 0 main/changevaluedisplay_wifi_mode_t.h | 53 ---- main/changevaluedisplay_wifi_power_t.cpp | 0 main/changevaluedisplay_wifi_power_t.h | 66 ---- main/displays/menus/wifiapsettingsmenu.cpp | 15 + main/newsettings.h | 4 +- main/webserver_newsettings.cpp | 256 +++++---------- 17 files changed, 308 insertions(+), 567 deletions(-) create mode 100644 main/accessorhelpers.h delete mode 100644 main/accessors/globalaccessors.cpp delete mode 100644 main/accessors/settingsaccessors.cpp delete mode 100644 main/accessors/wifiapconfigaccessors.cpp delete mode 100644 main/changevaluedisplay_wifi_mode_t.cpp delete mode 100644 main/changevaluedisplay_wifi_mode_t.h delete mode 100644 main/changevaluedisplay_wifi_power_t.cpp delete mode 100644 main/changevaluedisplay_wifi_power_t.h diff --git a/components/esp-gui-lib b/components/esp-gui-lib index 3d01a04..87b2d2b 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit 3d01a04aa4bb8554887fd233963e205ccf2b7933 +Subproject commit 87b2d2b42a3604426eef7b8d3db607a2a07505f5 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index a18687a..377d718 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,7 +1,80 @@ set(headers + accessorhelpers.h + battery.h + ble_bobby.h + bletexthelpers.h + bluetooth_bobby.h + bluetoothmode.h + bluetoothtexthelpers.h + bmsutils.h + bobbybuttons.h + buildserver.h + buttons.h + can.h + changevaluedisplay_bluetoothmode.h + changevaluedisplay_controlmode.h + changevaluedisplay_controltype.h + changevaluedisplay_handbremsmode.h + changevaluedisplay_larsmmode_mode.h + changevaluedisplay_unifiedmodelmode.h + cloud.h + cloudtexthelpers.h + controller.h + debugcolorhelpers.h + debuginputhandler.h + debugtexthelpers.h + dnsannounce.h + dpad.h + dpad3wire.h + dpad5wire.h + dpad5wire_2out.h + dpad6wire.h + drivingstatistics.h + espnowfunctions.h + esptexthelpers.h + feedbackparser.h + globals.h + handbremse.h + ledstrip.h + ledstripdefines.h + macros_bobbycar.h + modeinterface.h + modes.h + mosfets.h + newsettings.h + ota.h + potis.h + presets.h + qrimport.h + rotary.h + screens.h + serial_bobby.h + settings.h + settingspersister.h + settingsutils.h + statistics.h + statustexthelper.h + taskmanager.h + texts.h + time_bobbycar.h + types.h + udpcloud.h + unifiedmodelmode.h + utils.h + webserver.h + webserver_displaycontrol.h + webserver_dumpnvs.h + webserver_lock.h + webserver_newsettings.h + webserver_ota.h + webserver_settings.h + wifi_bobbycar.h + wifiguiutils.h accessors/globalaccessors.h accessors/settingsaccessors.h accessors/wifiaccessors.h + accessors/wifiapconfigaccessors.h + accessors/wifistaconfigaccessors.h actions/assertaction.h actions/bluetoothbeginaction.h actions/bluetoothbeginmasteraction.h @@ -27,31 +100,8 @@ set(headers actions/tempomatmodeapplycurrentpeedaction.h actions/updateswapfrontbackaction.h actions/wifiscanaction.h - battery.h - ble_bobby.h - bletexthelpers.h - bluetooth_bobby.h - bluetoothmode.h - bluetoothtexthelpers.h - bmsutils.h - buildserver.h - buttons.h - bobbybuttons.h - can.h - changevaluedisplay_bluetoothmode.h - changevaluedisplay_controlmode.h - changevaluedisplay_controltype.h - changevaluedisplay_handbremsmode.h - changevaluedisplay_larsmmode_mode.h - changevaluedisplay_unifiedmodelmode.h - changevaluedisplay_wifi_mode_t.h - changevaluedisplay_wifi_power_t.h - cloud.h - cloudtexthelpers.h - controller.h - debugcolorhelpers.h - debuginputhandler.h - debugtexthelpers.h + actions/wifistascanaction.h + actions/wifistascanclearaction.h displays/bmsdisplay.h displays/bobbychangevaluedisplay.h displays/bobbydisplay.h @@ -61,7 +111,6 @@ set(headers displays/bobbysplitgraphdisplay.h displays/calibratedisplay.h displays/calibratevoltagedisplay.h - displays/qrdisplay.h displays/dpad5wire2outdebugdisplay.h displays/dpad5wiredebugdisplay.h displays/dpad6wiredebugdisplay.h @@ -70,6 +119,7 @@ set(headers displays/ledstripcolorsdisplay.h displays/lockscreen.h displays/menudisplaywithtime.cpp + displays/menudisplaywithtime.h displays/menus/aboutmenu.h displays/menus/batterydebugmenu.h displays/menus/batterymenu.h @@ -90,8 +140,8 @@ set(headers displays/menus/espnowmenu.h displays/menus/espnowsettingsmenu.h displays/menus/feedbackdebugmenu.h - displays/menus/garagenmenu.h displays/menus/gametrakmodesettingsmenu.h + displays/menus/garagenmenu.h displays/menus/graphsmenu.h displays/menus/greenpassmenu.h displays/menus/handbremssettingsmenu.h @@ -125,31 +175,25 @@ set(headers displays/menus/timersmenu.h displays/menus/timesettingsmenu.h displays/menus/udpcloudsettingsmenu.h - displays/menus/wifistasettingsmenu.h + displays/menus/wifiapclientsmenu.h displays/menus/wifiapsettingsmenu.h + displays/menus/wifistaconfigentrymenu.h + displays/menus/wifistaconfigsmenu.h + displays/menus/wifistascanentrymenu.h + displays/menus/wifistascanmenu.h + displays/menus/wifistasettingsmenu.h displays/metersdisplay.h displays/pingpongdisplay.h displays/popups/alertdisplay.h displays/poweroffdisplay.h displays/powersupplydisplay.h displays/qrcodedebug.h + displays/qrdisplay.h displays/qrimportdisplay.h displays/spirodisplay.h displays/starfielddisplay.h displays/statusdisplay.h displays/updatedisplay.h - dnsannounce.h - dpad.h - dpad3wire.h - dpad5wire.h - dpad5wire_2out.h - dpad6wire.h - drivingstatistics.h - esptexthelpers.h - espnowfunctions.h - feedbackparser.h - globals.h - handbremse.h icons/alert.h icons/battery.h icons/bluetooth.h @@ -175,11 +219,6 @@ set(headers icons/time.h icons/update.h icons/wifi.h - ledstrip.h - ledstripdefines.h - macros_bobbycar.h - modeinterface.h - modes.h modes/defaultmode.h modes/gametrakmode.h modes/ignoreinputmode.h @@ -187,57 +226,86 @@ set(headers modes/motortestmode.h modes/remotecontrolmode.h modes/tempomatmode.h - mosfets.h - newsettings.h - ota.h - potis.h - presets.h - qrimport.h - rotary.h - screens.h - serial_bobby.h - settings.h - settingspersister.h - settingsutils.h - statistics.h - statustexthelper.h - taskmanager.h - texts.h - time_bobbycar.h - types.h - udpcloud.h - unifiedmodelmode.h - utils.h - webserver.h - webserver_displaycontrol.h - webserver_dumpnvs.h - webserver_lock.h - webserver_ota.h - webserver_settings.h - webserver_newsettings.h - widgets/doubleprogressbar.h - displays/menudisplaywithtime.h - wifi_bobbycar.h texthelpers/networktexthelpers.h - texthelpers/wifistatexthelpers.h - wifiguiutils.h - accessors/wifistaconfigaccessors.h - displays/menus/wifistascanmenu.h - displays/menus/wifistaconfigsmenu.h - displays/menus/wifistascanentrymenu.h - displays/menus/wifiapclientsmenu.h - displays/menus/wifistaconfigentrymenu.h - texthelpers/wifistaconfigtexthelpers.h - accessors/wifiapconfigaccessors.h texthelpers/wifiaptexthelpers.h - actions/wifistascanaction.h - actions/wifistascanclearaction.h + texthelpers/wifistaconfigtexthelpers.h + texthelpers/wifistatexthelpers.h + widgets/doubleprogressbar.h ) set(sources - accessors/globalaccessors.cpp - accessors/settingsaccessors.cpp - accessors/wifiaccessors.cpp + battery.cpp + ble_bobby.cpp + bletexthelpers.cpp + bluetooth_bobby.cpp + bluetoothmode.cpp + bluetoothtexthelpers.cpp + bmsutils.cpp + bobbybuttons.cpp + buildserver.cpp + buttons.cpp + can.cpp + changevaluedisplay_bluetoothmode.cpp + changevaluedisplay_controlmode.cpp + changevaluedisplay_controltype.cpp + changevaluedisplay_handbremsmode.cpp + changevaluedisplay_larsmmode_mode.cpp + changevaluedisplay_unifiedmodelmode.cpp + cloud.cpp + cloudtexthelpers.cpp + controller.cpp + debugcolorhelpers.cpp + debuginputhandler.cpp + debugtexthelpers.cpp + dnsannounce.cpp + dpad.cpp + dpad3wire.cpp + dpad5wire.cpp + dpad5wire_2out.cpp + dpad6wire.cpp + drivingstatistics.cpp + espnowfunctions.cpp + esptexthelpers.cpp + feedbackparser.cpp + globals.cpp + handbremse.cpp + ledstrip.cpp + ledstripdefines.cpp + macros_bobbycar.cpp + main.cpp + modeinterface.cpp + modes.cpp + mosfets.cpp + newsettings.cpp + ota.cpp + potis.cpp + presets.cpp + qrimport.cpp + rotary.cpp + screens.cpp + serial_bobby.cpp + settings.cpp + settingspersister.cpp + settingsutils.cpp + statistics.cpp + statustexthelper.cpp + taskmanager.cpp + texts.cpp + time_bobbycar.cpp + types.cpp + udpcloud.cpp + unifiedmodelmode.cpp + utils.cpp + webserver.cpp + webserver_displaycontrol.cpp + webserver_dumpnvs.cpp + webserver_lock.cpp + webserver_newsettings.cpp + webserver_ota.cpp + webserver_settings.cpp + wifi_bobbycar.cpp + wifiguiutils.cpp + accessors/wifistaconfigaccessors.cpp actions/assertaction.cpp actions/bluetoothbeginaction.cpp actions/bluetoothbeginmasteraction.cpp @@ -263,31 +331,8 @@ set(sources actions/tempomatmodeapplycurrentpeedaction.cpp actions/updateswapfrontbackaction.cpp actions/wifiscanaction.cpp - battery.cpp - ble_bobby.cpp - bletexthelpers.cpp - bluetooth_bobby.cpp - bluetoothmode.cpp - bluetoothtexthelpers.cpp - bmsutils.cpp - buildserver.cpp - buttons.cpp - bobbybuttons.cpp - can.cpp - changevaluedisplay_bluetoothmode.cpp - changevaluedisplay_controlmode.cpp - changevaluedisplay_controltype.cpp - changevaluedisplay_handbremsmode.cpp - changevaluedisplay_larsmmode_mode.cpp - changevaluedisplay_unifiedmodelmode.cpp - changevaluedisplay_wifi_mode_t.cpp - changevaluedisplay_wifi_power_t.cpp - cloud.cpp - cloudtexthelpers.cpp - controller.cpp - debugcolorhelpers.cpp - debuginputhandler.cpp - debugtexthelpers.cpp + actions/wifistascanaction.cpp + actions/wifistascanclearaction.cpp displays/bmsdisplay.cpp displays/bobbychangevaluedisplay.cpp displays/bobbydisplay.cpp @@ -297,7 +342,6 @@ set(sources displays/bobbysplitgraphdisplay.cpp displays/calibratedisplay.cpp displays/calibratevoltagedisplay.cpp - displays/qrdisplay.cpp displays/dpad5wire2outdebugdisplay.cpp displays/dpad5wiredebugdisplay.cpp displays/dpad6wiredebugdisplay.cpp @@ -325,8 +369,8 @@ set(sources displays/menus/espnowmenu.cpp displays/menus/espnowsettingsmenu.cpp displays/menus/feedbackdebugmenu.cpp - displays/menus/garagenmenu.cpp displays/menus/gametrakmodesettingsmenu.cpp + displays/menus/garagenmenu.cpp displays/menus/graphsmenu.cpp displays/menus/greenpassmenu.cpp displays/menus/handbremssettingsmenu.cpp @@ -360,31 +404,25 @@ set(sources displays/menus/timersmenu.cpp displays/menus/timesettingsmenu.cpp displays/menus/udpcloudsettingsmenu.cpp - displays/menus/wifistasettingsmenu.cpp + displays/menus/wifiapclientsmenu.cpp displays/menus/wifiapsettingsmenu.cpp + displays/menus/wifistaconfigentrymenu.cpp + displays/menus/wifistaconfigsmenu.cpp + displays/menus/wifistascanentrymenu.cpp + displays/menus/wifistascanmenu.cpp + displays/menus/wifistasettingsmenu.cpp displays/metersdisplay.cpp displays/pingpongdisplay.cpp displays/popups/alertdisplay.cpp displays/poweroffdisplay.cpp displays/powersupplydisplay.cpp displays/qrcodedebug.cpp + displays/qrdisplay.cpp displays/qrimportdisplay.cpp displays/spirodisplay.cpp displays/starfielddisplay.cpp displays/statusdisplay.cpp displays/updatedisplay.cpp - dnsannounce.cpp - dpad.cpp - dpad3wire.cpp - dpad5wire.cpp - dpad5wire_2out.cpp - dpad6wire.cpp - drivingstatistics.cpp - esptexthelpers.cpp - espnowfunctions.cpp - feedbackparser.cpp - globals.cpp - handbremse.cpp icons/alert.cpp icons/battery.cpp icons/bluetooth.cpp @@ -410,12 +448,6 @@ set(sources icons/time.cpp icons/update.cpp icons/wifi.cpp - ledstrip.cpp - ledstripdefines.cpp - macros_bobbycar.cpp - main.cpp - modeinterface.cpp - modes.cpp modes/defaultmode.cpp modes/gametrakmode.cpp modes/ignoreinputmode.cpp @@ -423,50 +455,11 @@ set(sources modes/motortestmode.cpp modes/remotecontrolmode.cpp modes/tempomatmode.cpp - mosfets.cpp - newsettings.cpp - ota.cpp - potis.cpp - presets.cpp - qrimport.cpp - rotary.cpp - screens.cpp - serial_bobby.cpp - settings.cpp - settingspersister.cpp - settingsutils.cpp - statistics.cpp - statustexthelper.cpp - taskmanager.cpp - texts.cpp - time_bobbycar.cpp - types.cpp - udpcloud.cpp - unifiedmodelmode.cpp - utils.cpp - webserver.cpp - webserver_displaycontrol.cpp - webserver_dumpnvs.cpp - webserver_lock.cpp - webserver_ota.cpp - webserver_settings.cpp - webserver_newsettings.cpp - widgets/doubleprogressbar.cpp - wifi_bobbycar.cpp texthelpers/networktexthelpers.cpp - texthelpers/wifistatexthelpers.cpp - wifiguiutils.cpp - accessors/wifistaconfigaccessors.cpp - displays/menus/wifistascanmenu.cpp - displays/menus/wifistaconfigsmenu.cpp - displays/menus/wifistascanentrymenu.cpp - displays/menus/wifiapclientsmenu.cpp - displays/menus/wifistaconfigentrymenu.cpp - texthelpers/wifistaconfigtexthelpers.cpp - accessors/wifiapconfigaccessors.cpp texthelpers/wifiaptexthelpers.cpp - actions/wifistascanaction.cpp - actions/wifistascanclearaction.cpp + texthelpers/wifistaconfigtexthelpers.cpp + texthelpers/wifistatexthelpers.cpp + widgets/doubleprogressbar.cpp ) set(dependencies diff --git a/main/accessorhelpers.h b/main/accessorhelpers.h new file mode 100644 index 0000000..7e0ce07 --- /dev/null +++ b/main/accessorhelpers.h @@ -0,0 +1,24 @@ +#pragma once + +// 3rdparty lib includes +#include + +// local includes +#include "utils.h" +#include "newsettings.h" + +//! Special type of RefAccessor that also saves settings after setValue() +template +struct RefAccessorSaveSettings : public virtual espgui::RefAccessor +{ + void setValue(T value) override { espgui::RefAccessor::setValue(value); saveSettings(); }; +}; + +template +struct NewSettingsAccessor : public virtual espgui::AccessorInterface +{ + virtual ConfigWrapper& getConfig() const = 0; + + T getValue() const override { return getConfig().value; } + void setValue(T value) override { configs.write_config(getConfig(), value); } +}; diff --git a/main/accessors/globalaccessors.cpp b/main/accessors/globalaccessors.cpp deleted file mode 100644 index 3298cd7..0000000 --- a/main/accessors/globalaccessors.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "globalaccessors.h" diff --git a/main/accessors/settingsaccessors.cpp b/main/accessors/settingsaccessors.cpp deleted file mode 100644 index d2a41b3..0000000 --- a/main/accessors/settingsaccessors.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "settingsaccessors.h" diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index c68f33d..bd8dbae 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -6,54 +6,20 @@ // local includes #include "globals.h" #include "utils.h" +#include "accessorhelpers.h" #include "newsettings.h" -//! Special type of RefAccessor that also saves settings after setValue() -template -struct RefAccessorSaveSettings : public virtual espgui::RefAccessor -{ - void setValue(T value) override { espgui::RefAccessor::setValue(value); saveSettings(); }; -}; -template -struct NewSettingsAccessor : public virtual espgui::AccessorInterface -{ - virtual ConfigWrapper& getConfig() const = 0; - - T getValue() const override { return getConfig().value; } - void setValue(T value) override { configs.write_config(getConfig(), value); } -}; - // Bms #ifdef FEATURE_BMS struct AutoConnectBmsAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.autoConnectBms; } }; #endif // Buzzer -struct ReverseBeepAccessor : public virtual espgui::AccessorInterface -{ - bool getValue() const override { return configs.reverseBeep.value; } - void setValue(bool value) override { configs.write_config(configs.reverseBeep, value); } -}; -struct ReverseBeepFreq0Accessor : public virtual espgui::AccessorInterface -{ - uint8_t getValue() const override { return configs.reverseBeepFreq0.value; } - void setValue(uint8_t value) override { configs.write_config(configs.reverseBeepFreq0, value); } -}; -struct ReverseBeepFreq1Accessor : public virtual espgui::AccessorInterface -{ - uint8_t getValue() const override { return configs.reverseBeepFreq1.value; } - void setValue(uint8_t value) override { configs.write_config(configs.reverseBeepFreq1, value); } -}; -struct ReverseBeepDuration0Accessor : public virtual espgui::AccessorInterface -{ - int16_t getValue() const override { return configs.reverseBeepDuration0.value; } - void setValue(int16_t value) override { configs.write_config(configs.reverseBeepDuration0, value); } -}; -struct ReverseBeepDuration1Accessor : public virtual espgui::AccessorInterface -{ - int16_t getValue() const override { return configs.reverseBeepDuration1.value; } - void setValue(int16_t value) override { configs.write_config(configs.reverseBeepDuration1, value); } -}; +struct ReverseBeepAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.reverseBeep; } }; +struct ReverseBeepFreq0Accessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.reverseBeepFreq0; } }; +struct ReverseBeepFreq1Accessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.reverseBeepFreq1; } }; +struct ReverseBeepDuration0Accessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.reverseBeepDuration0; } }; +struct ReverseBeepDuration1Accessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.reverseBeepDuration1; } }; // Limits struct IMotMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.iMotMax; } }; @@ -67,18 +33,6 @@ struct NMotMaxRpmAccessor : public RefAccessorSaveSettings { int16_t &g struct FieldWeakMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.fieldWeakMax; } }; struct PhaseAdvMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.phaseAdvMax; } }; -// WiFi -struct WifiStaEnabledAccessor : public virtual espgui::AccessorInterface -{ - bool getValue() const override { return configs.wifiStaEnabled.value; } - void setValue(bool value) override { configs.write_config(configs.wifiStaEnabled, value); } -}; -struct WifiApEnabledAccessor : public virtual espgui::AccessorInterface -{ - bool getValue() const override { return configs.wifiApEnabled.value; } - void setValue(bool value) override { configs.write_config(configs.wifiApEnabled, value); } -}; - // Bluetooth #ifdef FEATURE_BLUETOOTH struct AutoBluetoothModeAccessor : public RefAccessorSaveSettings { BluetoothMode &getRef() const override { return settings.bluetoothSettings.autoBluetoothMode; } }; diff --git a/main/accessors/wifiapconfigaccessors.cpp b/main/accessors/wifiapconfigaccessors.cpp deleted file mode 100644 index 8b39f6b..0000000 --- a/main/accessors/wifiapconfigaccessors.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "wifiapconfigaccessors.h" - -// local includes -#include "newsettings.h" - -using namespace espgui; - -bool WifiApEnabledAccessor::getValue() const { return configs.wifiApEnabled.value; } -void WifiApEnabledAccessor::setValue(bool value) { configs.write_config(configs.wifiApEnabled, value); } - -//bool WifiApDisableWhenOnlineAccessor::getValue() const { return configs.wifiDisableApWhenOnline.value; } -//void WifiApDisableWhenOnlineAccessor::setValue(bool value) { configs.write_config(configs.wifiDisableApWhenOnline, value); } diff --git a/main/accessors/wifiapconfigaccessors.h b/main/accessors/wifiapconfigaccessors.h index 5e8ae7a..cbcf8e5 100644 --- a/main/accessors/wifiapconfigaccessors.h +++ b/main/accessors/wifiapconfigaccessors.h @@ -1,22 +1,12 @@ #pragma once -// system includes -#include +// local includes +#include "accessorhelpers.h" +#include "newsettings.h" -// 3rdparty lib includes -#include -#include - -class WifiApEnabledAccessor : public virtual espgui::AccessorInterface -{ -public: - bool getValue() const override; - void setValue(bool value) override; -}; - -//class WifiApDisableWhenOnlineAccessor : public virtual espgui::AccessorInterface -//{ -//public: -// bool getValue() const override; -// void setValue(bool value) override; -//}; +struct WifiApEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApEnabled; } }; +//struct WifiApDisableWhenOnlineAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiDisableApWhenOnline; } }; +struct WifiApNameAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApName; } }; +struct WifiApKeyAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApKey; } }; +struct WifiApChannelAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApChannel; } }; +struct WifiApAuthmodeAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApAuthmode; } }; diff --git a/main/bobbybuttons.cpp b/main/bobbybuttons.cpp index 4226e04..4ff256c 100644 --- a/main/bobbybuttons.cpp +++ b/main/bobbybuttons.cpp @@ -1,6 +1,6 @@ #include "bobbybuttons.h" -std::optional translateRawButton(uint8_t button) +[[nodiscard]] std::optional translateRawButton(uint8_t button) { switch (button) { diff --git a/main/bobbybuttons.h b/main/bobbybuttons.h index 7c7ad8f..f11977b 100644 --- a/main/bobbybuttons.h +++ b/main/bobbybuttons.h @@ -20,7 +20,7 @@ enum BobbyButton Back = espgui::Button::Left }; -std::optional translateRawButton(uint8_t button); +[[nodiscard]] std::optional translateRawButton(uint8_t button); void buttonPressedCommon(espgui::Button button); class BobbyButtons : public virtual espgui::ButtonsInterface diff --git a/main/changevaluedisplay_wifi_mode_t.cpp b/main/changevaluedisplay_wifi_mode_t.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/changevaluedisplay_wifi_mode_t.h b/main/changevaluedisplay_wifi_mode_t.h deleted file mode 100644 index 21a72ba..0000000 --- a/main/changevaluedisplay_wifi_mode_t.h +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once - -#include -#include - -#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 espgui { -template<> -class ChangeValueDisplay : - public MenuDisplay, - public virtual AccessorInterface, - public virtual ActionInterface -{ - using Base = MenuDisplay; - -public: - ChangeValueDisplay(); - - void start() override; -}; - -ChangeValueDisplay::ChangeValueDisplay() -{ - constructMenuItem, StaticText>>(WIFI_MODE_NULL, *this, *this); - constructMenuItem, StaticText>>(WIFI_MODE_STA, *this, *this); - constructMenuItem, StaticText>>(WIFI_MODE_AP, *this, *this); - constructMenuItem, StaticText>>(WIFI_MODE_APSTA, *this, *this); - constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); -} - -void ChangeValueDisplay::start() -{ - Base::start(); - - switch (const auto value = getValue()) - { - case WIFI_MODE_NULL: setSelectedIndex(0); break; - case WIFI_MODE_STA: setSelectedIndex(1); break; - case WIFI_MODE_AP: setSelectedIndex(2); break; - case WIFI_MODE_APSTA: setSelectedIndex(3); break; - default: - ESP_LOGW("BOBBY", "Unknown wifi_mode_t: %i", int(value)); - setSelectedIndex(4); - } -} -} // namespace espgui diff --git a/main/changevaluedisplay_wifi_power_t.cpp b/main/changevaluedisplay_wifi_power_t.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/changevaluedisplay_wifi_power_t.h b/main/changevaluedisplay_wifi_power_t.h deleted file mode 100644 index 43e7724..0000000 --- a/main/changevaluedisplay_wifi_power_t.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#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 espgui { -//template<> -//class ChangeValueDisplay : -// public MenuDisplay, -// public virtual AccessorInterface, -// public virtual ActionInterface -//{ -// using Base = MenuDisplay; - -//public: -// ChangeValueDisplay(); - -// void start() override; -//}; - -//ChangeValueDisplay::ChangeValueDisplay() -//{ -// constructMenuItem, StaticText>>(WIFI_POWER_19_5dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_19dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_18_5dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_17dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_15dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_13dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_11dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_8_5dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_7dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_5dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_2dBm, *this, *this); -// constructMenuItem, StaticText>>(WIFI_POWER_MINUS_1dBm, *this, *this); -// constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); -//} - -//void ChangeValueDisplay::start() -//{ -// Base::start(); - -// switch (const auto value = getValue()) -// { -// case WIFI_POWER_19_5dBm: setSelectedIndex(0); break; -// case WIFI_POWER_19dBm: setSelectedIndex(1); break; -// case WIFI_POWER_18_5dBm: setSelectedIndex(2); break; -// case WIFI_POWER_17dBm: setSelectedIndex(3); break; -// case WIFI_POWER_15dBm: setSelectedIndex(4); break; -// case WIFI_POWER_13dBm: setSelectedIndex(5); break; -// case WIFI_POWER_11dBm: setSelectedIndex(6); break; -// case WIFI_POWER_8_5dBm: setSelectedIndex(7); break; -// case WIFI_POWER_7dBm: setSelectedIndex(8); break; -// case WIFI_POWER_5dBm: setSelectedIndex(9); break; -// case WIFI_POWER_2dBm: setSelectedIndex(10); break; -// case WIFI_POWER_MINUS_1dBm: setSelectedIndex(11); break; -// default: -// //Serial.printf("Unknown wifi_power_t: %i\r\n", int(value)); -// setSelectedIndex(12); -// } -//} -} // namespace espgui diff --git a/main/displays/menus/wifiapsettingsmenu.cpp b/main/displays/menus/wifiapsettingsmenu.cpp index f68cc13..8701c00 100644 --- a/main/displays/menus/wifiapsettingsmenu.cpp +++ b/main/displays/menus/wifiapsettingsmenu.cpp @@ -14,6 +14,7 @@ #include // local includes +#include "displays/bobbychangevaluedisplay.h" #include "wifiapclientsmenu.h" #include "networksettingsmenu.h" #include "accessors/wifiapconfigaccessors.h" @@ -28,11 +29,22 @@ constexpr char TEXT_ENABLED[] = "Enabled"; constexpr char TEXT_DISABLEWHENONLINE[] = "Disable when online"; constexpr char TEXT_BACK[] = "Back"; +constexpr char TEXT_CHANNEL[] = "Channel"; +constexpr char TEXT_CHANNEL_FORMATTED[] = "Channel: &2"; + class WifiApClientsAction : public virtual ActionInterface { public: void triggered() override; }; + +using ApChannelChangeScreen = espgui::makeComponent< + BobbyChangeValueDisplay, + espgui::StaticText, + WifiApChannelAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; } // namespace WifiApSettingsMenu::WifiApSettingsMenu() @@ -43,8 +55,11 @@ WifiApSettingsMenu::WifiApSettingsMenu() constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiApEnabledAccessor>>(); //constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiApDisableWhenOnlineAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } diff --git a/main/newsettings.h b/main/newsettings.h index f4cbcee..ac8bdfb 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -104,10 +104,10 @@ public: ConfigWrapper wifiApEnabled {true, DoReset, {}, "wifiApEnabled" }; ConfigWrapper wifiApName {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "wifiApName" }; ConfigWrapper wifiApKey {"Passwort_123", DoReset, StringOr>, "wifiApKey" }; - ConfigWrapper wifiApChannel {1, DoReset, {}, "wifiApChannel" }; + ConfigWrapper wifiApChannel {1, DoReset, MinMaxValue, "wifiApChannel" }; ConfigWrapper wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" }; - ConfigWrapper timeServerEnabled {false, DoReset, {}, "timeServerEnabl" }; + ConfigWrapper timeServerEnabled {true, DoReset, {}, "timeServerEnabl" }; ConfigWrapper timeServer {"europe.pool.ntp.org", DoReset, StringMaxSize<64>, "timeServer" }; ConfigWrapper timeSyncMode {SNTP_SYNC_MODE_IMMED, DoReset, {}, "timeSyncMode" }; ConfigWrapper timeSyncInterval{espchrono::milliseconds32{CONFIG_LWIP_SNTP_UPDATE_DELAY}, DoReset, MinTimeSyncInterval, "timeSyncInterva" }; diff --git a/main/webserver_newsettings.cpp b/main/webserver_newsettings.cpp index ab8a85c..3ce176b 100644 --- a/main/webserver_newsettings.cpp +++ b/main/webserver_newsettings.cpp @@ -18,6 +18,7 @@ #include #include #include +#include // local includes #include "newsettings.h" @@ -49,19 +50,19 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v> && !std::is_same_v && - !std::is_same_v -, bool>::type + !std::is_same_v && + !std::is_same_v +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { HtmlTag spanTag{"span", "style=\"color: red;\"", body}; body += "Unsupported config type"; - return false; } template typename std::enable_if< std::is_same_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format("" @@ -69,14 +70,13 @@ showInputForSetting(std::string_view key, T value, std::string &body) esphttpdutils::htmlentities(key), value ? "checked " : "", esphttpdutils::htmlentities(key)); - return true; } template typename std::enable_if< !std::is_same_v && std::is_integral_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format("", @@ -84,73 +84,67 @@ showInputForSetting(std::string_view key, T value, std::string &body) value, std::numeric_limits::min(), std::numeric_limits::max()); - return true; } template typename std::enable_if< is_duration_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format("", esphttpdutils::htmlentities(key), value.count()); - return true; } template typename std::enable_if< std::is_same_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format("", esphttpdutils::htmlentities(key), esphttpdutils::htmlentities(value)); - return true; } template typename std::enable_if< std::is_same_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format("", esphttpdutils::htmlentities(key), esphttpdutils::htmlentities(wifi_stack::toString(value))); - return true; } template typename std::enable_if< std::is_same_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format("", esphttpdutils::htmlentities(key), esphttpdutils::htmlentities(wifi_stack::toString(value))); - return true; } template typename std::enable_if< std::is_same_v> -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { body += fmt::format(" ?", esphttpdutils::htmlentities(key), value ? esphttpdutils::htmlentities(wifi_stack::toString(*value)) : std::string{}); - return true; } template typename std::enable_if< std::is_same_v -, bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; @@ -171,26 +165,38 @@ showInputForSetting(std::string_view key, T value, std::string &body) HANDLE_ENUM_KEY(WIFI_AUTH_WAPI_PSK) HANDLE_ENUM_KEY(WIFI_AUTH_MAX) #undef HANDLE_ENUM_KEY - return true; } template typename std::enable_if< std::is_same_v - , bool>::type +, void>::type showInputForSetting(std::string_view key, T value, std::string &body) { HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; #define HANDLE_ENUM_KEY(x) \ { \ - HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(x), value == x ? " selected" : ""), body}; \ - body += esphttpdutils::htmlentities(#x); \ + HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(x), value == x ? " selected" : ""), body}; \ + body += esphttpdutils::htmlentities(#x); \ } HANDLE_ENUM_KEY(SNTP_SYNC_MODE_IMMED) HANDLE_ENUM_KEY(SNTP_SYNC_MODE_SMOOTH) #undef HANDLE_ENUM_KEY - return true; +} + +template +typename std::enable_if< + std::is_same_v +, void>::type +showInputForSetting(std::string_view key, T value, std::string &body) +{ + HtmlTag select{"select", fmt::format("name=\"{}\"", esphttpdutils::htmlentities(key)), body}; + + espchrono::iterateDayLightSavingMode([&](T enumVal, std::string_view enumKey){ + HtmlTag option{"option", fmt::format("value=\"{}\"{}", std::to_underlying(enumVal), value == enumVal ? " selected" : ""), body}; + body += esphttpdutils::htmlentities(enumKey); + }); } } // namespace @@ -304,10 +310,16 @@ esp_err_t webserver_newSettings_handler(httpd_req_t *req) body += ' '; + if (config.allowReset()) { HtmlTag buttonTag{"a", fmt::format("href=\"/resetNewSettings?{}=1\"", esphttpdutils::htmlentities(nvsName)), body}; body += "Reset"; } + else + { + HtmlTag buttonTag{"span", "style=\"color: yellow;\"", body}; + body += "No Reset"; + } } } }); @@ -330,214 +342,98 @@ typename std::enable_if< !std::is_same_v && !std::is_same_v> && !std::is_same_v && - !std::is_same_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) + !std::is_same_v && + !std::is_same_v +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { - body += "Unsupported config type"; - return false; + return tl::make_unexpected("Unsupported config type"); } template typename std::enable_if< std::is_same_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { - if (newValue == "true") - { - if (const auto result = configs.write_config(config, true); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } - else if (newValue == "false") - { - if (const auto result = configs.write_config(config, false); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + if (cpputils::is_in(newValue, "true", "false")) + return configs.write_config(config, newValue == "true"); else - { - body += fmt::format("only true and false allowed, not {}", newValue); - return false; - } + return tl::make_unexpected(fmt::format("only true and false allowed, not {}", newValue)); } template typename std::enable_if< !std::is_same_v && std::is_integral_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { if (auto parsed = cpputils::fromString(newValue)) - { - if (const auto result = configs.write_config(config, *parsed); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + return configs.write_config(config, *parsed); else - { - body += fmt::format("could not parse {}", newValue); - return false; - } + return tl::make_unexpected(fmt::format("could not parse {}", newValue)); } template typename std::enable_if< std::is_same_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { - if (const auto result = configs.write_config(config, std::string{newValue}); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } + return configs.write_config(config, std::string{newValue}); } template typename std::enable_if< std::is_same_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { if (const auto parsed = wifi_stack::fromString(newValue); parsed) - { - if (const auto result = configs.write_config(config, *parsed); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + return configs.write_config(config, *parsed); else - { - body += parsed.error(); - return false; - } + return tl::make_unexpected(parsed.error()); } template typename std::enable_if< std::is_same_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { if (const auto parsed = wifi_stack::fromString(newValue); parsed) - { - if (const auto result = configs.write_config(config, *parsed); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + return configs.write_config(config, *parsed); else - { - body += parsed.error(); - return false; - } + return tl::make_unexpected(parsed.error()); } template typename std::enable_if< std::is_same_v> -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { if (newValue.empty()) - { - if (const auto result = configs.write_config(config, std::nullopt); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + return configs.write_config(config, std::nullopt); else if (const auto parsed = wifi_stack::fromString(newValue); parsed) - { - if (const auto result = configs.write_config(config, *parsed); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + return configs.write_config(config, *parsed); else - { - body += parsed.error(); - return false; - } + return tl::make_unexpected(parsed.error()); } template typename std::enable_if< std::is_same_v || - std::is_same_v -, bool>::type -saveSetting(ConfigWrapper &config, std::string_view newValue, std::string &body) + std::is_same_v || + std::is_same_v +, tl::expected>::type +saveSetting(ConfigWrapper &config, std::string_view newValue) { if (auto parsed = cpputils::fromString>(newValue)) - { - if (const auto result = configs.write_config(config, T(*parsed)); result) - { - body += "applied"; - return true; - } - else - { - body += result.error(); - return false; - } - } + return configs.write_config(config, T(*parsed)); else - { - body += fmt::format("could not parse {}", newValue); - return false; - } + return tl::make_unexpected(fmt::format("could not parse {}", newValue)); } } // namespace @@ -585,11 +481,13 @@ esp_err_t webserver_saveNewSettings_handler(httpd_req_t *req) char valueBuf[257]; esphttpdutils::urldecode(valueBuf, valueBufEncoded); - body += nvsName; - body += ": "; - if (!saveSetting(config, valueBuf, body)) + if (const auto result = saveSetting(config, valueBuf); result) + body += fmt::format("{} succeeded!\n", esphttpdutils::htmlentities(nvsName)); + else + { + body += fmt::format("{} failed: {}\n", esphttpdutils::htmlentities(nvsName), esphttpdutils::htmlentities(result.error())); success = false; - body += '\n'; + } }); if (body.empty()) From 855dbca1caabaa83da78ba248d9cbea8efd68634 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 29 Dec 2021 20:31:07 +0100 Subject: [PATCH 4/6] Again too many improvements --- components/esp-gui-lib | 2 +- main/CMakeLists.txt | 2 - main/accessors/wifiapconfigaccessors.h | 2 + main/actions/multiaction.cpp | 0 main/actions/multiaction.h | 31 -------------- main/displays/menus/batterymenu.cpp | 3 +- .../boardcomputerhardwaresettingsmenu.cpp | 1 + .../menus/defaultmodesettingsmenu.cpp | 15 +++---- main/displays/menus/greenpassmenu.cpp | 3 ++ main/displays/menus/handbremssettingsmenu.cpp | 11 ++--- main/displays/menus/ledstripmenu.cpp | 1 + main/displays/menus/limitssettingsmenu.cpp | 9 +++-- .../displays/menus/lockscreensettingsmenu.cpp | 13 +++--- main/displays/menus/selectmodemenu.cpp | 9 +++-- .../menus/tempomatmodesettingsmenu.cpp | 9 +++-- main/displays/menus/wifiapsettingsmenu.cpp | 40 ++++++++++++++----- main/newsettings.h | 4 ++ main/texthelpers/wifiaptexthelpers.cpp | 24 ----------- main/texthelpers/wifiaptexthelpers.h | 24 ----------- main/wifi_bobbycar.cpp | 6 +-- main/wifi_bobbycar.h | 3 -- 21 files changed, 84 insertions(+), 128 deletions(-) delete mode 100644 main/actions/multiaction.cpp delete mode 100644 main/actions/multiaction.h diff --git a/components/esp-gui-lib b/components/esp-gui-lib index 87b2d2b..a29efa4 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit 87b2d2b42a3604426eef7b8d3db607a2a07505f5 +Subproject commit a29efa4e47dbf422be4f4fa22d52c62ff9089e6d diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 377d718..98f4f12 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -92,7 +92,6 @@ set(headers actions/ledstripblinkactions.h actions/loadsettingsaction.h actions/modesettingsaction.h - actions/multiaction.h actions/qraction.h actions/rebootaction.h actions/savesettingsaction.h @@ -323,7 +322,6 @@ set(sources actions/ledstripblinkactions.cpp actions/loadsettingsaction.cpp actions/modesettingsaction.cpp - actions/multiaction.cpp actions/qraction.cpp actions/rebootaction.cpp actions/savesettingsaction.cpp diff --git a/main/accessors/wifiapconfigaccessors.h b/main/accessors/wifiapconfigaccessors.h index cbcf8e5..607ae1c 100644 --- a/main/accessors/wifiapconfigaccessors.h +++ b/main/accessors/wifiapconfigaccessors.h @@ -8,5 +8,7 @@ struct WifiApEnabledAccessor : public NewSettingsAccessor { ConfigWrapper< //struct WifiApDisableWhenOnlineAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiDisableApWhenOnline; } }; struct WifiApNameAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApName; } }; struct WifiApKeyAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApKey; } }; +struct WifiApIpAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApIp; } }; +struct WifiApMaskAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApMask; } }; struct WifiApChannelAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApChannel; } }; struct WifiApAuthmodeAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiApAuthmode; } }; diff --git a/main/actions/multiaction.cpp b/main/actions/multiaction.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/actions/multiaction.h b/main/actions/multiaction.h deleted file mode 100644 index 9b11353..0000000 --- a/main/actions/multiaction.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "actioninterface.h" - -using namespace espgui; - -namespace { -template -class MultiAction; - -template -class MultiAction : public virtual ActionInterface -{ -public: - void triggered() override - { - T{}.triggered(); - } -}; - -template -class MultiAction : public virtual MultiAction -{ -public: - void triggered() override - { - T{}.triggered(); - MultiAction::triggered(); - } -}; -} diff --git a/main/displays/menus/batterymenu.cpp b/main/displays/menus/batterymenu.cpp index 2a64ed6..4851961 100644 --- a/main/displays/menus/batterymenu.cpp +++ b/main/displays/menus/batterymenu.cpp @@ -2,13 +2,14 @@ // 3rdparty lib includes #include +#include +#include // local includes #include "displays/bobbychangevaluedisplay.h" #include "mainmenu.h" #include "displays/calibratevoltagedisplay.h" #include "accessors/settingsaccessors.h" -#include "fmt/core.h" #include "battery.h" class CurrentBatteryStatusText : public virtual espgui::TextInterface { public: std::string text() const override { return getBatteryPercentageString(); } }; diff --git a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp index 6b3a2c6..64e96e0 100644 --- a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp +++ b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp @@ -8,6 +8,7 @@ #include #include #include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index 6391b5c..faf0cfa 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -1,13 +1,14 @@ #include "defaultmodesettingsmenu.h" // 3rdparty lib includes -#include "changevaluedisplay.h" -#include "menuitem.h" -#include "actions/toggleboolaction.h" -#include "actions/switchscreenaction.h" -#include "actions/dummyaction.h" -#include "checkboxicon.h" -#include "icons/back.h" +#include +#include +#include +#include +#include +#include +#include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/greenpassmenu.cpp b/main/displays/menus/greenpassmenu.cpp index edd8cff..821def5 100644 --- a/main/displays/menus/greenpassmenu.cpp +++ b/main/displays/menus/greenpassmenu.cpp @@ -4,6 +4,9 @@ #include #include +// 3rdparty lib includes +#include + // local includes #include "actions/switchscreenaction.h" #include "actions/qraction.h" diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp index 2aee393..011f472 100644 --- a/main/displays/menus/handbremssettingsmenu.cpp +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -2,11 +2,12 @@ // 3rd party libs #include -#include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "changevaluedisplay.h" -#include "checkboxicon.h" -#include "icons/back.h" +#include +#include +#include +#include +#include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 23ee4ae..3c3db7b 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -10,6 +10,7 @@ #include #include #include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/limitssettingsmenu.cpp b/main/displays/menus/limitssettingsmenu.cpp index aa5d1a6..ad13e7d 100644 --- a/main/displays/menus/limitssettingsmenu.cpp +++ b/main/displays/menus/limitssettingsmenu.cpp @@ -1,10 +1,11 @@ #include "limitssettingsmenu.h" // 3rdparty lib includes -#include "changevaluedisplay.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" +#include +#include +#include +#include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/lockscreensettingsmenu.cpp b/main/displays/menus/lockscreensettingsmenu.cpp index 2c594dd..850b9b1 100644 --- a/main/displays/menus/lockscreensettingsmenu.cpp +++ b/main/displays/menus/lockscreensettingsmenu.cpp @@ -1,12 +1,13 @@ #include "lockscreensettingsmenu.h" // 3rdparty lib includes -#include "menuitem.h" -#include "actions/toggleboolaction.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" -#include "checkboxicon.h" -#include "changevaluedisplay.h" +#include +#include +#include +#include +#include +#include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/selectmodemenu.cpp b/main/displays/menus/selectmodemenu.cpp index 6da3ad0..e6d4526 100644 --- a/main/displays/menus/selectmodemenu.cpp +++ b/main/displays/menus/selectmodemenu.cpp @@ -1,10 +1,13 @@ #include "selectmodemenu.h" +// 3rdparty lib includes +#include +#include +#include +#include + // local includes #include "utils.h" -#include "actions/multiaction.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" #include "globals.h" #include "modes/defaultmode.h" #include "modes/tempomatmode.h" diff --git a/main/displays/menus/tempomatmodesettingsmenu.cpp b/main/displays/menus/tempomatmodesettingsmenu.cpp index 0754106..472b52e 100644 --- a/main/displays/menus/tempomatmodesettingsmenu.cpp +++ b/main/displays/menus/tempomatmodesettingsmenu.cpp @@ -1,10 +1,11 @@ #include "tempomatmodesettingsmenu.h" // 3rdparty lib includes -#include "changevaluedisplay.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" +#include +#include +#include +#include +#include // local includes #include "displays/bobbychangevaluedisplay.h" diff --git a/main/displays/menus/wifiapsettingsmenu.cpp b/main/displays/menus/wifiapsettingsmenu.cpp index 8701c00..614ebc4 100644 --- a/main/displays/menus/wifiapsettingsmenu.cpp +++ b/main/displays/menus/wifiapsettingsmenu.cpp @@ -12,9 +12,12 @@ #include #include #include +#include // local includes #include "displays/bobbychangevaluedisplay.h" +#include "changevaluedisplay.h" +#include "changevaluedisplay_wifi_auth_mode_t.h" #include "wifiapclientsmenu.h" #include "networksettingsmenu.h" #include "accessors/wifiapconfigaccessors.h" @@ -29,8 +32,18 @@ constexpr char TEXT_ENABLED[] = "Enabled"; constexpr char TEXT_DISABLEWHENONLINE[] = "Disable when online"; constexpr char TEXT_BACK[] = "Back"; -constexpr char TEXT_CHANNEL[] = "Channel"; -constexpr char TEXT_CHANNEL_FORMATTED[] = "Channel: &2"; +constexpr char TEXT_SSID[] = "AP SSID"; +constexpr char TEXT_SSID_FORMATTED[] = "&sssid: &2"; +constexpr char TEXT_KEY[] = "AP Key"; +constexpr char TEXT_KEY_FORMATTED[] = "&skey: &2"; +constexpr char TEXT_IP[] = "AP IP"; +constexpr char TEXT_IP_FORMATTED[] = "&sIP: &f&2"; +constexpr char TEXT_MASK[] = "AP Mask"; +constexpr char TEXT_MASK_FORMATTED[] = "&sMask: &f&2"; +constexpr char TEXT_CHANNEL[] = "AP Channel"; +constexpr char TEXT_CHANNEL_FORMATTED[] = "&sChannel: &f&2"; +constexpr char TEXT_AUTHMODE[] = "AP Authmode"; +constexpr char TEXT_AUTHMODE_FORMATTED[] = "&sAuthmode: &2"; class WifiApClientsAction : public virtual ActionInterface { @@ -45,21 +58,28 @@ using ApChannelChangeScreen = espgui::makeComponent< espgui::BackActionInterface>, espgui::SwitchScreenAction >; + +using ApAuthmodeChangeScreen = espgui::makeComponent< + BobbyChangeValueDisplay, + espgui::StaticText, + WifiApAuthmodeAccessor, + espgui::BackActionInterface>, + espgui::SwitchScreenAction +>; } // namespace WifiApSettingsMenu::WifiApSettingsMenu() { - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiApEnabledAccessor>>(); //constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiApDisableWhenOnlineAccessor>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); constructMenuItem, SwitchScreenAction>>(); - + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem>(); constructMenuItem>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } diff --git a/main/newsettings.h b/main/newsettings.h index ac8bdfb..4b417c1 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -104,6 +104,8 @@ public: ConfigWrapper wifiApEnabled {true, DoReset, {}, "wifiApEnabled" }; ConfigWrapper wifiApName {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "wifiApName" }; ConfigWrapper wifiApKey {"Passwort_123", DoReset, StringOr>, "wifiApKey" }; + ConfigWrapper wifiApIp{wifi_stack::ip_address_t{10, 0, 0, 1},DoReset, {}, "wifiApIp" }; + ConfigWrapper wifiApMask{wifi_stack::ip_address_t{255, 255, 255, 0},DoReset, {}, "wifiApMask" }; ConfigWrapper wifiApChannel {1, DoReset, MinMaxValue, "wifiApChannel" }; ConfigWrapper wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" }; @@ -270,6 +272,8 @@ public: x(wifiApEnabled) \ x(wifiApName) \ x(wifiApKey) \ + x(wifiApIp) \ + x(wifiApMask) \ x(wifiApChannel) \ x(wifiApAuthmode) \ \ diff --git a/main/texthelpers/wifiaptexthelpers.cpp b/main/texthelpers/wifiaptexthelpers.cpp index 61dc6bc..1d538b6 100644 --- a/main/texthelpers/wifiaptexthelpers.cpp +++ b/main/texthelpers/wifiaptexthelpers.cpp @@ -8,22 +8,8 @@ #include #include -// local includes -#include "newsettings.h" -#include "wifi_bobbycar.h" - using namespace espgui; -std::string WifiApNameText::text() const -{ - return fmt::format("&sssid: &f{}", richTextEscape(configs.wifiApName.value)); -} - -std::string WifiApKeyText::text() const -{ - return fmt::format("&skey: &f{}", richTextEscape(configs.wifiApKey.value)); -} - std::string WifiApMacText::text() const { std::string text = "&smac: &f"; @@ -35,16 +21,6 @@ std::string WifiApMacText::text() const return text; } -std::string WifiApIpText::text() const -{ - return fmt::format("&sip: &f{}", wifi_stack::toString(apIP)); -} - -std::string WifiApMaskText::text() const -{ - return fmt::format("&smask: &f{}", wifi_stack::toString(netMsk)); -} - std::string WifiApHostnameText::text() const { if (auto hostname = wifi_stack::get_hostname_for_interface(ESP_IF_WIFI_AP)) diff --git a/main/texthelpers/wifiaptexthelpers.h b/main/texthelpers/wifiaptexthelpers.h index b634d07..daaa9e3 100644 --- a/main/texthelpers/wifiaptexthelpers.h +++ b/main/texthelpers/wifiaptexthelpers.h @@ -3,36 +3,12 @@ // 3rdparty lib includes #include -class WifiApNameText : public virtual espgui::TextInterface -{ -public: - std::string text() const override; -}; - -class WifiApKeyText : public virtual espgui::TextInterface -{ -public: - std::string text() const override; -}; - class WifiApMacText : public virtual espgui::TextInterface { public: std::string text() const override; }; -class WifiApIpText : public virtual espgui::TextInterface -{ -public: - std::string text() const override; -}; - -class WifiApMaskText : public virtual espgui::TextInterface -{ -public: - std::string text() const override; -}; - class WifiApHostnameText : public virtual espgui::TextInterface { public: diff --git a/main/wifi_bobbycar.cpp b/main/wifi_bobbycar.cpp index 1e81d60..6124f37 100644 --- a/main/wifi_bobbycar.cpp +++ b/main/wifi_bobbycar.cpp @@ -131,9 +131,9 @@ std::optional createApConfig() .ssid = configs.wifiApName.value, .key = configs.wifiApKey.value, .static_ip = { - .ip = apIP, - .subnet = netMsk, - .gateway = apIP + .ip = configs.wifiApIp.value, + .subnet = configs.wifiApMask.value, + .gateway = configs.wifiApIp.value, }, .channel = configs.wifiApChannel.value, .authmode = configs.wifiApAuthmode.value, diff --git a/main/wifi_bobbycar.h b/main/wifi_bobbycar.h index 9bad512..f063f72 100644 --- a/main/wifi_bobbycar.h +++ b/main/wifi_bobbycar.h @@ -6,9 +6,6 @@ // 3rdparty lib includes #include -constexpr const wifi_stack::ip_address_t apIP{10, 0, 0, 1}; -constexpr const wifi_stack::ip_address_t netMsk{255, 255, 255, 0}; - void wifi_begin(); void wifi_update(); From 4b9a36f50784bb824ba850c673619308695a4ad7 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 29 Dec 2021 21:53:47 +0100 Subject: [PATCH 5/6] Implemented error handler in ChangeValueDisplays --- components/esp-gui-lib | 2 +- main/CMakeLists.txt | 6 +- main/accessorhelpers.h | 59 +++++++++- main/accessors/settingsaccessors.h | 48 ++++---- main/accessors/wifistaconfigaccessors.cpp | 36 ------ main/accessors/wifistaconfigaccessors.h | 81 +++++--------- main/bobbyerrorhandler.cpp | 14 +++ main/bobbyerrorhandler.h | 9 ++ main/displays/bobbychangevaluedisplay.h | 5 +- main/displays/bobbydisplay.cpp | 3 + main/displays/bobbydisplay.h | 3 - main/displays/bobbydisplaywithtitle.cpp | 3 + main/displays/bobbydisplaywithtitle.h | 3 - main/displays/bobbymenudisplay.cpp | 3 + main/displays/bobbymenudisplay.h | 3 - main/displays/bobbypopupdisplay.cpp | 29 +++++ main/displays/bobbypopupdisplay.h | 18 +++ main/displays/menus/batterymenu.cpp | 12 +- .../boardcomputerhardwaresettingsmenu.cpp | 48 ++++---- main/displays/menus/buzzermenu.cpp | 32 +++--- main/displays/menus/cloudsettingsmenu.cpp | 12 +- .../menus/controllerhardwaresettingsmenu.cpp | 20 ++-- main/displays/menus/debugmenu.cpp | 6 +- .../menus/defaultmodesettingsmenu.cpp | 44 ++++---- main/displays/menus/handbremssettingsmenu.cpp | 4 +- main/displays/menus/larsmmodesettingsmenu.cpp | 4 +- main/displays/menus/ledstripmenu.cpp | 36 +++--- main/displays/menus/limitssettingsmenu.cpp | 24 ++-- .../displays/menus/lockscreensettingsmenu.cpp | 16 +-- main/displays/menus/mosfetsmenu.h | 2 +- .../menus/motortestmodesettingsmenu.cpp | 8 +- main/displays/menus/settingsmenu.cpp | 2 +- .../menus/tempomatmodesettingsmenu.cpp | 4 +- main/displays/menus/timersmenu.cpp | 4 +- main/displays/menus/timesettingsmenu.cpp | 8 +- main/displays/menus/udpcloudsettingsmenu.cpp | 4 +- main/displays/menus/wifiapsettingsmenu.cpp | 4 +- main/displays/popups/alertdisplay.cpp | 105 ------------------ main/displays/popups/alertdisplay.h | 30 ----- 39 files changed, 336 insertions(+), 418 deletions(-) create mode 100644 main/bobbyerrorhandler.cpp create mode 100644 main/bobbyerrorhandler.h create mode 100644 main/displays/bobbypopupdisplay.cpp create mode 100644 main/displays/bobbypopupdisplay.h delete mode 100644 main/displays/popups/alertdisplay.cpp delete mode 100644 main/displays/popups/alertdisplay.h diff --git a/components/esp-gui-lib b/components/esp-gui-lib index a29efa4..a279559 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit a29efa4e47dbf422be4f4fa22d52c62ff9089e6d +Subproject commit a279559e768b70c919a1516f8401a4fae4821c54 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 98f4f12..4c12d22 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -8,6 +8,7 @@ set(headers bluetoothtexthelpers.h bmsutils.h bobbybuttons.h + bobbyerrorhandler.h buildserver.h buttons.h can.h @@ -107,6 +108,7 @@ set(headers displays/bobbydisplaywithtitle.h displays/bobbygraphdisplay.h displays/bobbymenudisplay.h + displays/bobbypopupdisplay.h displays/bobbysplitgraphdisplay.h displays/calibratedisplay.h displays/calibratevoltagedisplay.h @@ -183,7 +185,6 @@ set(headers displays/menus/wifistasettingsmenu.h displays/metersdisplay.h displays/pingpongdisplay.h - displays/popups/alertdisplay.h displays/poweroffdisplay.h displays/powersupplydisplay.h displays/qrcodedebug.h @@ -241,6 +242,7 @@ set(sources bluetoothtexthelpers.cpp bmsutils.cpp bobbybuttons.cpp + bobbyerrorhandler.cpp buildserver.cpp buttons.cpp can.cpp @@ -337,6 +339,7 @@ set(sources displays/bobbydisplaywithtitle.cpp displays/bobbygraphdisplay.cpp displays/bobbymenudisplay.cpp + displays/bobbypopupdisplay.cpp displays/bobbysplitgraphdisplay.cpp displays/calibratedisplay.cpp displays/calibratevoltagedisplay.cpp @@ -411,7 +414,6 @@ set(sources displays/menus/wifistasettingsmenu.cpp displays/metersdisplay.cpp displays/pingpongdisplay.cpp - displays/popups/alertdisplay.cpp displays/poweroffdisplay.cpp displays/powersupplydisplay.cpp displays/qrcodedebug.cpp diff --git a/main/accessorhelpers.h b/main/accessorhelpers.h index 7e0ce07..d558f5a 100644 --- a/main/accessorhelpers.h +++ b/main/accessorhelpers.h @@ -1,5 +1,8 @@ #pragma once +// system includes +#include + // 3rdparty lib includes #include @@ -11,7 +14,15 @@ template struct RefAccessorSaveSettings : public virtual espgui::RefAccessor { - void setValue(T value) override { espgui::RefAccessor::setValue(value); saveSettings(); }; + typename espgui::AccessorInterface::setter_result_t setValue(T value) override + { + espgui::RefAccessor::setValue(value); + + if (!saveSettings()) + return tl::make_unexpected("saveSettings() failed!"); + + return {}; + }; }; template @@ -19,6 +30,48 @@ struct NewSettingsAccessor : public virtual espgui::AccessorInterface { virtual ConfigWrapper& getConfig() const = 0; - T getValue() const override { return getConfig().value; } - void setValue(T value) override { configs.write_config(getConfig(), value); } + T getValue() const override + { + return getConfig().value; + } + + typename espgui::AccessorInterface::setter_result_t setValue(T value) override + { + return configs.write_config(getConfig(), value); + } +}; + +template +struct NewSettingsChronoAdaptorAccessor; + +template<> +struct NewSettingsChronoAdaptorAccessor : public virtual espgui::AccessorInterface +{ + virtual ConfigWrapper& getConfig() const = 0; + + int32_t getValue() const override + { + return getConfig().value.count(); + } + + typename espgui::AccessorInterface::setter_result_t setValue(int32_t value) override + { + return configs.write_config(getConfig(), espchrono::minutes32{value}); + } +}; + +template<> +struct NewSettingsChronoAdaptorAccessor : public virtual espgui::AccessorInterface +{ + virtual ConfigWrapper& getConfig() const = 0; + + int32_t getValue() const override + { + return getConfig().value.count(); + } + + typename espgui::AccessorInterface::setter_result_t setValue(int32_t value) override + { + return configs.write_config(getConfig(), espchrono::milliseconds32{value}); + } }; diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index bd8dbae..2230674 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -27,7 +27,13 @@ struct IDcMaxAccessor : public RefAccessorSaveSettings { int16_t &getRe struct NMotMaxKmhAccessor : public virtual espgui::AccessorInterface { int16_t getValue() const override { return convertToKmh(settings.limits.nMotMax); } - void setValue(int16_t value) override { settings.limits.nMotMax = convertFromKmh(value); saveSettings(); } + espgui::AccessorInterface::setter_result_t setValue(int16_t value) override + { + settings.limits.nMotMax = convertFromKmh(value); + if (!saveSettings()) + return tl::make_unexpected("saveSettings() failed!"); + return {}; + } }; struct NMotMaxRpmAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.nMotMax; } }; struct FieldWeakMaxAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.limits.fieldWeakMax; } }; @@ -50,32 +56,14 @@ struct CloudTransmitTimeoutAccessor : public RefAccessorSaveSettings { #endif // Time -struct TimezoneOffsetAccessor : public virtual espgui::AccessorInterface -{ - int32_t getValue() const override { return configs.timezoneOffset.value.count(); } - void setValue(int32_t value) override { configs.write_config(configs.timezoneOffset, espchrono::minutes32{value}); } -}; -struct DaylightSavingModeAccessor : public virtual espgui::AccessorInterface -{ - espchrono::DayLightSavingMode getValue() const override { return configs.timeDst.value; } - void setValue(espchrono::DayLightSavingMode value) override { configs.write_config(configs.timeDst, value); } -}; +//struct TimezoneOffsetAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timezoneOffset; } }; +struct TimezoneOffsetAccessor : public NewSettingsChronoAdaptorAccessor { ConfigWrapper &getConfig() const override { return configs.timezoneOffset; } }; +struct DaylightSavingModeAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timeDst; } }; #ifdef FEATURE_NTP -struct TimeServerEnabledAccessor : public virtual espgui::AccessorInterface -{ - bool getValue() const override { return configs.timeServerEnabled.value; } - void setValue(bool value) override { configs.write_config(configs.timeServerEnabled, value); } -}; -struct TimeSyncModeAccessor : public virtual espgui::AccessorInterface -{ - sntp_sync_mode_t getValue() const override { return configs.timeSyncMode.value; } - void setValue(sntp_sync_mode_t value) override { configs.write_config(configs.timeSyncMode, value); } -}; -struct TimeSyncIntervalAccessor : public virtual espgui::AccessorInterface -{ - int32_t getValue() const override { return configs.timeSyncInterval.value.count(); } - void setValue(int32_t value) override { configs.write_config(configs.timeSyncInterval, espchrono::milliseconds32{value}); } -}; +struct TimeServerEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timeServerEnabled; } }; +struct TimeSyncModeAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timeSyncMode; } }; +//struct TimeSyncIntervalAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.timeSyncInterval; } }; +struct TimeSyncIntervalAccessor : public NewSettingsChronoAdaptorAccessor { ConfigWrapper &getConfig() const override { return configs.timeSyncInterval; } }; #endif // Controller Hardware @@ -93,7 +81,13 @@ struct WheelDiameterMmAccessor : public RefAccessorSaveSettings { int16 struct WheelDiameterInchAccessor : public virtual espgui::AccessorInterface { float getValue() const override { return convertToInch(settings.controllerHardware.wheelDiameter); } - void setValue(float value) override { settings.controllerHardware.wheelDiameter = convertFromInch(value); saveSettings(); } + espgui::AccessorInterface::setter_result_t setValue(float value) override + { + settings.controllerHardware.wheelDiameter = convertFromInch(value); + if (!saveSettings()) + return tl::make_unexpected("saveSettings() failed!"); + return {}; + } }; struct NumMagnetPolesAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.controllerHardware.numMagnetPoles; } }; struct SwapFrontBackAccessor : public RefAccessorSaveSettings { diff --git a/main/accessors/wifistaconfigaccessors.cpp b/main/accessors/wifistaconfigaccessors.cpp index 115a6f6..102e2e2 100644 --- a/main/accessors/wifistaconfigaccessors.cpp +++ b/main/accessors/wifistaconfigaccessors.cpp @@ -1,39 +1,3 @@ #include "wifistaconfigaccessors.h" -// local includes -#include "newsettings.h" -using namespace espgui; - -bool WifiStaEnabledAccessor::getValue() const { return configs.wifiStaEnabled.value; } -void WifiStaEnabledAccessor::setValue(bool value) { configs.write_config(configs.wifiStaEnabled, value); } - -std::string WifiStaConfigSsidAccessor::getValue() const { return configs.wifi_configs[m_index].ssid.value; } -void WifiStaConfigSsidAccessor::setValue(std::string value) { configs.write_config(configs.wifi_configs[m_index].ssid, value); } - -std::string WifiStaConfigKeyAccessor::getValue() const { return configs.wifi_configs[m_index].key.value; } -void WifiStaConfigKeyAccessor::setValue(std::string value) { configs.write_config(configs.wifi_configs[m_index].key, value); } - -bool WifiStaConfigUseStaticIpAccessor::getValue() const { return configs.wifi_configs[m_index].useStaticIp.value; } -void WifiStaConfigUseStaticIpAccessor::setValue(bool value) { configs.write_config(configs.wifi_configs[m_index].useStaticIp, value); } - -wifi_stack::ip_address_t WifiStaConfigStaticIpAccessor::getValue() const { return configs.wifi_configs[m_index].staticIp.value; } -void WifiStaConfigStaticIpAccessor::setValue(wifi_stack::ip_address_t value) { configs.write_config(configs.wifi_configs[m_index].staticIp, value); } - -wifi_stack::ip_address_t WifiStaConfigStaticSubnetAccessor::getValue() const { return configs.wifi_configs[m_index].staticSubnet.value; } -void WifiStaConfigStaticSubnetAccessor::setValue(wifi_stack::ip_address_t value) { configs.write_config(configs.wifi_configs[m_index].staticSubnet, value); } - -wifi_stack::ip_address_t WifiStaConfigStaticGatewayAccessor::getValue() const { return configs.wifi_configs[m_index].staticGateway.value; } -void WifiStaConfigStaticGatewayAccessor::setValue(wifi_stack::ip_address_t value) { configs.write_config(configs.wifi_configs[m_index].staticGateway, value); } - -bool WifiStaConfigUseStaticDnsAccessor::getValue() const { return configs.wifi_configs[m_index].useStaticDns.value; } -void WifiStaConfigUseStaticDnsAccessor::setValue(bool value) { configs.write_config(configs.wifi_configs[m_index].useStaticDns, value); } - -wifi_stack::ip_address_t WifiStaConfigStaticDns0Accessor::getValue() const { return configs.wifi_configs[m_index].staticDns0.value; } -void WifiStaConfigStaticDns0Accessor::setValue(wifi_stack::ip_address_t value) { configs.write_config(configs.wifi_configs[m_index].staticDns0, value); } - -wifi_stack::ip_address_t WifiStaConfigStaticDns1Accessor::getValue() const { return configs.wifi_configs[m_index].staticDns1.value; } -void WifiStaConfigStaticDns1Accessor::setValue(wifi_stack::ip_address_t value) { configs.write_config(configs.wifi_configs[m_index].staticDns1, value); } - -wifi_stack::ip_address_t WifiStaConfigStaticDns2Accessor::getValue() const { return configs.wifi_configs[m_index].staticDns2.value; } -void WifiStaConfigStaticDns2Accessor::setValue(wifi_stack::ip_address_t value) { configs.write_config(configs.wifi_configs[m_index].staticDns2, value); } diff --git a/main/accessors/wifistaconfigaccessors.h b/main/accessors/wifistaconfigaccessors.h index 5c2a835..bfeaa5f 100644 --- a/main/accessors/wifistaconfigaccessors.h +++ b/main/accessors/wifistaconfigaccessors.h @@ -9,129 +9,98 @@ #include #include -class WifiStaEnabledAccessor : public virtual espgui::AccessorInterface -{ -public: - bool getValue() const override; - void setValue(bool value) override; -}; +// local includes +#include "newsettings.h" +#include "accessorhelpers.h" -class WifiStaConfigSsidAccessor : public virtual espgui::AccessorInterface +struct WifiStaEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiStaEnabled; } }; + +class WifiStaConfigSsidAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigSsidAccessor(int index) : m_index{index} {} - - std::string getValue() const override; - void setValue(std::string value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].ssid; } private: const int m_index; }; -class WifiStaConfigKeyAccessor : public virtual espgui::AccessorInterface +class WifiStaConfigKeyAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigKeyAccessor(int index) : m_index{index} {} - - std::string getValue() const override; - void setValue(std::string value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].key; } private: const int m_index; }; -class WifiStaConfigUseStaticIpAccessor : public virtual espgui::AccessorInterface +class WifiStaConfigUseStaticIpAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigUseStaticIpAccessor(int index) : m_index{index} {} - - bool getValue() const override; - void setValue(bool value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].useStaticIp; } private: const int m_index; }; -class WifiStaConfigStaticIpAccessor : public virtual espgui::AccessorInterface +class WifiStaConfigStaticIpAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigStaticIpAccessor(int index) : m_index{index} {} - - wifi_stack::ip_address_t getValue() const override; - void setValue(wifi_stack::ip_address_t value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].staticIp; } private: const int m_index; }; -class WifiStaConfigStaticSubnetAccessor : public virtual espgui::AccessorInterface +class WifiStaConfigStaticSubnetAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigStaticSubnetAccessor(int index) : m_index{index} {} - - wifi_stack::ip_address_t getValue() const override; - void setValue(wifi_stack::ip_address_t value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].staticSubnet; } private: const int m_index; }; -class WifiStaConfigStaticGatewayAccessor : public virtual espgui::AccessorInterface +class WifiStaConfigStaticGatewayAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigStaticGatewayAccessor(int index) : m_index{index} {} - - wifi_stack::ip_address_t getValue() const override; - void setValue(wifi_stack::ip_address_t value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].staticGateway; } private: const int m_index; }; -class WifiStaConfigUseStaticDnsAccessor : public virtual espgui::AccessorInterface +class WifiStaConfigUseStaticDnsAccessor : public virtual NewSettingsAccessor { public: WifiStaConfigUseStaticDnsAccessor(int index) : m_index{index} {} - - bool getValue() const override; - void setValue(bool value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].useStaticDns; } private: const int m_index; }; -class WifiStaConfigStaticDns0Accessor : public virtual espgui::AccessorInterface +class WifiStaConfigStaticDns0Accessor : public virtual NewSettingsAccessor { public: WifiStaConfigStaticDns0Accessor(int index) : m_index{index} {} - - wifi_stack::ip_address_t getValue() const override; - void setValue(wifi_stack::ip_address_t value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].staticDns0; } private: const int m_index; }; -class WifiStaConfigStaticDns1Accessor : public virtual espgui::AccessorInterface +class WifiStaConfigStaticDns1Accessor : public virtual NewSettingsAccessor { public: WifiStaConfigStaticDns1Accessor(int index) : m_index{index} {} - - wifi_stack::ip_address_t getValue() const override; - void setValue(wifi_stack::ip_address_t value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].staticDns1; } private: const int m_index; }; -class WifiStaConfigStaticDns2Accessor : public virtual espgui::AccessorInterface +class WifiStaConfigStaticDns2Accessor : public virtual NewSettingsAccessor { public: WifiStaConfigStaticDns2Accessor(int index) : m_index{index} {} - - wifi_stack::ip_address_t getValue() const override; - void setValue(wifi_stack::ip_address_t value) override; - + ConfigWrapper& getConfig() const override { return configs.wifi_configs[m_index].staticDns2; } private: const int m_index; }; diff --git a/main/bobbyerrorhandler.cpp b/main/bobbyerrorhandler.cpp new file mode 100644 index 0000000..fc90faf --- /dev/null +++ b/main/bobbyerrorhandler.cpp @@ -0,0 +1,14 @@ +#include "bobbyerrorhandler.h" + +// 3rdparty lib includes +#include + +// local includes +#include "displays/bobbypopupdisplay.h" + +void BobbyErrorHandler::errorOccured(std::string &&error) +{ + auto newDisplay = std::make_unique(std::move(error), std::move(espgui::currentDisplay)); + newDisplay->initOverlay(); + espgui::currentDisplay = std::move(newDisplay); +} diff --git a/main/bobbyerrorhandler.h b/main/bobbyerrorhandler.h new file mode 100644 index 0000000..c62f8fa --- /dev/null +++ b/main/bobbyerrorhandler.h @@ -0,0 +1,9 @@ +#pragma once + +// 3rdparty lib includes +#include + +struct BobbyErrorHandler : public virtual espgui::ErrorHandlerInterface +{ + void errorOccured(std::string &&error) override; +}; diff --git a/main/displays/bobbychangevaluedisplay.h b/main/displays/bobbychangevaluedisplay.h index 6f7dcb1..7ba3065 100644 --- a/main/displays/bobbychangevaluedisplay.h +++ b/main/displays/bobbychangevaluedisplay.h @@ -5,9 +5,12 @@ // local includes #include "bobbybuttons.h" +#include "bobbyerrorhandler.h" template -class BobbyChangeValueDisplay : public espgui::ChangeValueDisplay +class BobbyChangeValueDisplay : + public espgui::ChangeValueDisplay, + public virtual BobbyErrorHandler { using Base = espgui::ChangeValueDisplay; diff --git a/main/displays/bobbydisplay.cpp b/main/displays/bobbydisplay.cpp index 79c0f64..dda2469 100644 --- a/main/displays/bobbydisplay.cpp +++ b/main/displays/bobbydisplay.cpp @@ -1,5 +1,8 @@ #include "bobbydisplay.h" +// local includes +#include "bobbybuttons.h" + void BobbyDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); diff --git a/main/displays/bobbydisplay.h b/main/displays/bobbydisplay.h index 0a542f0..60c1e70 100644 --- a/main/displays/bobbydisplay.h +++ b/main/displays/bobbydisplay.h @@ -3,9 +3,6 @@ // 3rdparty lib includes #include -// local includes -#include "bobbybuttons.h" - class BobbyDisplay : public espgui::Display { using Base = espgui::Display; diff --git a/main/displays/bobbydisplaywithtitle.cpp b/main/displays/bobbydisplaywithtitle.cpp index dfcf76b..55f8db2 100644 --- a/main/displays/bobbydisplaywithtitle.cpp +++ b/main/displays/bobbydisplaywithtitle.cpp @@ -1,5 +1,8 @@ #include "bobbydisplaywithtitle.h" +// local includes +#include "bobbybuttons.h" + void BobbyDisplayWithTitle::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); diff --git a/main/displays/bobbydisplaywithtitle.h b/main/displays/bobbydisplaywithtitle.h index 84e8884..0edb868 100644 --- a/main/displays/bobbydisplaywithtitle.h +++ b/main/displays/bobbydisplaywithtitle.h @@ -3,9 +3,6 @@ // 3rdparty lib includes #include -// local includes -#include "bobbybuttons.h" - class BobbyDisplayWithTitle : public espgui::DisplayWithTitle { using Base = espgui::DisplayWithTitle; diff --git a/main/displays/bobbymenudisplay.cpp b/main/displays/bobbymenudisplay.cpp index a1d3ab3..2066720 100644 --- a/main/displays/bobbymenudisplay.cpp +++ b/main/displays/bobbymenudisplay.cpp @@ -1,5 +1,8 @@ #include "bobbymenudisplay.h" +// local includes +#include "bobbybuttons.h" + void BobbyMenuDisplay::rawButtonPressed(uint8_t button) { //Base::rawButtonPressed(button); diff --git a/main/displays/bobbymenudisplay.h b/main/displays/bobbymenudisplay.h index bb94e3a..4e92c1b 100644 --- a/main/displays/bobbymenudisplay.h +++ b/main/displays/bobbymenudisplay.h @@ -3,9 +3,6 @@ // 3rdparty lib includes #include -// local includes -#include "bobbybuttons.h" - class BobbyMenuDisplay : public espgui::MenuDisplay { using Base = espgui::MenuDisplay; diff --git a/main/displays/bobbypopupdisplay.cpp b/main/displays/bobbypopupdisplay.cpp new file mode 100644 index 0000000..d163303 --- /dev/null +++ b/main/displays/bobbypopupdisplay.cpp @@ -0,0 +1,29 @@ +#include "bobbypopupdisplay.h" + +// local includes +#include "bobbybuttons.h" + +void BobbyPopupDisplay::rawButtonPressed(uint8_t button) +{ + //Base::rawButtonPressed(button); + if (const auto translated = translateRawButton(button)) + buttonPressed(*translated); +} + +void BobbyPopupDisplay::rawButtonReleased(uint8_t button) +{ + //Base::rawButtonReleased(button); + if (const auto translated = translateRawButton(button)) + buttonReleased(*translated); +} + +void BobbyPopupDisplay::buttonPressed(espgui::Button button) +{ + //Base::buttonPressed(button); + buttonPressedCommon(button); +} + +void BobbyPopupDisplay::buttonReleased(espgui::Button button) +{ + //Base::buttonReleased(button); +} diff --git a/main/displays/bobbypopupdisplay.h b/main/displays/bobbypopupdisplay.h new file mode 100644 index 0000000..b680df3 --- /dev/null +++ b/main/displays/bobbypopupdisplay.h @@ -0,0 +1,18 @@ +#pragma once + +// 3rdparty lib includes +#include + +class BobbyPopupDisplay : public espgui::PopupDisplay +{ + using Base = espgui::PopupDisplay; + +public: + using Base::Base; + + void rawButtonPressed(uint8_t button) override; + void rawButtonReleased(uint8_t button) override; + + void buttonPressed(espgui::Button button) override; + void buttonReleased(espgui::Button button) override; +}; diff --git a/main/displays/menus/batterymenu.cpp b/main/displays/menus/batterymenu.cpp index 4851961..e41428b 100644 --- a/main/displays/menus/batterymenu.cpp +++ b/main/displays/menus/batterymenu.cpp @@ -18,24 +18,24 @@ using BatteryCellSeriesChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BatterySeriesCellsAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using BatteryCellParallelChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BatteryParallelCellsAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using BatteryWHperKMChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BatteryWHperKMAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using namespace espgui; diff --git a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp index 64e96e0..4c9ed7e 100644 --- a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp +++ b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp @@ -48,36 +48,36 @@ using SampleCountChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, SampleCountAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GasMinChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GasMinAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GasMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GasMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using BremsMinChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BremsMinAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using BremsMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BremsMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; #if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW) @@ -85,8 +85,8 @@ using DPadDebounceChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DPadDebounceAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; #endif @@ -108,43 +108,43 @@ using GametrakXMinChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GametrakXMinAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GametrakXMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GametrakXMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GametrakYMinChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GametrakYMinAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GametrakYMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GametrakYMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GametrakDistMinChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GametrakDistMinAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using GametrakDistMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, GametrakDistMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; #endif } // namespace diff --git a/main/displays/menus/buzzermenu.cpp b/main/displays/menus/buzzermenu.cpp index cb1866b..3a09f02 100644 --- a/main/displays/menus/buzzermenu.cpp +++ b/main/displays/menus/buzzermenu.cpp @@ -21,8 +21,8 @@ using FrontFreqChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, FrontFreqAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; struct FrontPatternAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.pattern; } }; @@ -30,8 +30,8 @@ using FrontPatternChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, FrontPatternAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; struct BackFreqAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.back.command.buzzer.freq; } }; @@ -39,8 +39,8 @@ using BackFreqChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BackFreqAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; struct BackPatternAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.back.command.buzzer.pattern; } }; @@ -48,37 +48,37 @@ using BackPatternChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BackPatternAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using ReverseBeepFreq0ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, ReverseBeepFreq0Accessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using ReverseBeepFreq1ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, ReverseBeepFreq1Accessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using ReverseBeepDuration0ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, ReverseBeepDuration0Accessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using ReverseBeepDuration1ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, ReverseBeepDuration1Accessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/cloudsettingsmenu.cpp b/main/displays/menus/cloudsettingsmenu.cpp index 9f2479a..227072b 100644 --- a/main/displays/menus/cloudsettingsmenu.cpp +++ b/main/displays/menus/cloudsettingsmenu.cpp @@ -24,8 +24,8 @@ using CloudTransmitTimeoutChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CloudTransmitTimeoutAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; struct CloudBufferLengthText : public virtual espgui::TextInterface @@ -41,16 +41,16 @@ using CloudCollectRateChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CloudCollectRateAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using CloudSendRateChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CloudSendRateAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/controllerhardwaresettingsmenu.cpp b/main/displays/menus/controllerhardwaresettingsmenu.cpp index 8d4b4a5..3d9a092 100644 --- a/main/displays/menus/controllerhardwaresettingsmenu.cpp +++ b/main/displays/menus/controllerhardwaresettingsmenu.cpp @@ -24,38 +24,38 @@ using WheelDiameterMmChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, WheelDiameterMmAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using WheelDiameterInchChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, WheelDiameterInchAccessor, espgui::RatioNumberStep>, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using NumMagnetPolesChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, NumMagnetPolesAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; #ifdef FEATURE_CAN using CanTransmitTimeoutChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CanTransmitTimeoutAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using CanReceiveTimeoutChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CanReceiveTimeoutAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; #endif } // namespace diff --git a/main/displays/menus/debugmenu.cpp b/main/displays/menus/debugmenu.cpp index c7a2cce..af0fb81 100644 --- a/main/displays/menus/debugmenu.cpp +++ b/main/displays/menus/debugmenu.cpp @@ -28,7 +28,7 @@ #include "displays/menus/dynamicdebugmenu.h" #include "displays/menus/mainmenu.h" #include "displays/menus/batterydebugmenu.h" -#include "displays/popups/alertdisplay.cpp" +#include "bobbyerrorhandler.h" namespace { class AlertAction : public espgui::MenuItem @@ -37,9 +37,7 @@ public: std::string text() const override { return "Open popup"; } void triggered() override { - auto newDisplay = std::make_unique("Das\nist\nein sehr langer text, der nicht in eine zeile passt", std::move(currentDisplay)); - newDisplay->initOverlay(); - currentDisplay = std::move(newDisplay); + BobbyErrorHandler{}.errorOccured("Das\nist\nein sehr langer text, der nicht in eine zeile passt"); } }; } // namespace diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index faf0cfa..d62a0e9 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -37,78 +37,78 @@ using DefaultModeSmoothingChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeSmoothingAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeFwSmoothingLowerLimitChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeFrontPercentageChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeFrontPercentageAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeBackPercentageChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeBackPercentageAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeAddSchwelleChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeAddSchwelleAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeGas1WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeGas1WertAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeGas2WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeGas2WertAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeBrems1WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeBrems1WertAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeBrems2WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeBrems2WertAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeHybridActivationLimitChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeHybridActivationLimitAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeHybridDeactivationLimitChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeHybridDeactivationLimitAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp index 011f472..182e1c4 100644 --- a/main/displays/menus/handbremssettingsmenu.cpp +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -21,8 +21,8 @@ using HandBremsTriggerTimeoutChangeValueDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, HandbremsTimeoutAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using HandBremsModeChangeValueDisplay = espgui::makeComponent< BobbyChangeValueDisplay, diff --git a/main/displays/menus/larsmmodesettingsmenu.cpp b/main/displays/menus/larsmmodesettingsmenu.cpp index 23bd2db..66c2cbf 100644 --- a/main/displays/menus/larsmmodesettingsmenu.cpp +++ b/main/displays/menus/larsmmodesettingsmenu.cpp @@ -33,8 +33,8 @@ using LarsmModeIterationsChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LarsmModeIterationsAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 3c3db7b..4fa59ab 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -30,72 +30,72 @@ using LedsCountChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedsCountAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using CenterOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CenterOffsetAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using SmallOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, SmallOffsetAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using BigOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BigOffsetAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DeziampereChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DeziampereAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using StVOOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedsStVOFrontOffsetAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using StVOLengthChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedsStVOFrontLengthAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using animationMultiplierChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, AnimationMultiplierAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using ledstripBrightnessChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedstripBrightnessAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; class AllCustomLedsOffAction : public virtual espgui::ActionInterface diff --git a/main/displays/menus/limitssettingsmenu.cpp b/main/displays/menus/limitssettingsmenu.cpp index ad13e7d..9c531ce 100644 --- a/main/displays/menus/limitssettingsmenu.cpp +++ b/main/displays/menus/limitssettingsmenu.cpp @@ -18,43 +18,43 @@ using IMotMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, IMotMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using IDcMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, IDcMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using NMotMaxKmhChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, NMotMaxKmhAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using NMotMaxRpmChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, NMotMaxRpmAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using FieldWeakMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, FieldWeakMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using PhaseAdvMaxChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, PhaseAdvMaxAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/lockscreensettingsmenu.cpp b/main/displays/menus/lockscreensettingsmenu.cpp index 850b9b1..f4e6080 100644 --- a/main/displays/menus/lockscreensettingsmenu.cpp +++ b/main/displays/menus/lockscreensettingsmenu.cpp @@ -20,32 +20,32 @@ using LockscreenPinDigit0ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LockscreenPinDigitAccessor<0>, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using LockscreenPinDigit1ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LockscreenPinDigitAccessor<1>, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using LockscreenPinDigit2ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LockscreenPinDigitAccessor<2>, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using LockscreenPinDigit3ChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LockscreenPinDigitAccessor<3>, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/mosfetsmenu.h b/main/displays/menus/mosfetsmenu.h index d142faa..2491f76 100644 --- a/main/displays/menus/mosfetsmenu.h +++ b/main/displays/menus/mosfetsmenu.h @@ -14,7 +14,7 @@ class GPIOAccessor : public virtual espgui::AccessorInterface { public: bool getValue() const override { return digitalRead(PIN); } - void setValue(bool value) override { digitalWrite(PIN, value ? HIGH : LOW); } + espgui::AccessorInterface::setter_result_t setValue(bool value) override { digitalWrite(PIN, value ? HIGH : LOW); return {}; } }; using Mosfet0Accessor = GPIOAccessor; diff --git a/main/displays/menus/motortestmodesettingsmenu.cpp b/main/displays/menus/motortestmodesettingsmenu.cpp index 6515db9..ede9186 100644 --- a/main/displays/menus/motortestmodesettingsmenu.cpp +++ b/main/displays/menus/motortestmodesettingsmenu.cpp @@ -17,16 +17,16 @@ using MotortestMultiplikatorChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, MotortestModeMultiplikatorAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using MotortestMaxPwmChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, MotortestMaxPwmAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/settingsmenu.cpp b/main/displays/menus/settingsmenu.cpp index c7e4928..893b8f2 100644 --- a/main/displays/menus/settingsmenu.cpp +++ b/main/displays/menus/settingsmenu.cpp @@ -49,7 +49,7 @@ namespace { struct BacklightAccessor : public virtual espgui::AccessorInterface { bool getValue() const override { return digitalRead(PINS_LEDBACKLIGHT) != ledBacklightInverted; } - void setValue(bool value) override { digitalWrite(PINS_LEDBACKLIGHT, value != ledBacklightInverted); } + espgui::AccessorInterface::setter_result_t setValue(bool value) override { digitalWrite(PINS_LEDBACKLIGHT, value != ledBacklightInverted); return {}; } }; #endif struct FrontLedAccessor : public espgui::RefAccessor { bool &getRef() const override { return controllers.front.command.led; } }; diff --git a/main/displays/menus/tempomatmodesettingsmenu.cpp b/main/displays/menus/tempomatmodesettingsmenu.cpp index 472b52e..f83956d 100644 --- a/main/displays/menus/tempomatmodesettingsmenu.cpp +++ b/main/displays/menus/tempomatmodesettingsmenu.cpp @@ -21,8 +21,8 @@ using TempomatModeCruiseMotTgtChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TempomatModeCruiseMotTgtAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using TempomatModeModelModeChangeScreen = espgui::makeComponent< diff --git a/main/displays/menus/timersmenu.cpp b/main/displays/menus/timersmenu.cpp index 4632fc7..16d3d43 100644 --- a/main/displays/menus/timersmenu.cpp +++ b/main/displays/menus/timersmenu.cpp @@ -16,8 +16,8 @@ using StatsUpdateRateChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, StatsUpdateRateAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } diff --git a/main/displays/menus/timesettingsmenu.cpp b/main/displays/menus/timesettingsmenu.cpp index 92dac51..5ba1e7e 100644 --- a/main/displays/menus/timesettingsmenu.cpp +++ b/main/displays/menus/timesettingsmenu.cpp @@ -48,8 +48,8 @@ using TimezoneOffsetChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TimezoneOffsetAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DaylightSavingModeChangeDisplay = espgui::makeComponent< @@ -73,8 +73,8 @@ using TimeSyncIntervalChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TimeSyncIntervalAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; class NtpSyncStatusText : public virtual espgui::TextInterface diff --git a/main/displays/menus/udpcloudsettingsmenu.cpp b/main/displays/menus/udpcloudsettingsmenu.cpp index c3197d9..c579663 100644 --- a/main/displays/menus/udpcloudsettingsmenu.cpp +++ b/main/displays/menus/udpcloudsettingsmenu.cpp @@ -21,8 +21,8 @@ using UdpCloudSendRateChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, UdpCloudSendIntervalAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/wifiapsettingsmenu.cpp b/main/displays/menus/wifiapsettingsmenu.cpp index 614ebc4..e0f2789 100644 --- a/main/displays/menus/wifiapsettingsmenu.cpp +++ b/main/displays/menus/wifiapsettingsmenu.cpp @@ -55,8 +55,8 @@ using ApChannelChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, WifiApChannelAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using ApAuthmodeChangeScreen = espgui::makeComponent< diff --git a/main/displays/popups/alertdisplay.cpp b/main/displays/popups/alertdisplay.cpp deleted file mode 100644 index aa68238..0000000 --- a/main/displays/popups/alertdisplay.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "alertdisplay.h" - -// 3rdparty lib includes -#include -#include -#include - -AlertDisplay::AlertDisplay(std::string &&message, std::unique_ptr &&lastDisplay) : - m_message{std::move(message)}, m_lastDisplay{std::move(lastDisplay)} -{ -} - -void AlertDisplay::initScreen() -{ - m_lastDisplay->initScreen(); - - initOverlay(); -} - -void AlertDisplay::buttonPressed(espgui::Button button) -{ - Base::buttonPressed(button); - - switch (button) - { - using espgui::Button; - case Button::Left: - case Button::Right: - closeOverlay(); - break; - default:; - } -} - -void AlertDisplay::initOverlay() -{ - constexpr auto leftMargin = 20; - constexpr auto rightMargin = leftMargin; - constexpr auto topMargin = 50; - constexpr auto bottomMargin = topMargin; - - const auto width = espgui::tft.width() - leftMargin - rightMargin; - const auto height = espgui::tft.height() - topMargin - bottomMargin; - const auto right = espgui::tft.width() - rightMargin; - const auto bottom = espgui::tft.height() - bottomMargin; - - CPP_UNUSED(right) - - //espgui::tft.drawRect(leftMargin, topMargin, espgui::tft.width() - leftMargin - rightMargin, espgui::tft.height() - topMargin - bottomMargin, TFT_WHITE); - //espgui::tft.fillRect(leftMargin + 1, topMargin + 1, espgui::tft.width() - leftMargin - rightMargin - 2, espgui::tft.height() - topMargin - bottomMargin - 2, TFT_BLACK); - - espgui::tft.drawSunkenRect(leftMargin, topMargin, width, height, - color565(240, 240, 240), - color565(100, 100, 100), - color565(30, 30, 30)); - - espgui::tft.setTextColor(TFT_WHITE, color565(30, 30, 30)); - - int x = leftMargin + 5; - int y = topMargin + 5; - for (char c : m_message) - { - if (c == '\n' || x > espgui::tft.width() - rightMargin - 10) - { - x = leftMargin + 5; - y += espgui::tft.fontHeight(4); - } - - if (c != '\n') - { - const auto addedWidth = espgui::tft.drawChar(espgui::tft.decodeUTF8(c), x, y, 4); - x += addedWidth; - } - - if (y >= espgui::tft.height() - bottomMargin) - break; - } - - espgui::tft.setTextColor(TFT_BLACK, color565(170, 170, 170)); - - espgui::tft.drawSunkenRect(leftMargin + 15, bottom - 40, - (width - 15 - 10 - 15) / 2, - 30, - color565(240, 240, 240), - color565(100, 100, 100), - color565(170, 170, 170)); - - espgui::tft.drawString("Yes", leftMargin + 18, bottom - 37); - - espgui::tft.drawSunkenRect(leftMargin + 15 + ((width - 15 - 30 - 15) / 2) + 15, bottom - 40, - (width - 15 - 10 - 15) / 2, - 30, - color565(240, 240, 240), - color565(100, 100, 100), - color565(170, 170, 170)); - - espgui::tft.drawString("No", leftMargin + 18 + ((width - 15 - 30 - 15) / 2) + 15 + 1, bottom - 37); -} - -void AlertDisplay::closeOverlay() -{ - auto guard = std::move(espgui::currentDisplay); - espgui::currentDisplay = std::move(m_lastDisplay); - espgui::currentDisplay->initScreen(); -} diff --git a/main/displays/popups/alertdisplay.h b/main/displays/popups/alertdisplay.h deleted file mode 100644 index dbb30a2..0000000 --- a/main/displays/popups/alertdisplay.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -// system includes -#include - -// local includes -#include "displays/bobbydisplay.h" - -class AlertDisplay : public BobbyDisplay -{ - using Base = BobbyDisplay; - -public: - AlertDisplay(std::string &&message, std::unique_ptr &&lastDisplay); - - //void start() override; - void initScreen() override; - //void update() override; - //void redraw() override; - //void stop() override; - - void buttonPressed(espgui::Button button) override; - - void initOverlay(); - void closeOverlay(); - -private: - std::string m_message; - std::unique_ptr m_lastDisplay; -}; From da1927776e335b6d2ed32fda9db31d355d0c7875 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 29 Dec 2021 22:26:44 +0100 Subject: [PATCH 6/6] All change value displays now have a confirm and errorOccured --- components/esp-gui-lib | 2 +- main/changevaluedisplay_controlmode.cpp | 53 +++++++++++++++++ main/changevaluedisplay_controlmode.h | 45 +++------------ main/changevaluedisplay_controltype.cpp | 50 ++++++++++++++++ main/changevaluedisplay_controltype.h | 43 +++----------- main/changevaluedisplay_handbremsmode.cpp | 26 +++++++-- main/changevaluedisplay_handbremsmode.h | 14 +++-- main/changevaluedisplay_larsmmode_mode.cpp | 51 +++++++++++++++++ main/changevaluedisplay_larsmmode_mode.h | 42 +++----------- main/changevaluedisplay_unifiedmodelmode.cpp | 31 +++++++--- main/changevaluedisplay_unifiedmodelmode.h | 14 +++-- main/displays/bobbypopupdisplay.cpp | 2 +- .../menus/defaultmodesettingsmenu.cpp | 12 ++-- main/displays/menus/handbremssettingsmenu.cpp | 4 +- main/displays/menus/handbremssettingsmenu.h | 2 +- main/displays/menus/larsmmodesettingsmenu.cpp | 8 +-- .../menus/tempomatmodesettingsmenu.cpp | 4 +- main/displays/menus/timesettingsmenu.cpp | 8 +-- main/displays/menus/wifiapsettingsmenu.cpp | 4 +- main/modes/larsmmode.h | 2 + main/settings.h | 3 +- main/texts.cpp | 57 +------------------ main/texts.h | 55 ------------------ 23 files changed, 269 insertions(+), 263 deletions(-) diff --git a/components/esp-gui-lib b/components/esp-gui-lib index a279559..ec002d6 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit a279559e768b70c919a1516f8401a4fae4821c54 +Subproject commit ec002d60587626080f593b8551bfef582d9308f5 diff --git a/main/changevaluedisplay_controlmode.cpp b/main/changevaluedisplay_controlmode.cpp index e69de29..d2fb5c1 100644 --- a/main/changevaluedisplay_controlmode.cpp +++ b/main/changevaluedisplay_controlmode.cpp @@ -0,0 +1,53 @@ +#include "changevaluedisplay_controlmode.h" + +// esp-idf includes +#include + +// 3rdparty lib includes +#include +#include +#include +#include + +// local includes +#include "utils.h" + +namespace espgui { +namespace { +constexpr const char * const TAG = "ESPGUI"; + +constexpr char TEXT_OPENMODE[] = "Open mode"; +constexpr char TEXT_VOLTAGE[] = "Voltage"; +constexpr char TEXT_SPEED[] = "Speed"; +constexpr char TEXT_TORQUE[] = "Torque"; +constexpr char TEXT_BACK[] = "Back"; +} // namespace + +ChangeValueDisplay::ChangeValueDisplay() +{ + using bobbycar::protocol::ControlMode; + constructMenuItem, StaticText>>(ControlMode::OpenMode, *this, *this, *this); + constructMenuItem, StaticText>>(ControlMode::Voltage, *this, *this, *this); + constructMenuItem, StaticText>>(ControlMode::Speed, *this, *this, *this); + constructMenuItem, StaticText>>(ControlMode::Torque, *this, *this, *this); + constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); +} + +void ChangeValueDisplay::start() +{ + Base::start(); + + switch (const auto value = getValue()) + { + using bobbycar::protocol::ControlMode; + case ControlMode::OpenMode: setSelectedIndex(0); break; + case ControlMode::Voltage: setSelectedIndex(1); break; + case ControlMode::Speed: setSelectedIndex(2); break; + case ControlMode::Torque: setSelectedIndex(3); break; + default: + ESP_LOGW(TAG, "Unknown ControlMode: %i", std::to_underlying(value)); + setSelectedIndex(4); + } +} + +} // namespace espgui diff --git a/main/changevaluedisplay_controlmode.h b/main/changevaluedisplay_controlmode.h index 91abbf2..566f1fb 100644 --- a/main/changevaluedisplay_controlmode.h +++ b/main/changevaluedisplay_controlmode.h @@ -1,23 +1,22 @@ #pragma once -// esp-idf includes -#include +// 3rdparty lib includes +#include +#include +#include +#include // 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" +#include "bobbycar-common.h" namespace espgui { + template<> class ChangeValueDisplay : public MenuDisplay, public virtual AccessorInterface, - public virtual ActionInterface + public virtual ConfirmInterface, + public virtual ErrorHandlerInterface { using Base = MenuDisplay; @@ -27,30 +26,4 @@ public: void start() override; }; -ChangeValueDisplay::ChangeValueDisplay() -{ - using bobbycar::protocol::ControlMode; - constructMenuItem, StaticText>>(ControlMode::OpenMode, *this, *this); - constructMenuItem, StaticText>>(ControlMode::Voltage, *this, *this); - constructMenuItem, StaticText>>(ControlMode::Speed, *this, *this); - constructMenuItem, StaticText>>(ControlMode::Torque, *this, *this); - constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); -} - -void ChangeValueDisplay::start() -{ - Base::start(); - - switch (const auto value = getValue()) - { - using bobbycar::protocol::ControlMode; - case ControlMode::OpenMode: setSelectedIndex(0); break; - case ControlMode::Voltage: setSelectedIndex(1); break; - case ControlMode::Speed: setSelectedIndex(2); break; - case ControlMode::Torque: setSelectedIndex(3); break; - default: - ESP_LOGW("BOBBY", "Unknown ControlMode: %i", int(value)); - setSelectedIndex(4); - } -} } // namespace espgui diff --git a/main/changevaluedisplay_controltype.cpp b/main/changevaluedisplay_controltype.cpp index e69de29..7363120 100644 --- a/main/changevaluedisplay_controltype.cpp +++ b/main/changevaluedisplay_controltype.cpp @@ -0,0 +1,50 @@ +#include "changevaluedisplay_controltype.h" + +// esp-idf includes +#include + +// 3rdparty lib includes +#include +#include +#include +#include + +// local includes +#include "utils.h" + +namespace espgui { +namespace { +constexpr const char * const TAG = "ESPGUI"; + +constexpr char TEXT_COMMUTATION[] = "Commutation"; +constexpr char TEXT_SINUSOIDAL[] = "Sinusoidal"; +constexpr char TEXT_FIELDORIENTEDCONTROL[] = "Field oriented control"; +constexpr char TEXT_BACK[] = "Back"; +} // namespace + +ChangeValueDisplay::ChangeValueDisplay() +{ + using bobbycar::protocol::ControlType; + constructMenuItem, StaticText>>(ControlType::Commutation, *this, *this, *this); + constructMenuItem, StaticText>>(ControlType::Sinusoidal, *this, *this, *this); + constructMenuItem, StaticText>>(ControlType::FieldOrientedControl, *this, *this, *this); + constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); +} + +void ChangeValueDisplay::start() +{ + Base::start(); + + switch (const auto value = getValue()) + { + using bobbycar::protocol::ControlType; + case ControlType::Commutation: setSelectedIndex(0); break; + case ControlType::Sinusoidal: setSelectedIndex(1); break; + case ControlType::FieldOrientedControl: setSelectedIndex(2); break; + default: + ESP_LOGW(TAG, "Unknown ControlType: %i", std::to_underlying(value)); + setSelectedIndex(3); + } +} + +} // namespace espgui diff --git a/main/changevaluedisplay_controltype.h b/main/changevaluedisplay_controltype.h index fa84ba0..10d9ab5 100644 --- a/main/changevaluedisplay_controltype.h +++ b/main/changevaluedisplay_controltype.h @@ -1,23 +1,22 @@ #pragma once -// esp-idf includes -#include +// 3rdparty lib includes +#include +#include +#include +#include // 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" +#include "bobbycar-common.h" namespace espgui { + template<> class ChangeValueDisplay : public MenuDisplay, public virtual AccessorInterface, - public virtual ActionInterface + public virtual ConfirmInterface, + public virtual ErrorHandlerInterface { using Base = MenuDisplay; @@ -27,28 +26,4 @@ public: void start() override; }; -ChangeValueDisplay::ChangeValueDisplay() -{ - using bobbycar::protocol::ControlType; - constructMenuItem, StaticText>>(ControlType::Commutation, *this, *this); - constructMenuItem, StaticText>>(ControlType::Sinusoidal, *this, *this); - constructMenuItem, StaticText>>(ControlType::FieldOrientedControl, *this, *this); - constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); -} - -void ChangeValueDisplay::start() -{ - Base::start(); - - switch (const auto value = getValue()) - { - using bobbycar::protocol::ControlType; - case ControlType::Commutation: setSelectedIndex(0); break; - case ControlType::Sinusoidal: setSelectedIndex(1); break; - case ControlType::FieldOrientedControl: setSelectedIndex(2); break; - default: - ESP_LOGW("BOBBY", "Unknown ControlType: %i", int(value)); - setSelectedIndex(3); - } -} } // namespace espgui diff --git a/main/changevaluedisplay_handbremsmode.cpp b/main/changevaluedisplay_handbremsmode.cpp index 80135a3..e5574d8 100644 --- a/main/changevaluedisplay_handbremsmode.cpp +++ b/main/changevaluedisplay_handbremsmode.cpp @@ -3,16 +3,31 @@ // esp-idf includes #include +// 3rdparty lib includes +#include +#include +#include +#include + // local includes #include "utils.h" -#include "texts.h" namespace espgui { +namespace { +constexpr const char * const TAG = "ESPGUI"; + +constexpr char TEXT_HANDBREMS_MOSFETS_OFF[] = "Mosfets off"; +constexpr char TEXT_HANDBREMS_OPENMODE[] = "Open Mode"; +constexpr char TEXT_HANDBREMS_SPEED0[] = "Speed 0"; +constexpr char TEXT_HANDBREMSE[] = "Handbremse"; +constexpr char TEXT_BACK[] = "Back"; +} // namespace + ChangeValueDisplay::ChangeValueDisplay() { - constructMenuItem, StaticText>>(HandbremseMode::MOSFETS_OFF, *this, *this); - constructMenuItem, StaticText>>(HandbremseMode::OPENMODE, *this, *this); - constructMenuItem, StaticText>>(HandbremseMode::SPEED_0, *this, *this); + constructMenuItem, StaticText>>(HandbremseMode::MOSFETS_OFF, *this, *this, *this); + constructMenuItem, StaticText>>(HandbremseMode::OPENMODE, *this, *this, *this); + constructMenuItem, StaticText>>(HandbremseMode::SPEED_0, *this, *this, *this); constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); } @@ -26,8 +41,9 @@ void ChangeValueDisplay::start() case HandbremseMode::OPENMODE: setSelectedIndex(1); break; case HandbremseMode::SPEED_0: setSelectedIndex(2); break; default: - ESP_LOGW("BOBBY", "Unknown HandbremseMode: %i", int(value)); + ESP_LOGW(TAG, "Unknown HandbremseMode: %i", std::to_underlying(value)); setSelectedIndex(3); } } + } // namespace espgui diff --git a/main/changevaluedisplay_handbremsmode.h b/main/changevaluedisplay_handbremsmode.h index fe156f4..800739f 100644 --- a/main/changevaluedisplay_handbremsmode.h +++ b/main/changevaluedisplay_handbremsmode.h @@ -1,21 +1,22 @@ #pragma once // 3rdparty lib includes -#include "changevaluedisplay.h" -#include "menudisplay.h" -#include "actions/setvalueaction.h" -#include "actions/backproxyaction.h" -#include "icons/back.h" +#include +#include +#include +#include // local includes #include "handbremse.h" namespace espgui { + template<> class ChangeValueDisplay : public MenuDisplay, public virtual AccessorInterface, - public virtual ActionInterface + public virtual ConfirmInterface, + public virtual ErrorHandlerInterface { using Base = MenuDisplay; @@ -24,4 +25,5 @@ public: void start() override; }; + } // namespace espgui diff --git a/main/changevaluedisplay_larsmmode_mode.cpp b/main/changevaluedisplay_larsmmode_mode.cpp index e69de29..20469ae 100644 --- a/main/changevaluedisplay_larsmmode_mode.cpp +++ b/main/changevaluedisplay_larsmmode_mode.cpp @@ -0,0 +1,51 @@ +#include "changevaluedisplay_larsmmode_mode.h" + +// esp-idf includes +#include + +// 3rdparty lib inclues +#include +#include +#include +#include + +// local includes +#include "utils.h" + +namespace espgui { +namespace { +constexpr const char * const TAG = "ESPGUI"; + +constexpr char TEXT_LARSMMODE1[] = "Mode1"; +constexpr char TEXT_LARSMMODE2[] = "Mode2"; +constexpr char TEXT_LARSMMODE3[] = "Mode3"; +constexpr char TEXT_LARSMMODE4[] = "Mode4"; +constexpr char TEXT_BACK[] = "Back"; +} // namespace + +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(LarsmModeMode::Mode1, *this, *this, *this); + constructMenuItem, StaticText>>(LarsmModeMode::Mode2, *this, *this, *this); + constructMenuItem, StaticText>>(LarsmModeMode::Mode3, *this, *this, *this); + constructMenuItem, StaticText>>(LarsmModeMode::Mode4, *this, *this, *this); + constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); +} + +void ChangeValueDisplay::start() +{ + Base::start(); + + switch (const auto value = getValue()) + { + case LarsmModeMode::Mode1: setSelectedIndex(0); break; + case LarsmModeMode::Mode2: setSelectedIndex(1); break; + case LarsmModeMode::Mode3: setSelectedIndex(2); break; + case LarsmModeMode::Mode4: setSelectedIndex(3); break; + default: + ESP_LOGW(TAG, "Unknown LarsmModeMode: %i", std::to_underlying(value)); + setSelectedIndex(4); + } +} + +} // namespace espgui diff --git a/main/changevaluedisplay_larsmmode_mode.h b/main/changevaluedisplay_larsmmode_mode.h index d9d1834..64931a5 100644 --- a/main/changevaluedisplay_larsmmode_mode.h +++ b/main/changevaluedisplay_larsmmode_mode.h @@ -1,22 +1,22 @@ #pragma once -#include +// 3rdparty lib inclues +#include +#include +#include +#include -#include "changevaluedisplay.h" -#include "menudisplay.h" -#include "utils.h" -#include "actions/setvalueaction.h" -#include "actions/backproxyaction.h" -#include "icons/back.h" -#include "texts.h" +// local includes #include "modes/larsmmode.h" namespace espgui { + template<> class ChangeValueDisplay : public MenuDisplay, public virtual AccessorInterface, - public virtual ActionInterface + public virtual ConfirmInterface, + public virtual ErrorHandlerInterface { using Base = MenuDisplay; @@ -26,28 +26,4 @@ public: void start() override; }; -ChangeValueDisplay::ChangeValueDisplay() -{ - constructMenuItem, StaticText>>(LarsmModeMode::Mode1, *this, *this); - constructMenuItem, StaticText>>(LarsmModeMode::Mode2, *this, *this); - constructMenuItem, StaticText>>(LarsmModeMode::Mode3, *this, *this); - constructMenuItem, StaticText>>(LarsmModeMode::Mode4, *this, *this); - constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); -} - -void ChangeValueDisplay::start() -{ - Base::start(); - - switch (const auto value = getValue()) - { - case LarsmModeMode::Mode1: setSelectedIndex(0); break; - case LarsmModeMode::Mode2: setSelectedIndex(1); break; - case LarsmModeMode::Mode3: setSelectedIndex(2); break; - case LarsmModeMode::Mode4: setSelectedIndex(3); break; - default: - ESP_LOGW("BOBBY", "Unknown LarsmModeMode: %i", int(value)); - setSelectedIndex(4); - } -} } // namespace espgui diff --git a/main/changevaluedisplay_unifiedmodelmode.cpp b/main/changevaluedisplay_unifiedmodelmode.cpp index 9f3ab55..0aa7e43 100644 --- a/main/changevaluedisplay_unifiedmodelmode.cpp +++ b/main/changevaluedisplay_unifiedmodelmode.cpp @@ -3,18 +3,34 @@ // esp-idf includes #include +// 3rdparty lib includes +#include +#include +#include +#include + // local includes #include "utils.h" -#include "texts.h" namespace espgui { +namespace { +constexpr const char * const TAG = "ESPGUI"; + +constexpr char TEXT_COMMUTATION[] = "Commutation"; +constexpr char TEXT_SINUSOIDAL[] = "Sinusoidal"; +constexpr char TEXT_FOCVOLTAGE[] = "FOC/Voltage"; +constexpr char TEXT_FOCSPEED[] = "FOC/Speed"; +constexpr char TEXT_FOCTORQUE[] = "FOC/Torque"; +constexpr char TEXT_BACK[] = "Back"; +} // namespace + ChangeValueDisplay::ChangeValueDisplay() { - constructMenuItem, StaticText>>(UnifiedModelMode::Commutation, *this, *this); - constructMenuItem, StaticText>>(UnifiedModelMode::Sinusoidal, *this, *this); - constructMenuItem, StaticText>>(UnifiedModelMode::FocVoltage, *this, *this); - constructMenuItem, StaticText>>(UnifiedModelMode::FocSpeed, *this, *this); - constructMenuItem, StaticText>>(UnifiedModelMode::FocTorque, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::Commutation, *this, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::Sinusoidal, *this, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::FocVoltage, *this, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::FocSpeed, *this, *this, *this); + constructMenuItem, StaticText>>(UnifiedModelMode::FocTorque, *this, *this, *this); constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); } @@ -30,8 +46,9 @@ void ChangeValueDisplay::start() case UnifiedModelMode::FocSpeed: setSelectedIndex(3); break; case UnifiedModelMode::FocTorque: setSelectedIndex(4); break; default: - ESP_LOGW("BOBBY", "Unknown UnifiedModelMode: %i", int(value)); + ESP_LOGW(TAG, "Unknown UnifiedModelMode: %i", std::to_underlying(value)); setSelectedIndex(5); } } + } // namespace espgui diff --git a/main/changevaluedisplay_unifiedmodelmode.h b/main/changevaluedisplay_unifiedmodelmode.h index 3e7b120..e6f4bbe 100644 --- a/main/changevaluedisplay_unifiedmodelmode.h +++ b/main/changevaluedisplay_unifiedmodelmode.h @@ -1,21 +1,22 @@ #pragma once // 3rdparty lib includes -#include "changevaluedisplay.h" -#include "menudisplay.h" -#include "actions/setvalueaction.h" -#include "actions/backproxyaction.h" -#include "icons/back.h" +#include +#include +#include +#include // local includes #include "unifiedmodelmode.h" namespace espgui { + template<> class ChangeValueDisplay : public MenuDisplay, public virtual AccessorInterface, - public virtual ActionInterface + public virtual ConfirmInterface, + public virtual ErrorHandlerInterface { using Base = MenuDisplay; @@ -24,4 +25,5 @@ public: void start() override; }; + } // namespace espgui diff --git a/main/displays/bobbypopupdisplay.cpp b/main/displays/bobbypopupdisplay.cpp index d163303..5a3cf38 100644 --- a/main/displays/bobbypopupdisplay.cpp +++ b/main/displays/bobbypopupdisplay.cpp @@ -19,7 +19,7 @@ void BobbyPopupDisplay::rawButtonReleased(uint8_t button) void BobbyPopupDisplay::buttonPressed(espgui::Button button) { - //Base::buttonPressed(button); + Base::buttonPressed(button); buttonPressedCommon(button); } diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index d62a0e9..6d32adc 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -23,15 +23,15 @@ using DefaultModeModelModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeModelModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeHybridModelModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeHybridModelModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using DefaultModeSmoothingChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, @@ -126,8 +126,8 @@ DefaultModeSettingsMenu::DefaultModeSettingsMenu() constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingDownAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingUpAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingDownAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableHybridAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableHybridAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp index 182e1c4..118eaf2 100644 --- a/main/displays/menus/handbremssettingsmenu.cpp +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -28,8 +28,8 @@ using HandBremsModeChangeValueDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, HandbremsModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; class HandBremsModeText : public virtual espgui::TextInterface { diff --git a/main/displays/menus/handbremssettingsmenu.h b/main/displays/menus/handbremssettingsmenu.h index aeffeb9..3ade5ec 100644 --- a/main/displays/menus/handbremssettingsmenu.h +++ b/main/displays/menus/handbremssettingsmenu.h @@ -6,7 +6,7 @@ class HandbremsSettingsMenu : public BobbyMenuDisplay, - public espgui::StaticText + public espgui::StaticText { public: HandbremsSettingsMenu(); diff --git a/main/displays/menus/larsmmodesettingsmenu.cpp b/main/displays/menus/larsmmodesettingsmenu.cpp index 66c2cbf..010cdaa 100644 --- a/main/displays/menus/larsmmodesettingsmenu.cpp +++ b/main/displays/menus/larsmmodesettingsmenu.cpp @@ -19,15 +19,15 @@ using LarsmModeModelModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LarsmModeModelModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using LarsmModeModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LarsmModeModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using LarsmModeIterationsChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, diff --git a/main/displays/menus/tempomatmodesettingsmenu.cpp b/main/displays/menus/tempomatmodesettingsmenu.cpp index f83956d..441f2cc 100644 --- a/main/displays/menus/tempomatmodesettingsmenu.cpp +++ b/main/displays/menus/tempomatmodesettingsmenu.cpp @@ -29,8 +29,8 @@ using TempomatModeModelModeChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TempomatModeModelModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/displays/menus/timesettingsmenu.cpp b/main/displays/menus/timesettingsmenu.cpp index 5ba1e7e..5f22529 100644 --- a/main/displays/menus/timesettingsmenu.cpp +++ b/main/displays/menus/timesettingsmenu.cpp @@ -56,8 +56,8 @@ using DaylightSavingModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DaylightSavingModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; #ifdef FEATURE_NTP @@ -65,8 +65,8 @@ using TimeSyncModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TimeSyncModeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; using TimeSyncIntervalChangeDisplay = espgui::makeComponent< diff --git a/main/displays/menus/wifiapsettingsmenu.cpp b/main/displays/menus/wifiapsettingsmenu.cpp index e0f2789..ecf91ff 100644 --- a/main/displays/menus/wifiapsettingsmenu.cpp +++ b/main/displays/menus/wifiapsettingsmenu.cpp @@ -63,8 +63,8 @@ using ApAuthmodeChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, WifiApAuthmodeAccessor, - espgui::BackActionInterface>, - espgui::SwitchScreenAction + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> >; } // namespace diff --git a/main/modes/larsmmode.h b/main/modes/larsmmode.h index 08e28c0..873f271 100644 --- a/main/modes/larsmmode.h +++ b/main/modes/larsmmode.h @@ -4,6 +4,8 @@ #include "bobbycar-common.h" #include "modeinterface.h" +enum class LarsmModeMode : uint8_t { Mode1, Mode2, Mode3, Mode4 }; + class LarsmMode : public ModeInterface { using Base = ModeInterface; diff --git a/main/settings.h b/main/settings.h index 0a16df3..c44382b 100644 --- a/main/settings.h +++ b/main/settings.h @@ -23,8 +23,7 @@ #include "unifiedmodelmode.h" #include "handbremse.h" #include "ledstrip.h" - -enum class LarsmModeMode : uint8_t { Mode1, Mode2, Mode3, Mode4 }; +#include "modes/larsmmode.h" struct Settings { diff --git a/main/texts.cpp b/main/texts.cpp index 1c75d23..4617728 100644 --- a/main/texts.cpp +++ b/main/texts.cpp @@ -234,6 +234,7 @@ char TEXT_HANDBREMSE_AUTOMATIC[] = "Automatic Handbremse"; char TEXT_HANDBREMSE_VISUALIZE[] = "Visualize Handbremse"; char TEXT_HANDBREMSE_MODE[] = "Handbrems Mode"; char TEXT_HANDBREMSE_TRIGGERTIMEOUT[] = "Handbrems Timeout"; +char TEXT_HANDBREMSE[] = "Handbremse"; //char TEXT_BACK[] = "Back"; //DynamicDebugMenu @@ -448,62 +449,6 @@ char TEXT_OFF[] = "Off"; char TEXT_MASTER[] = "Master"; char TEXT_SLAVE[] = "Slave"; -//ChangeValueDisplay -char TEXT_OPENMODE[] = "Open mode"; -char TEXT_VOLTAGE[] = "Voltage"; -char TEXT_SPEED[] = "Speed"; -char TEXT_TORQUE[] = "Torque"; -//char TEXT_BACK[] = "Back"; - -//ChangeValueDisplay -char TEXT_COMMUTATION[] = "Commutation"; -char TEXT_SINUSOIDAL[] = "Sinusoidal"; -char TEXT_FIELDORIENTEDCONTROL[] = "Field oriented control"; -//char TEXT_BACK[] = "Back"; - -//ChangeValueDisplay -char TEXT_HANDBREMS_MOSFETS_OFF[] = "Mosfets off"; -char TEXT_HANDBREMS_OPENMODE[] = "Open Mode"; -char TEXT_HANDBREMS_SPEED0[] = "Speed 0"; -char TEXT_HANDBREMSE[] = "Handbremse"; - -//ChangeValueDisplay -char TEXT_LARSMMODE1[] = "Mode1"; -char TEXT_LARSMMODE2[] = "Mode2"; -char TEXT_LARSMMODE3[] = "Mode3"; -char TEXT_LARSMMODE4[] = "Mode4"; -//char TEXT_BACK[] = "Back"; - -//ChangeValueDisplay -//char TEXT_COMMUTATION[] = "Commutation"; -//char TEXT_SINUSOIDAL[] = "Sinusoidal"; -char TEXT_FOCVOLTAGE[] = "FOC/Voltage"; -char TEXT_FOCSPEED[] = "FOC/Speed"; -char TEXT_FOCTORQUE[] = "FOC/Torque"; -//char TEXT_BACK[] = "Back"; - -//ChangeValueDisplay -char TEXT_WIFI_MODE_NULL[] = "WIFI_MODE_NULL"; -char TEXT_WIFI_MODE_STA[] = "WIFI_MODE_STA"; -char TEXT_WIFI_MODE_AP[] = "WIFI_MODE_AP"; -char TEXT_WIFI_MODE_APSTA[] = "WIFI_MODE_APSTA"; -//char TEXT_BACK[] = "Back"; - -//ChangeValueDisplay -char TEXT_WIFI_POWER_19_5dBm[] = "19.5dBm"; -char TEXT_WIFI_POWER_19dBm[] = "19dBm"; -char TEXT_WIFI_POWER_18_5dBm[] = "18.5dBm"; -char TEXT_WIFI_POWER_17dBm[] = "17dBm"; -char TEXT_WIFI_POWER_15dBm[] = "15dBm"; -char TEXT_WIFI_POWER_13dBm[] = "13dBm"; -char TEXT_WIFI_POWER_11dBm[] = "11dBm"; -char TEXT_WIFI_POWER_8_5dBm[] = "8.5dBm"; -char TEXT_WIFI_POWER_7dBm[] = "7dBm"; -char TEXT_WIFI_POWER_5dBm[] = "5dBm"; -char TEXT_WIFI_POWER_2dBm[] = "2dBm"; -char TEXT_WIFI_POWER_MINUS_1dBm[] = "-1dBm"; -//char TEXT_BACK[] = "Back"; - //Crashmenu char TEXT_CRASHMENU[] = "Crash Menu"; char TEXT_CRASH_ASSERT[] = "assert(0)"; diff --git a/main/texts.h b/main/texts.h index e9c08ec..b24807d 100644 --- a/main/texts.h +++ b/main/texts.h @@ -448,61 +448,6 @@ extern char TEXT_OFF[]; extern char TEXT_MASTER[]; extern char TEXT_SLAVE[]; -//ChangeValueDisplay -extern char TEXT_OPENMODE[]; -extern char TEXT_VOLTAGE[]; -extern char TEXT_SPEED[]; -extern char TEXT_TORQUE[]; -//extern char TEXT_BACK[]; - -//ChangeValueDisplay -extern char TEXT_COMMUTATION[]; -extern char TEXT_SINUSOIDAL[]; -extern char TEXT_FIELDORIENTEDCONTROL[]; -//extern char TEXT_BACK[]; - -//ChangeValueDisplay -extern char TEXT_HANDBREMS_MOSFETS_OFF[]; -extern char TEXT_HANDBREMS_OPENMODE[]; -extern char TEXT_HANDBREMS_SPEED0[]; - -//ChangeValueDisplay -extern char TEXT_LARSMMODE1[]; -extern char TEXT_LARSMMODE2[]; -extern char TEXT_LARSMMODE3[]; -extern char TEXT_LARSMMODE4[]; -//extern char TEXT_BACK[]; - -//ChangeValueDisplay -//extern char TEXT_COMMUTATION[]; -//extern char TEXT_SINUSOIDAL[]; -extern char TEXT_FOCVOLTAGE[]; -extern char TEXT_FOCSPEED[]; -extern char TEXT_FOCTORQUE[]; -//extern char TEXT_BACK[]; - -//ChangeValueDisplay -extern char TEXT_WIFI_MODE_NULL[]; -extern char TEXT_WIFI_MODE_STA[]; -extern char TEXT_WIFI_MODE_AP[]; -extern char TEXT_WIFI_MODE_APSTA[]; -//extern char TEXT_BACK[]; - -//ChangeValueDisplay -extern char TEXT_WIFI_POWER_19_5dBm[]; -extern char TEXT_WIFI_POWER_19dBm[]; -extern char TEXT_WIFI_POWER_18_5dBm[]; -extern char TEXT_WIFI_POWER_17dBm[]; -extern char TEXT_WIFI_POWER_15dBm[]; -extern char TEXT_WIFI_POWER_13dBm[]; -extern char TEXT_WIFI_POWER_11dBm[]; -extern char TEXT_WIFI_POWER_8_5dBm[]; -extern char TEXT_WIFI_POWER_7dBm[]; -extern char TEXT_WIFI_POWER_5dBm[]; -extern char TEXT_WIFI_POWER_2dBm[]; -extern char TEXT_WIFI_POWER_MINUS_1dBm[]; -//extern char TEXT_BACK[]; - //Crashmenu extern char TEXT_CRASHMENU[]; extern char TEXT_CRASH_ASSERT[];