summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2022-02-04 18:56:47 +0000
committerQMK Bot <hello@qmk.fm>2022-02-04 18:56:47 +0000
commitf2384d062bf3fff9fc20bc6d40907f4928135d13 (patch)
treeb5de60667df2ca8d3d8c5b6c14ae4cb46ae47d91 /quantum
parent135c93599036bbe646a69b568eef9219823a4be9 (diff)
parente8fa329073d8752cad9b11b90287fd20f130ac6f (diff)
Merge remote-tracking branch 'origin/master' into develop
Diffstat (limited to 'quantum')
-rw-r--r--quantum/rgb_matrix/animations/pixel_flow_anim.h51
-rw-r--r--quantum/rgb_matrix/animations/rgb_matrix_effects.inc1
2 files changed, 52 insertions, 0 deletions
diff --git a/quantum/rgb_matrix/animations/pixel_flow_anim.h b/quantum/rgb_matrix/animations/pixel_flow_anim.h
new file mode 100644
index 0000000000..0e81cd0111
--- /dev/null
+++ b/quantum/rgb_matrix/animations/pixel_flow_anim.h
@@ -0,0 +1,51 @@
+// Copyright 2022 @filterpaper
+// SPDX-License-Identifier: GPL-2.0+
+
+#ifdef ENABLE_RGB_MATRIX_PIXEL_FLOW
+RGB_MATRIX_EFFECT(PIXEL_FLOW)
+#    ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+static bool PIXEL_FLOW(effect_params_t* params) {
+    // LED state array
+    static RGB led[DRIVER_LED_TOTAL];
+
+    static uint32_t wait_timer = 0;
+    if (wait_timer > g_rgb_timer) {
+        return false;
+    }
+
+    inline uint32_t interval(void) {
+        return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16);
+    }
+
+    if (params->init) {
+        // Clear LEDs and fill the state array
+        rgb_matrix_set_color_all(0, 0, 0);
+        for (uint8_t j = 0; j < DRIVER_LED_TOTAL; ++j) {
+            led[j] = (random8() & 2) ? (RGB){0,0,0} : hsv_to_rgb((HSV){random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v});
+        }
+    }
+
+    RGB_MATRIX_USE_LIMITS(led_min, led_max);
+    // Light LEDs based on state array
+    for (uint8_t i = led_min; i < led_max; ++i) {
+        RGB_MATRIX_TEST_LED_FLAGS();
+        rgb_matrix_set_color(i, led[i].r, led[i].g, led[i].b);
+    }
+
+    if (!rgb_matrix_check_finished_leds(led_max)) {
+        // Shift LED state forward
+        for (uint8_t j = 0; j < led_max-1; ++j) {
+            led[j] = led[j+1];
+        }
+        // Fill last LED
+        led[led_max-1] = (random8() & 2) ? (RGB){0,0,0} : hsv_to_rgb((HSV){random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v});
+        // Set pulse timer
+        wait_timer = g_rgb_timer + interval();
+    }
+
+    return rgb_matrix_check_finished_leds(led_max);
+}
+
+#    endif  // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif      // ENABLE_RGB_MATRIX_PIXEL_FLOW
diff --git a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
index 27ce347235..ac7bac428d 100644
--- a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
+++ b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
@@ -27,6 +27,7 @@
 #include "hue_pendulum_anim.h"
 #include "hue_wave_anim.h"
 #include "pixel_rain_anim.h"
+#include "pixel_flow_anim.h"
 #include "pixel_fractal_anim.h"
 #include "typing_heatmap_anim.h"
 #include "digital_rain_anim.h"