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 | |
| 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>
| -rw-r--r-- | docs/feature_rgb_matrix.md | 2 | ||||
| -rw-r--r-- | docs/squeezing_avr.md | 1 | ||||
| -rw-r--r-- | quantum/rgb_matrix/animations/pixel_flow_anim.h | 51 | ||||
| -rw-r--r-- | quantum/rgb_matrix/animations/rgb_matrix_effects.inc | 1 |
4 files changed, 55 insertions, 0 deletions
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 3384aa718..0e2e68233 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md | |||
| @@ -455,6 +455,7 @@ enum rgb_matrix_effects { | |||
| 455 | RGB_MATRIX_HUE_PENDULUM, // Hue shifts up a slight ammount in a wave to the right, then back to the left | 455 | RGB_MATRIX_HUE_PENDULUM, // Hue shifts up a slight ammount in a wave to the right, then back to the left |
| 456 | RGB_MATRIX_HUE_WAVE, // Hue shifts up a slight ammount and then back down in a wave to the right | 456 | RGB_MATRIX_HUE_WAVE, // Hue shifts up a slight ammount and then back down in a wave to the right |
| 457 | RGB_MATRIX_PIXEL_FRACTAL, // Single hue fractal filled keys pulsing horizontally out to edges | 457 | RGB_MATRIX_PIXEL_FRACTAL, // Single hue fractal filled keys pulsing horizontally out to edges |
| 458 | RGB_MATRIX_PIXEL_FLOW, // Pulsing RGB flow along LED wiring with random hues | ||
| 458 | RGB_MATRIX_PIXEL_RAIN, // Randomly light keys with random hues | 459 | RGB_MATRIX_PIXEL_RAIN, // Randomly light keys with random hues |
| 459 | #if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | 460 | #if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS) |
| 460 | RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM! | 461 | RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM! |
| @@ -510,6 +511,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi | |||
| 510 | |`#define ENABLE_RGB_MATRIX_HUE_PENDULUM` |Enables `RGB_MATRIX_HUE_PENDULUM` | | 511 | |`#define ENABLE_RGB_MATRIX_HUE_PENDULUM` |Enables `RGB_MATRIX_HUE_PENDULUM` | |
| 511 | |`#define ENABLE_RGB_MATRIX_HUE_WAVE` |Enables `RGB_MATRIX_HUE_WAVE ` | | 512 | |`#define ENABLE_RGB_MATRIX_HUE_WAVE` |Enables `RGB_MATRIX_HUE_WAVE ` | |
| 512 | |`#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL` |Enables `RGB_MATRIX_PIXEL_FRACTAL` | | 513 | |`#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL` |Enables `RGB_MATRIX_PIXEL_FRACTAL` | |
| 514 | |`#define ENABLE_RGB_MATRIX_PIXEL_FLOW` |Enables `RGB_MATRIX_PIXEL_FLOW` | | ||
| 513 | |`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` | | 515 | |`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` | |
| 514 | 516 | ||
| 515 | ?> These modes don't require any additional defines. | 517 | ?> These modes don't require any additional defines. |
diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md index e4d8d7c14..4a147e0c6 100644 --- a/docs/squeezing_avr.md +++ b/docs/squeezing_avr.md | |||
| @@ -147,6 +147,7 @@ For RGB Matrix, these need to be explicitly enabled as well. To disable any that | |||
| 147 | #undef ENABLE_RGB_MATRIX_HUE_PENDULUM | 147 | #undef ENABLE_RGB_MATRIX_HUE_PENDULUM |
| 148 | #undef ENABLE_RGB_MATRIX_HUE_WAVE | 148 | #undef ENABLE_RGB_MATRIX_HUE_WAVE |
| 149 | #undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL | 149 | #undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL |
| 150 | #undef ENABLE_RGB_MATRIX_PIXEL_FLOW | ||
| 150 | #undef ENABLE_RGB_MATRIX_PIXEL_RAIN | 151 | #undef ENABLE_RGB_MATRIX_PIXEL_RAIN |
| 151 | 152 | ||
| 152 | #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP | 153 | #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP |
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" |
