diff options
author | Albert Y <76888457+filterpaper@users.noreply.github.com> | 2022-02-05 02:55:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-05 05:55:51 +1100 |
commit | e8fa329073d8752cad9b11b90287fd20f130ac6f (patch) | |
tree | f1f8e5ab2ba97b3fdf0832f1ad19ed701d0a0a57 /quantum | |
parent | 98916fd8629f0e8ac5bd3aef73dc59082be42d24 (diff) | |
download | qmk_firmware-e8fa329073d8752cad9b11b90287fd20f130ac6f.tar.gz qmk_firmware-e8fa329073d8752cad9b11b90287fd20f130ac6f.zip |
[Core] Add Pixel Flow RGB matrix effect (#15829)
* Initial PIXEL FLOW matrix effect commit
* Commit suggested use of rgb_matrix_check_finished_leds
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
* Code change support for split RGB
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/rgb_matrix/animations/pixel_flow_anim.h | 51 | ||||
-rw-r--r-- | quantum/rgb_matrix/animations/rgb_matrix_effects.inc | 1 |
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 000000000..0e81cd011 --- /dev/null +++ b/quantum/rgb_matrix/animations/pixel_flow_anim.h | |||
@@ -0,0 +1,51 @@ | |||
1 | // Copyright 2022 @filterpaper | ||
2 | // SPDX-License-Identifier: GPL-2.0+ | ||
3 | |||
4 | #ifdef ENABLE_RGB_MATRIX_PIXEL_FLOW | ||
5 | RGB_MATRIX_EFFECT(PIXEL_FLOW) | ||
6 | # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS | ||
7 | |||
8 | static bool PIXEL_FLOW(effect_params_t* params) { | ||
9 | // LED state array | ||
10 | static RGB led[DRIVER_LED_TOTAL]; | ||
11 | |||
12 | static uint32_t wait_timer = 0; | ||
13 | if (wait_timer > g_rgb_timer) { | ||
14 | return false; | ||
15 | } | ||
16 | |||
17 | inline uint32_t interval(void) { | ||
18 | return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); | ||
19 | } | ||
20 | |||
21 | if (params->init) { | ||
22 | // Clear LEDs and fill the state array | ||
23 | rgb_matrix_set_color_all(0, 0, 0); | ||
24 | for (uint8_t j = 0; j < DRIVER_LED_TOTAL; ++j) { | ||
25 | led[j] = (random8() & 2) ? (RGB){0,0,0} : hsv_to_rgb((HSV){random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v}); | ||
26 | } | ||
27 | } | ||
28 | |||
29 | RGB_MATRIX_USE_LIMITS(led_min, led_max); | ||
30 | // Light LEDs based on state array | ||
31 | for (uint8_t i = led_min; i < led_max; ++i) { | ||
32 | RGB_MATRIX_TEST_LED_FLAGS(); | ||
33 | rgb_matrix_set_color(i, led[i].r, led[i].g, led[i].b); | ||
34 | } | ||
35 | |||
36 | if (!rgb_matrix_check_finished_leds(led_max)) { | ||
37 | // Shift LED state forward | ||
38 | for (uint8_t j = 0; j < led_max-1; ++j) { | ||
39 | led[j] = led[j+1]; | ||
40 | } | ||
41 | // Fill last LED | ||
42 | led[led_max-1] = (random8() & 2) ? (RGB){0,0,0} : hsv_to_rgb((HSV){random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v}); | ||
43 | // Set pulse timer | ||
44 | wait_timer = g_rgb_timer + interval(); | ||
45 | } | ||
46 | |||
47 | return rgb_matrix_check_finished_leds(led_max); | ||
48 | } | ||
49 | |||
50 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | ||
51 | #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 27ce34723..ac7bac428 100644 --- a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc +++ b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc | |||
@@ -27,6 +27,7 @@ | |||
27 | #include "hue_pendulum_anim.h" | 27 | #include "hue_pendulum_anim.h" |
28 | #include "hue_wave_anim.h" | 28 | #include "hue_wave_anim.h" |
29 | #include "pixel_rain_anim.h" | 29 | #include "pixel_rain_anim.h" |
30 | #include "pixel_flow_anim.h" | ||
30 | #include "pixel_fractal_anim.h" | 31 | #include "pixel_fractal_anim.h" |
31 | #include "typing_heatmap_anim.h" | 32 | #include "typing_heatmap_anim.h" |
32 | #include "digital_rain_anim.h" | 33 | #include "digital_rain_anim.h" |