diff --git a/src/conf/datatypes.h b/src/conf/datatypes.h
index 14a39bf..3db3f4c 100644
--- a/src/conf/datatypes.h
+++ b/src/conf/datatypes.h
@@ -86,6 +86,8 @@ typedef enum {
LED_MODE_STROBE,
LED_MODE_KNIGHT_RIDER,
LED_MODE_FELONY,
+ LED_MODE_RAINBOW_CYCLE,
+ LED_MODE_RAINBOW_FADE,
} LedMode;
typedef enum {
diff --git a/src/conf/settings.xml b/src/conf/settings.xml
index 5ea47bb..1ca3939 100644
--- a/src/conf/settings.xml
+++ b/src/conf/settings.xml
@@ -2255,6 +2255,8 @@ p, li { white-space: pre-wrap; }
Strobe
Knight Rider
Felony
+ Rainbow Cycle
+ Rainbow Fade
Front Brightness
@@ -2417,6 +2419,8 @@ p, li { white-space: pre-wrap; }
Strobe
Knight Rider
Felony
+ Rainbow Cycle
+ Rainbow Fade
Rear Brightness
@@ -2579,6 +2583,8 @@ p, li { white-space: pre-wrap; }
Strobe
Knight Rider
Felony
+ Rainbow Cycle
+ Rainbow Fade
Headlights Brightness
@@ -2743,6 +2749,8 @@ p, li { white-space: pre-wrap; }
Strobe
Knight Rider
Felony
+ Rainbow Cycle
+ Rainbow Fade
Taillights Brightness
@@ -3035,6 +3043,8 @@ p, li { white-space: pre-wrap; }
Strobe
Knight Rider
Felony
+ Rainbow Cycle
+ Rainbow Fade
Status Idle Brightness
diff --git a/src/leds.c b/src/leds.c
index 92b880b..6c72b28 100644
--- a/src/leds.c
+++ b/src/leds.c
@@ -312,6 +312,32 @@ static void anim_felony(Leds *leds, const LedStrip *strip, const LedBar *bar, fl
}
}
+static const uint32_t rainbow_cycle_colors[] = {
+ 0x00FFFF00,
+ 0x0000FF00,
+ 0x0000FFFF,
+ 0x000000FF,
+ 0x00FF00FF,
+ 0x00FF0000,
+};
+static const uint8_t rainbow_cycle_colors_len =
+ sizeof(rainbow_cycle_colors) / sizeof(rainbow_cycle_colors[0]);
+
+static void anim_rainbow_cycle(Leds *leds, const LedStrip *strip, float time) {
+ uint8_t color_idx = (uint8_t) (time / 0.1f) % rainbow_cycle_colors_len;
+ strip_set_color(leds, strip, rainbow_cycle_colors[color_idx], strip->brightness, 1.0f);
+}
+
+static void anim_rgb_fade(Leds *leds, const LedStrip *strip, float time) {
+ strip_set_color(
+ leds,
+ strip,
+ color_wheel((uint8_t) floorf(fmodf(time, 4.0f) * 255.0f)),
+ strip->brightness,
+ 1.0f
+ );
+}
+
static void led_strip_animate(Leds *leds, const LedStrip *strip, const LedBar *bar, float time) {
time *= bar->speed;
@@ -334,6 +360,12 @@ static void led_strip_animate(Leds *leds, const LedStrip *strip, const LedBar *b
case LED_MODE_FELONY:
anim_felony(leds, strip, bar, time);
break;
+ case LED_MODE_RAINBOW_CYCLE:
+ anim_rainbow_cycle(leds, strip, time);
+ break;
+ case LED_MODE_RAINBOW_FADE:
+ anim_rgb_fade(leds, strip, time);
+ break;
}
}