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);