From 89779c4648f036e987cc9e738e8736ab69ec170a Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Mon, 14 Feb 2022 21:27:26 +0100 Subject: [PATCH 1/3] Removed unused code --- main/modes/defaultmode.h | 1 - 1 file changed, 1 deletion(-) diff --git a/main/modes/defaultmode.h b/main/modes/defaultmode.h index 7e050b6..267147f 100644 --- a/main/modes/defaultmode.h +++ b/main/modes/defaultmode.h @@ -24,7 +24,6 @@ public: bool waitForGasLoslass{false}; bool waitForBremsLoslass{false}; - bool hybridModeActivated{false}; private: espchrono::millis_clock::time_point m_lastTime{espchrono::millis_clock::now()}; From e17e7ba5f89d18529a612b258d57e8096ccb4d2c Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Mon, 14 Feb 2022 22:27:50 +0100 Subject: [PATCH 2/3] Fix FEATURE_LEDSTRIP crashing when turning on (uninitialized memory) --- main/ledstrip.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/main/ledstrip.cpp b/main/ledstrip.cpp index 38083ad..3136859 100644 --- a/main/ledstrip.cpp +++ b/main/ledstrip.cpp @@ -18,6 +18,9 @@ uint8_t gHue = 0; uint16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE; +namespace { + bool initialized{false}; +} // namespace void initLedStrip() { @@ -26,13 +29,23 @@ void initLedStrip() leds.resize(configs.ledstrip.ledsCount.value); FastLED.addLeds(&*std::begin(leds), leds.size()) .setCorrection(TypicalSMD5050); + initialized = true; } } void updateLedStrip() { - if(!configs.feature.ledstrip.value) - return; + if (configs.feature.ledstrip.value && !initialized) + initLedStrip(); + else if (!configs.feature.ledstrip.value && initialized) + { + std::fill(std::begin(leds), std::end(leds), CRGB::Black); + FastLED.show(); + initialized = false; + return; + } + else if (!configs.feature.ledstrip.value) + return; EVERY_N_MILLISECONDS( 20 ) { gHue++; } static bool have_disabled_beeper = false; From 97c9ecec4d73a98959dc1da905a695de5031d244 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Mon, 14 Feb 2022 22:43:32 +0100 Subject: [PATCH 3/3] Added pwmomat --- main/CMakeLists.txt | 2 ++ main/bobbyquickactions.cpp | 26 ++++++++++++++----- main/bobbyquickactions.h | 5 ++-- main/changevaluedisplay_bobbyquickactions.cpp | 7 +++-- .../menus/defaultmodesettingsmenu.cpp | 4 --- main/modes/defaultmode.cpp | 19 ++++++++++++++ main/tempomat.cpp | 8 ++++++ main/tempomat.h | 20 ++++++++++++++ 8 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 main/tempomat.cpp create mode 100644 main/tempomat.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 8eba682..26c6abe 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -218,6 +218,7 @@ set(headers statistics.h statustexthelper.h taskmanager.h + tempomat.h texthelpers/networktexthelpers.h texthelpers/wifiaptexthelpers.h texthelpers/wifistatexthelpers.h @@ -449,6 +450,7 @@ set(sources statistics.cpp statustexthelper.cpp taskmanager.cpp + tempomat.cpp texthelpers/networktexthelpers.cpp texthelpers/wifiaptexthelpers.cpp texthelpers/wifistatexthelpers.cpp diff --git a/main/bobbyquickactions.cpp b/main/bobbyquickactions.cpp index 5707f1a..2a3a7dd 100644 --- a/main/bobbyquickactions.cpp +++ b/main/bobbyquickactions.cpp @@ -2,7 +2,9 @@ // local includes #include "espnowfunctions.h" +#include "handbremse.h" #include "newsettings.h" +#include "tempomat.h" #include "wifi_bobbycar.h" namespace quickactions { @@ -44,6 +46,9 @@ void handle_bobby_quickaction(espgui::Button button) case BobbyQuickActions::WIFI_SCAN: action_wifi_scan(); break; + case BobbyQuickActions::PWMOMAT: + handle_pwmomat(); + break; default: return; } @@ -117,18 +122,25 @@ void handle_handbremse() { if (configs.handbremse.enable.value) { - using namespace handbremse; - if (stateWish == StateWish::brake || angezogen) - stateWish = StateWish::release; + using StateWish = handbremse::StateWish; + if (handbremse::stateWish == StateWish::brake || handbremse::angezogen) + handbremse::stateWish = StateWish::release; else - stateWish = StateWish::brake; - wishTimer = espchrono::millis_clock::now(); + handbremse::stateWish = StateWish::brake; + handbremse::wishTimer = espchrono::millis_clock::now(); } } -void batteryDebugPrint() +void handle_pwmomat() { - ESP_LOGI("BATTERY", ""); + if (pwmomat::tempomat_pwm) + { + pwmomat::wish = pwmomat::WISH::WISH_DISABLE; + } + else + { + pwmomat::wish = pwmomat::WISH::WISH_ENABLE; + } } } // namespace quickactions diff --git a/main/bobbyquickactions.h b/main/bobbyquickactions.h index e5576b2..48efd5b 100644 --- a/main/bobbyquickactions.h +++ b/main/bobbyquickactions.h @@ -13,7 +13,8 @@ x(BLINK_RIGHT) \ x(HANDBREMSE) \ x(OPEN_GARAGE) \ - x(WIFI_SCAN) + x(WIFI_SCAN) \ + x(PWMOMAT) DECLARE_TYPESAFE_ENUM(BobbyQuickActions, : uint8_t, BobbyQuickActionsValues) namespace quickactions { @@ -26,6 +27,6 @@ void blink_left(); void blink_right(); void handle_handbremse(); void action_wifi_scan(); -void batteryDebugPrint(); +void handle_pwmomat(); } // namespace quickactions diff --git a/main/changevaluedisplay_bobbyquickactions.cpp b/main/changevaluedisplay_bobbyquickactions.cpp index efe1c30..610b399 100644 --- a/main/changevaluedisplay_bobbyquickactions.cpp +++ b/main/changevaluedisplay_bobbyquickactions.cpp @@ -22,6 +22,7 @@ constexpr char TEXT_QUICKACTION_BLINK_RIGHT[] = "Blink Right"; constexpr char TEXT_QUICKACTION_HANDBREMSE[] = "Handbremse"; constexpr char TEXT_QUICKACTION_OPEN_GARAGE[] = "Open Garage"; constexpr char TEXT_QUICKACTION_WIFI_SCAN[] = "Wifi Scan"; +constexpr char TEXT_QUICKACTION_TEMPOMAT[] = "Toggle PWM-Omat"; constexpr char TEXT_BACK[] = "Back"; } // namespace @@ -33,6 +34,7 @@ ChangeValueDisplay::ChangeValueDisplay() constructMenuItem, StaticText>>(BobbyQuickActions::HANDBREMSE, *this, *this, *this); constructMenuItem, StaticText>>(BobbyQuickActions::OPEN_GARAGE, *this, *this, *this); constructMenuItem, StaticText>>(BobbyQuickActions::WIFI_SCAN, *this, *this, *this); + constructMenuItem, StaticText>>(BobbyQuickActions::PWMOMAT, *this, *this, *this); constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); } @@ -48,9 +50,10 @@ void ChangeValueDisplay::start() case BobbyQuickActions::HANDBREMSE: setSelectedIndex(3); break; case BobbyQuickActions::OPEN_GARAGE: setSelectedIndex(4); break; case BobbyQuickActions::WIFI_SCAN: setSelectedIndex(5); break; - default: + case BobbyQuickActions::PWMOMAT: setSelectedIndex(6); break; + default: ESP_LOGW(TAG, "Unknown BobbyQuickActions: %i", std::to_underlying(value)); - setSelectedIndex(6); + setSelectedIndex(7); } } diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index c74ebe2..fa6344e 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -37,10 +37,6 @@ constexpr char TEXT_SUBGASVAL[] = "Add Gas"; constexpr char TEXT_SUBBRAKEVAL[] = "Add Brake"; constexpr char TEXT_ADDGASVAL[] = "Sub Gas"; constexpr char TEXT_ADDBRAKEVAL[] = "Sub Brake"; -constexpr char TEXT_HYBRIDENABLE[] = "Enable Hybrid mode"; -constexpr char TEXT_HYBRIDACTIVATIONLIMIT[] = "Hybrid activation-limit"; -constexpr char TEXT_HYBRIDDEACTIVATIONLIMIT[] = "Hybrid deactivation-limit"; -constexpr char TEXT_LIMITS_TO_NEAR[] = "Hybrid limits too near (>20)"; constexpr char TEXT_HANDBREMSE_ENABLE[] = "Enable Handbremse"; constexpr char TEXT_HANDBREMSE_AUTOMATIC[] = "Automatic Handbremse"; constexpr char TEXT_HANDBREMSE_VISUALIZE[] = "Visualize Handbremse"; diff --git a/main/modes/defaultmode.cpp b/main/modes/defaultmode.cpp index 165fb42..f41bd59 100644 --- a/main/modes/defaultmode.cpp +++ b/main/modes/defaultmode.cpp @@ -1,5 +1,9 @@ #include "defaultmode.h" +// local includes +#include "handbremse.h" +#include "tempomat.h" + using namespace std::chrono_literals; namespace modes { @@ -214,6 +218,21 @@ void DefaultMode::update() } } + if (!pwmomat::tempomat_pwm && pwmomat::wish == pwmomat::WISH::WISH_ENABLE) + { + pwmomat::tempomat_pwm = pwm; + pwmomat::wish = pwmomat::WISH::NONE; + pwmomat::enabled_time = now; + } + else if ((pwmomat::tempomat_pwm && pwmomat::enabled_time) && (espchrono::ago(*pwmomat::enabled_time) > 500ms) && (pwm >= std::min(*pwmomat::tempomat_pwm+10, 1500.f) || pwmomat::wish == pwmomat::WISH::WISH_DISABLE)) // disable tempomat when pwm is larger than saved pwm + { + pwmomat::wish = pwmomat::WISH::NONE; + pwmomat::tempomat_pwm = std::nullopt; + } + + if (pwmomat::tempomat_pwm) + pwm = *pwmomat::tempomat_pwm; + m_lastPwm = pwm; m_lastTime = now; diff --git a/main/tempomat.cpp b/main/tempomat.cpp new file mode 100644 index 0000000..b50f902 --- /dev/null +++ b/main/tempomat.cpp @@ -0,0 +1,8 @@ +#include "tempomat.h" + +namespace pwmomat { +std::optional tempomat_pwm; +std::optional enabled_time; + +WISH wish{WISH::NONE}; +} // namespace pwmomat \ No newline at end of file diff --git a/main/tempomat.h b/main/tempomat.h new file mode 100644 index 0000000..9fde29e --- /dev/null +++ b/main/tempomat.h @@ -0,0 +1,20 @@ +#pragma once + +// system includes +#include + +// 3rdparty lib includes +#include + +namespace pwmomat { +extern std::optional tempomat_pwm; // saved pwm +extern std::optional enabled_time; + +enum class WISH : uint8_t { + NONE, + WISH_ENABLE, + WISH_DISABLE, +}; + +extern WISH wish; +} // namespace pwmomat \ No newline at end of file