diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 3e640c0..4bb5e4e 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -160,6 +160,12 @@ 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; } }; +struct EnableLedstripStVOFrontlight : public RefAccessorSaveSettings { bool &getRef() const override { return settings.ledstrip.stvoFrontEnable; } }; +struct AnimationMultiplierAccessor : public RefAccessorSaveSettings { int16_t &getRef() const override { return settings.ledstrip.animationMultiplier; } }; +struct LedstripBrightnessAccessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.ledstrip.brightness; } }; #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..a85a0fb 100644 --- a/main/displays/menus/ledstripmenu.h +++ b/main/displays/menus/ledstripmenu.h @@ -68,6 +68,38 @@ using DeziampereChangeScreen = makeComponent< SwitchScreenAction >; +using StVOOffsetChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + LedsStVOFrontOffsetAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using StVOLengthChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + LedsStVOFrontLengthAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using animationMultiplierChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + AnimationMultiplierAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using ledstripBrightnessChangeScreen = makeComponent< + ChangeValueDisplay, + StaticText, + LedstripBrightnessAccessor, + BackActionInterface>, + SwitchScreenAction +>; + class LedstripMenu : public MenuDisplay, public StaticText, @@ -80,12 +112,19 @@ 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>>(); + constructMenuItem, SwitchScreenAction>>(); if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } + if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } if (!simplified) { constructMenuItem, SwitchScreenAction>>(); } constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/ledstrip.h b/main/ledstrip.h index 9a5e273..6f2b430 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,7 +122,30 @@ 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); + + if (!(blinkAnimation == LEDSTRIP_OVERWRITE_BLINKLEFT || blinkAnimation == LEDSTRIP_OVERWRITE_BLINKBOTH) || !(espchrono::millis_clock::now().time_since_epoch() % 750ms < 375ms) || settings.ledstrip.enableFullBlink) // Condition for right + { + std::fill(center - settings.ledstrip.bigOffset, center - settings.ledstrip.smallOffset, CRGB{0, 0, 0}); + std::fill(center - settings.ledstrip.bigOffset - 1U, center - settings.ledstrip.smallOffset - 1U, CRGB{255, 0, 0}); // Right + } + if (!(blinkAnimation == LEDSTRIP_OVERWRITE_BLINKRIGHT || blinkAnimation == LEDSTRIP_OVERWRITE_BLINKBOTH) || !(espchrono::millis_clock::now().time_since_epoch() % 750ms < 375ms) || settings.ledstrip.enableFullBlink) // Condition for left + { + std::fill(center + settings.ledstrip.smallOffset, center + settings.ledstrip.bigOffset, CRGB{0, 0, 0}); + std::fill(center + settings.ledstrip.smallOffset + 1U, center + settings.ledstrip.bigOffset + 1U, CRGB{255, 0, 0}); // Left + } + + if (settings.ledstrip.stvoFrontEnable) + { + 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.setBrightness(settings.ledstrip.brightness); FastLED.show(); } @@ -175,7 +199,7 @@ void showSpeedSyncAnimation() { static float hue_result = 0; - const float hue_per_led = .1; + const float hue_per_led = 1. / std::max(uint8_t(1), uint8_t(settings.ledstrip.animationMultiplier)); const float meter_per_second = avgSpeedKmh / 3.6; const float leds_per_second = meter_per_second * leds_per_meter; const float hue_per_second = leds_per_second * hue_per_led; diff --git a/main/presets.h b/main/presets.h index fe0640f..d75cc85 100644 --- a/main/presets.h +++ b/main/presets.h @@ -238,7 +238,13 @@ constexpr Settings::Ledstrip defaultLedstrip { #else .animationType = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW, #endif - .enableFullBlink = false + .enableFullBlink = false, + .enableStVO = false, + .stvoFrontOffset = 0, + .stvoFrontLength = 10, + .stvoFrontEnable = false, + .animationMultiplier = 10, + .brightness = 255 }; #endif diff --git a/main/settings.h b/main/settings.h index 3424252..6d92256 100644 --- a/main/settings.h +++ b/main/settings.h @@ -163,6 +163,12 @@ struct Settings bool enableBeepWhenBlink; int16_t animationType; bool enableFullBlink; + bool enableStVO; + int16_t stvoFrontOffset; + int16_t stvoFrontLength; + bool stvoFrontEnable; + int16_t animationMultiplier; + uint8_t brightness; } ledstrip; #endif @@ -265,6 +271,12 @@ 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); + callable("ledstvoen", ledstrip.stvoFrontEnable); + callable("ledAnimMultiplier", ledstrip.animationMultiplier); + callable("ledbrightness", ledstrip.brightness); #endif callable("lockAlwPresetSw", lockscreen.allowPresetSwitch); diff --git a/main/settingsutils.h b/main/settingsutils.h index c06e19f..96bcb5e 100644 --- a/main/settingsutils.h +++ b/main/settingsutils.h @@ -17,6 +17,7 @@ void switchProfile(uint8_t index) if (index == SIMPLIFIED_TRIGGER_TRIGGERONPRESET) { simplified = true; + return; } #endif diff --git a/main/texts.h b/main/texts.h index 10f6cbc..383719c 100644 --- a/main/texts.h +++ b/main/texts.h @@ -251,6 +251,12 @@ 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_STVO_ENABLEFRONTLIGHT[] = "StVO Front Enable"; +constexpr char TEXT_ANIMATION_MULTIPLIER[] = "Animation Multiplier"; +constexpr char TEXT_LEDSTRIP_BRIGHTNESS[] = "Ledstrip Brightness"; //constexpr char TEXT_BACK[] = "Back"; //LedstripSelectAnimationMenu