From 21ba6b4d977b1f2d211b75d54d1360f43dbe6d0e Mon Sep 17 00:00:00 2001 From: Peter Poetzi Date: Thu, 30 Sep 2021 21:03:06 +0200 Subject: [PATCH] separate led blink and animation type --- main/actions/ledstripanimationactions.h | 24 ++---------- main/actions/ledstripblinkactions.h | 35 ++++++++++++++++++ main/buttons.h | 20 +++++----- main/displays/menus/ledstripmenu.h | 17 ++------- .../menus/ledstripselectanimationmenu.h | 3 -- main/displays/menus/ledstripselectblinkmenu.h | 37 +++++++++++++++++++ main/ledstrip.h | 21 ++++++----- main/ledstripdefines.h | 17 ++++----- main/texts.h | 8 +++- 9 files changed, 114 insertions(+), 68 deletions(-) create mode 100644 main/actions/ledstripblinkactions.h create mode 100644 main/displays/menus/ledstripselectblinkmenu.h diff --git a/main/actions/ledstripanimationactions.h b/main/actions/ledstripanimationactions.h index 185dfa9..d125d06 100644 --- a/main/actions/ledstripanimationactions.h +++ b/main/actions/ledstripanimationactions.h @@ -12,36 +12,18 @@ namespace { class LedstripAnimationDefaultRainbowAction : public virtual ActionInterface { public: - void triggered() override { blinkAnimation = LEDSTRIP_ANIMATION_DEFAULTRAINBOW; } -}; - -class LedstripAnimationBlinkLeftAction : public virtual ActionInterface -{ -public: - void triggered() override { blinkAnimation = LEDSTRIP_ANIMATION_BLINKLEFT; } -}; - -class LedstripAnimationBlinkRightAction : public virtual ActionInterface -{ -public: - void triggered() override { blinkAnimation = LEDSTRIP_ANIMATION_BLINKRIGHT; } -}; - -class LedstripAnimationBlinkBothAction : public virtual ActionInterface -{ -public: - void triggered() override { blinkAnimation = LEDSTRIP_ANIMATION_BLINKBOTH; } + void triggered() override { animation_type = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW; } }; class LedstripAnimationBetterRainbowAction : public virtual ActionInterface { public: - void triggered() override { blinkAnimation = LEDSTRIP_ANIMATION_BETTERRAINBOW; } + void triggered() override { animation_type = LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW; } }; class LedstripAnimationSyncToSpeedAction : public virtual ActionInterface { public: - void triggered() override { blinkAnimation = LEDSTRIP_ANIMATION_SPEEDSYNCANIMATION; } + void triggered() override { animation_type = LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION; } }; } diff --git a/main/actions/ledstripblinkactions.h b/main/actions/ledstripblinkactions.h new file mode 100644 index 0000000..a7db559 --- /dev/null +++ b/main/actions/ledstripblinkactions.h @@ -0,0 +1,35 @@ +#pragma once + +#include "actioninterface.h" +#include "utils.h" +#include "globals.h" +#include "ledstrip.h" +#include "ledstripdefines.h" + +using namespace espgui; + +namespace { +class LedstripAnimationBlinkNoneAction : public virtual ActionInterface +{ +public: + void triggered() override { blinkAnimation = LEDSTRIP_OVERWRITE_NONE; } +}; + +class LedstripAnimationBlinkLeftAction : public virtual ActionInterface +{ +public: + void triggered() override { blinkAnimation = LEDSTRIP_OVERWRITE_BLINKLEFT; } +}; + +class LedstripAnimationBlinkRightAction : public virtual ActionInterface +{ +public: + void triggered() override { blinkAnimation = LEDSTRIP_OVERWRITE_BLINKRIGHT; } +}; + +class LedstripAnimationBlinkBothAction : public virtual ActionInterface +{ +public: + void triggered() override { blinkAnimation = LEDSTRIP_OVERWRITE_BLINKBOTH; } +}; +} diff --git a/main/buttons.h b/main/buttons.h index f1f3cfd..5f91280 100644 --- a/main/buttons.h +++ b/main/buttons.h @@ -143,14 +143,14 @@ public: if(!pressed)return; #ifdef FEATURE_LEDSTRIP - if(blinkAnimation == LEDSTRIP_ANIMATION_DEFAULTRAINBOW){ //transition from off to left - blinkAnimation = LEDSTRIP_ANIMATION_BLINKLEFT; + if(blinkAnimation == LEDSTRIP_OVERWRITE_NONE){ //transition from off to left + blinkAnimation = LEDSTRIP_OVERWRITE_BLINKLEFT; } - else if(blinkAnimation == LEDSTRIP_ANIMATION_BLINKRIGHT){ // transition to warning - blinkAnimation = LEDSTRIP_ANIMATION_BLINKBOTH; + else if(blinkAnimation == LEDSTRIP_OVERWRITE_BLINKRIGHT){ // transition to warning + blinkAnimation = LEDSTRIP_OVERWRITE_BLINKBOTH; } else{ // transition to off - blinkAnimation = 0; + blinkAnimation = LEDSTRIP_OVERWRITE_NONE; } #endif } @@ -158,14 +158,14 @@ public: static void blinkRightButton(bool pressed){ if(!pressed)return; #ifdef FEATURE_LEDSTRIP - if(blinkAnimation == LEDSTRIP_ANIMATION_DEFAULTRAINBOW){ //transition from off to right - blinkAnimation = LEDSTRIP_ANIMATION_BLINKRIGHT; + if(blinkAnimation == LEDSTRIP_OVERWRITE_NONE){ //transition from off to right + blinkAnimation = LEDSTRIP_OVERWRITE_BLINKRIGHT; } - else if(blinkAnimation == LEDSTRIP_ANIMATION_BLINKLEFT){ // transition to warning - blinkAnimation = LEDSTRIP_ANIMATION_BLINKBOTH; + else if(blinkAnimation == LEDSTRIP_OVERWRITE_BLINKLEFT){ // transition to warning + blinkAnimation = LEDSTRIP_OVERWRITE_BLINKBOTH; } else{ // transition to off - blinkAnimation = 0; + blinkAnimation = LEDSTRIP_OVERWRITE_NONE; } #endif } diff --git a/main/displays/menus/ledstripmenu.h b/main/displays/menus/ledstripmenu.h index 49d9886..9f71162 100644 --- a/main/displays/menus/ledstripmenu.h +++ b/main/displays/menus/ledstripmenu.h @@ -6,6 +6,7 @@ #include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" #include "ledstripselectanimationmenu.h" +#include "ledstripselectblinkmenu.h" #include "texts.h" #include "icons/back.h" #include "checkboxicon.h" @@ -28,16 +29,6 @@ namespace { class LedstripMenu; class LedstripSelectAnimationMenu; -struct BlinkAnimationAccessor : public RefAccessor { int16_t &getRef() const override { return blinkAnimation; } }; - -using BlinkAnimationChangeScreen = makeComponent< - ChangeValueDisplay, - StaticText, - BlinkAnimationAccessor, - BackActionInterface>, - SwitchScreenAction ->; - using LedsCountChangeScreen = makeComponent< ChangeValueDisplay, StaticText, @@ -86,10 +77,10 @@ class LedstripMenu : public: LedstripMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedAnimationAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedAnimationAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableBrakeLightsAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); -// constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/menus/ledstripselectanimationmenu.h b/main/displays/menus/ledstripselectanimationmenu.h index b7f4a52..da001ad 100644 --- a/main/displays/menus/ledstripselectanimationmenu.h +++ b/main/displays/menus/ledstripselectanimationmenu.h @@ -28,9 +28,6 @@ namespace { LedstripSelectAnimationMenu() { constructMenuItem, LedstripAnimationDefaultRainbowAction>>(); - constructMenuItem, LedstripAnimationBlinkLeftAction>>(); - constructMenuItem, LedstripAnimationBlinkRightAction>>(); - constructMenuItem, LedstripAnimationBlinkBothAction>>(); constructMenuItem, LedstripAnimationBetterRainbowAction>>(); constructMenuItem, LedstripAnimationSyncToSpeedAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); diff --git a/main/displays/menus/ledstripselectblinkmenu.h b/main/displays/menus/ledstripselectblinkmenu.h new file mode 100644 index 0000000..336d291 --- /dev/null +++ b/main/displays/menus/ledstripselectblinkmenu.h @@ -0,0 +1,37 @@ +#pragma once + +// Local includes +#include "menudisplay.h" +#include "utils.h" +#include "menuitem.h" +#include "ledstrip.h" +#include "ledstripselectanimationmenu.h" +#include "icons/back.h" +#include "texts.h" +#include "actions/dummyaction.h" +#include "actions/ledstripblinkactions.h" +#include "actions/switchscreenaction.h" + +using namespace espgui; + +namespace { + class LedstripMenu; +} + +namespace { + class LedstripSelectBlinkMenu : + public MenuDisplay, + public StaticText, + public BackActionInterface> + { + public: + LedstripSelectBlinkMenu() + { + constructMenuItem, LedstripAnimationBlinkNoneAction>>(); + constructMenuItem, LedstripAnimationBlinkLeftAction>>(); + constructMenuItem, LedstripAnimationBlinkRightAction>>(); + constructMenuItem, LedstripAnimationBlinkBothAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + }; +} // Namespace diff --git a/main/ledstrip.h b/main/ledstrip.h index 97c4410..992709b 100644 --- a/main/ledstrip.h +++ b/main/ledstrip.h @@ -13,7 +13,8 @@ namespace { std::vector leds; uint8_t gHue = 0; -int16_t blinkAnimation = LEDSTRIP_ANIMATION_DEFAULT; +int16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE; +int16_t animation_type = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW; void showDefaultLedstrip(); void showAnimation(); @@ -31,7 +32,7 @@ void updateLedStrip() { EVERY_N_MILLISECONDS( 20 ) { gHue++; } - if (cpputils::is_in(blinkAnimation, LEDSTRIP_ANIMATION_BLINKLEFT, LEDSTRIP_ANIMATION_BLINKRIGHT, LEDSTRIP_ANIMATION_BLINKBOTH)) + if (cpputils::is_in(blinkAnimation, LEDSTRIP_OVERWRITE_BLINKLEFT, LEDSTRIP_OVERWRITE_BLINKRIGHT, LEDSTRIP_OVERWRITE_BLINKBOTH)) { std::fill(std::begin(leds), std::end(leds), CRGB{0, 0, 0}); @@ -40,15 +41,15 @@ void updateLedStrip() auto color = CRGB{255, 255, 0}; const auto center = (std::begin(leds) + (leds.size() / 2) + settings.ledstrip.centerOffset); -#ifndef LEDSTRIP_WRONG_DIRECTION - if (blinkAnimation != LEDSTRIP_ANIMATION_BLINKRIGHT) +#ifdef LEDSTRIP_WRONG_DIRECTION + if (blinkAnimation != LEDSTRIP_OVERWRITE_BLINKRIGHT) std::fill(center - settings.ledstrip.bigOffset, center - settings.ledstrip.smallOffset, color); - if (blinkAnimation != LEDSTRIP_ANIMATION_BLINKLEFT) + if (blinkAnimation != LEDSTRIP_OVERWRITE_BLINKLEFT) std::fill(center + settings.ledstrip.smallOffset, center + settings.ledstrip.bigOffset, color); #else - if (blinkAnimation != LEDSTRIP_ANIMATION_BLINKLEFT) + if (blinkAnimation != LEDSTRIP_OVERWRITE_BLINKLEFT) std::fill(center - settings.ledstrip.bigOffset, center - settings.ledstrip.smallOffset, color); - if (blinkAnimation != LEDSTRIP_ANIMATION_BLINKRIGHT) + if (blinkAnimation != LEDSTRIP_OVERWRITE_BLINKRIGHT) std::fill(center + settings.ledstrip.smallOffset, center + settings.ledstrip.bigOffset, color); #endif } @@ -92,9 +93,9 @@ void updateLedStrip() } void showAnimation() { - if (blinkAnimation == LEDSTRIP_ANIMATION_DEFAULTRAINBOW) showDefaultLedstrip(); - else if (blinkAnimation == LEDSTRIP_ANIMATION_BETTERRAINBOW) showBetterRainbow(); - else if (blinkAnimation == LEDSTRIP_ANIMATION_SPEEDSYNCANIMATION) showSpeedSyncAnimation(); + if (animation_type == LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW) showDefaultLedstrip(); + else if (animation_type == LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW) showBetterRainbow(); + else if (animation_type == LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION) showSpeedSyncAnimation(); else showDefaultLedstrip(); } diff --git a/main/ledstripdefines.h b/main/ledstripdefines.h index 282bcc4..f292349 100644 --- a/main/ledstripdefines.h +++ b/main/ledstripdefines.h @@ -3,13 +3,12 @@ * This file contains a few defines, so you don't have to remember which ledstrip animation is which number */ -#define LEDSTRIP_ANIMATION_DEFAULTRAINBOW 0 -#define LEDSTRIP_ANIMATION_BLINKLEFT 1 -#define LEDSTRIP_ANIMATION_BLINKRIGHT 2 -#define LEDSTRIP_ANIMATION_BLINKBOTH 3 -#define LEDSTRIP_ANIMATION_BETTERRAINBOW 4 -#define LEDSTRIP_ANIMATION_SPEEDSYNCANIMATION 5 +#define LEDSTRIP_OVERWRITE_NONE 0 +#define LEDSTRIP_OVERWRITE_BLINKLEFT 1 +#define LEDSTRIP_OVERWRITE_BLINKRIGHT 2 +#define LEDSTRIP_OVERWRITE_BLINKBOTH 3 -#ifndef LEDSTRIP_ANIMATION_DEFAULT -#define LEDSTRIP_ANIMATION_DEFAULT LEDSTRIP_ANIMATION_DEFAULTRAINBOW -#endif + +#define LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW 0 +#define LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW 1 +#define LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION 2 diff --git a/main/texts.h b/main/texts.h index 45ca6fd..3fd3ebe 100644 --- a/main/texts.h +++ b/main/texts.h @@ -243,6 +243,7 @@ constexpr char TEXT_LEDSTRIP[] = "Ledstrip"; constexpr char TEXT_LEDANIMATION[] = "LED Animation"; constexpr char TEXT_BRAKELIGHTS[] = "Brake Lights"; constexpr char TEXT_BLINKANIMATION[] = "Blink animation"; +constexpr char TEXT_ANIMATION_TYPE[] = "Blink animation"; constexpr char TEXT_LEDSCOUNT[] = "LEDs Count"; constexpr char TEXT_CENTEROFFSET[] = "Center Offset"; constexpr char TEXT_SMALLOFFSET[] = "Small Offset"; @@ -253,11 +254,14 @@ constexpr char TEXT_LEDSTRIP_MILLIAMP[] = "Ledstrip 0.1A"; //LedstripSelectAnimationMenu constexpr char TEXT_SELECTANIMATION[] = "Select Animation"; constexpr char TEXT_ANIMATION_DEFAULTRAINBOW[] = "Default Rainbow"; +constexpr char TEXT_ANIMATION_BETTERRAINBOW[] = "Better Rainbow"; +constexpr char TEXT_ANIMATION_SPEEDSYNCANIMATION[] = "Speed Sync"; + +//LedstripSelectBlinkMenu +constexpr char TEXT_ANIMATION_BLINKNONE[] = "Blink Off"; constexpr char TEXT_ANIMATION_BLINKLEFT[] = "Blink Left"; constexpr char TEXT_ANIMATION_BLINKRIGHT[] = "Blink Right"; constexpr char TEXT_ANIMATION_BLINKBOTH[] = "Blink Both"; -constexpr char TEXT_ANIMATION_BETTERRAINBOW[] = "Better Rainbow"; -constexpr char TEXT_ANIMATION_SPEEDSYNCANIMATION[] = "Speed Sync"; //LockscreenSettingsMenu constexpr char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings";