diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 3e640c0..4a2d488 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -160,6 +160,9 @@ struct BigOffsetAccessor : public RefAccessorSaveSettings { int16_t &ge struct DeziampereAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.ledstrip.deziampere; } }; struct EnableBeepWhenBlinkAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.ledstrip.enableBeepWhenBlink; } }; struct EnableFullBlinkAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.ledstrip.enableFullBlink; } }; +struct EnableLedstripStVOAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.ledstrip.enableStVO; } }; +struct LedsStVOFrontOffsetAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.ledstrip.stvoFrontOffset; } }; +struct LedsStVOFrontLengthAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.ledstrip.stvoFrontLength; } }; #endif struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } }; diff --git a/main/displays/menus/ledstripmenu.h b/main/displays/menus/ledstripmenu.h index 17d7dc8..45dc742 100644 --- a/main/displays/menus/ledstripmenu.h +++ b/main/displays/menus/ledstripmenu.h @@ -68,6 +68,22 @@ using DeziampereChangeScreen = makeComponent< SwitchScreenAction >; +using StVOOffsetChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + LedsStVOFrontOffsetAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using StVOLengthChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + LedsStVOFrontLengthAccessor, + BackActionInterface>, + SwitchScreenAction +>; + class LedstripMenu : public MenuDisplay, public StaticText, @@ -80,6 +96,11 @@ public: constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableBrakeLightsAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableBeepWhenBlinkAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableFullBlinkAccessor>>(); + + constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } diff --git a/main/ledstrip.h b/main/ledstrip.h index 9a5e273..42d81a5 100644 --- a/main/ledstrip.h +++ b/main/ledstrip.h @@ -1,4 +1,5 @@ #pragma once +#define FEATURE_LEDSTRIP #ifdef FEATURE_LEDSTRIP // 3rdparty lib includes #include @@ -121,6 +122,20 @@ void updateLedStrip() } else if ((cpputils::is_in(blinkAnimation, LEDSTRIP_OVERWRITE_BLINKLEFT, LEDSTRIP_OVERWRITE_BLINKRIGHT, LEDSTRIP_OVERWRITE_BLINKBOTH)) && settings.ledstrip.enableBeepWhenBlink) have_disabled_beeper = false; + if (simplified || settings.ledstrip.enableStVO) + { + const auto center = (std::begin(leds) + (leds.size() / 2) + settings.ledstrip.centerOffset); + + std::fill(center - settings.ledstrip.bigOffset, center - settings.ledstrip.smallOffset, CRGB{0, 0, 0}); + std::fill(center + settings.ledstrip.smallOffset, center + settings.ledstrip.bigOffset, CRGB{0, 0, 0}); + + std::fill(center - settings.ledstrip.bigOffset - 2U, center - settings.ledstrip.smallOffset - 2U, CRGB{255, 0, 0}); + std::fill(center + settings.ledstrip.smallOffset + 2U, center + settings.ledstrip.bigOffset + 2U, CRGB{255, 0, 0}); + + std::fill(std::begin(leds) + settings.ledstrip.stvoFrontOffset, std::begin(leds) + settings.ledstrip.stvoFrontOffset + settings.ledstrip.stvoFrontLength, CRGB{255, 255, 255}); + std::fill(std::end(leds) - settings.ledstrip.stvoFrontOffset - settings.ledstrip.stvoFrontLength, std::end(leds) - settings.ledstrip.stvoFrontOffset, CRGB{255, 255, 255}); + } + FastLED.setMaxPowerInVoltsAndMilliamps(5,settings.ledstrip.deziampere * 100); FastLED.show(); } diff --git a/main/presets.h b/main/presets.h index fe0640f..0859553 100644 --- a/main/presets.h +++ b/main/presets.h @@ -238,7 +238,10 @@ constexpr Settings::Ledstrip defaultLedstrip { #else .animationType = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW, #endif - .enableFullBlink = false + .enableFullBlink = false, + .enableStVO = false, + .stvoFrontOffset = 0, + .stvoFrontLength = 10 }; #endif diff --git a/main/settings.h b/main/settings.h index 3424252..4b1af21 100644 --- a/main/settings.h +++ b/main/settings.h @@ -163,6 +163,9 @@ struct Settings bool enableBeepWhenBlink; int16_t animationType; bool enableFullBlink; + bool enableStVO; + int16_t stvoFrontOffset; + int16_t stvoFrontLength; } ledstrip; #endif @@ -265,6 +268,9 @@ void Settings::executeForEveryCommonSetting(T &&callable) callable("beeppwhenblink", ledstrip.enableBeepWhenBlink); // callable("animationType", ledstrip.animationType); callable("fullblink", ledstrip.enableFullBlink); + callable("ledstvo", ledstrip.enableStVO); + callable("ledstvofoff", ledstrip.stvoFrontOffset); + callable("ledstvoflen", ledstrip.stvoFrontLength); #endif callable("lockAlwPresetSw", lockscreen.allowPresetSwitch); diff --git a/main/texts.h b/main/texts.h index 10f6cbc..889f5c0 100644 --- a/main/texts.h +++ b/main/texts.h @@ -251,6 +251,9 @@ constexpr char TEXT_BIGOFFSET[] = "Big Offset"; constexpr char TEXT_LEDSTRIP_MILLIAMP[] = "Ledstrip 0.1A"; constexpr char TEXT_BLINKBEEP[] = "Blink Beep"; constexpr char TEXT_FULLBLINK[] = "Full blink"; +constexpr char TEXT_LEDSTRIP_STVO[] = "Enable StVO"; +constexpr char TEXT_STVO_FRONTOFFSET[] = "StVO Front Offset"; +constexpr char TEXT_STVO_FRONTLENGTH[] = "StVO Front Length"; //constexpr char TEXT_BACK[] = "Back"; //LedstripSelectAnimationMenu