Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplfy RGB/LED matrix effect logic #21703

Merged
merged 3 commits into from
Aug 22, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions builddefs/common_features.mk
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ endif
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations/runners
POST_CONFIG_H += $(QUANTUM_DIR)/led_matrix/post_config.h
SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
SRC += $(QUANTUM_DIR)/led_matrix/led_matrix.c
SRC += $(QUANTUM_DIR)/led_matrix/led_matrix_drivers.c
Expand Down Expand Up @@ -432,6 +433,7 @@ endif
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations/runners
POST_CONFIG_H += $(QUANTUM_DIR)/rgb_matrix/post_config.h
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix.c
SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix_drivers.c
Expand Down
12 changes: 3 additions & 9 deletions docs/feature_led_matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,6 @@ enum led_matrix_effects {
LED_MATRIX_CYCLE_UP_DOWN, // Full gradient scrolling top to bottom
LED_MATRIX_CYCLE_OUT_IN, // Full gradient scrolling out to in
LED_MATRIX_DUAL_BEACON, // Full gradient spinning around center of keyboard
#if defined(LED_MATRIX_KEYPRESSES) || defined(LED_MATRIX_KEYRELEASES)
LED_MATRIX_SOLID_REACTIVE_SIMPLE, // Pulses keys hit then fades out
LED_MATRIX_SOLID_REACTIVE_WIDE // Value pulses near a single key hit then fades out
LED_MATRIX_SOLID_REACTIVE_MULTIWIDE // Value pulses near multiple key hits then fades out
Expand All @@ -257,7 +256,6 @@ enum led_matrix_effects {
LED_MATRIX_SOLID_REACTIVE_MULTINEXUS // Value pulses away on the same column and row of multiple key hits then fades out
LED_MATRIX_SOLID_SPLASH, // Value pulses away from a single key hit then fades out
LED_MATRIX_SOLID_MULTISPLASH, // Value pulses away from multiple key hits then fades out
#endif
LED_MATRIX_WAVE_LEFT_RIGHT // Sine wave scrolling from left to right
LED_MATRIX_WAVE_UP_DOWN // Sine wave scrolling from up to down
LED_MATRIX_EFFECT_MAX
Expand All @@ -281,8 +279,6 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT` |Enables `LED_MATRIX_WAVE_LEFT_RIGHT` |
|`#define ENABLE_LED_MATRIX_WAVE_UP_DOWN` |Enables `LED_MATRIX_WAVE_UP_DOWN` |

?> These modes don't require any additional defines.

|Reactive Defines |Description |
|-------------------------------------------------------|----------------------------------------------|
|`#define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE` |Enables `LED_MATRIX_SOLID_REACTIVE_SIMPLE` |
Expand All @@ -295,7 +291,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_LED_MATRIX_SOLID_SPLASH` |Enables `LED_MATRIX_SOLID_SPLASH` |
|`#define ENABLE_LED_MATRIX_SOLID_MULTISPLASH` |Enables `LED_MATRIX_SOLID_MULTISPLASH` |

?> These modes also require the `LED_MATRIX_KEYPRESSES` or `LED_MATRIX_KEYRELEASES` define to be available.
?> These modes introduce additional logic that can increase firmware size.

## Custom LED Matrix Effects :id=custom-led-matrix-effects

Expand Down Expand Up @@ -361,9 +357,7 @@ For inspiration and examples, check out the built-in effects under `quantum/led_
## Additional `config.h` Options :id=additional-configh-options

```c
#define LED_MATRIX_KEYPRESSES // reacts to keypresses
#define LED_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
#define LED_MATRIX_FRAMEBUFFER_EFFECTS // enable framebuffer effects
#define LED_MATRIX_KEYRELEASES // reactive effects respond to keyreleases (instead of keypresses)
#define LED_MATRIX_TIMEOUT 0 // number of milliseconds to wait until led automatically turns off
#define LED_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
#define LED_MATRIX_LED_PROCESS_LIMIT (LED_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
Expand All @@ -373,7 +367,7 @@ For inspiration and examples, check out the built-in effects under `quantum/led_
#define LED_MATRIX_DEFAULT_VAL LED_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define LED_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If LED_MATRIX_KEYPRESSES or LED_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
// If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
```
## EEPROM storage :id=eeprom-storage
Expand Down
16 changes: 4 additions & 12 deletions docs/feature_rgb_matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -650,11 +650,8 @@ enum rgb_matrix_effects {
RGB_MATRIX_PIXEL_FRACTAL, // Single hue fractal filled keys pulsing horizontally out to edges
RGB_MATRIX_PIXEL_FLOW, // Pulsing RGB flow along LED wiring with random hues
RGB_MATRIX_PIXEL_RAIN, // Randomly light keys with random hues
#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM!
RGB_MATRIX_DIGITAL_RAIN, // That famous computer simulation
#endif
#if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES)
RGB_MATRIX_SOLID_REACTIVE_SIMPLE, // Pulses keys hit to hue & value then fades value out
RGB_MATRIX_SOLID_REACTIVE, // Static single hue, pulses keys hit to shifted hue then fades to current hue
RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
Expand All @@ -667,7 +664,6 @@ enum rgb_matrix_effects {
RGB_MATRIX_MULTISPLASH, // Full gradient & value pulse away from multiple key hits then fades value out
RGB_MATRIX_SOLID_SPLASH, // Hue & value pulse away from a single key hit then fades value out
RGB_MATRIX_SOLID_MULTISPLASH, // Hue & value pulse away from multiple key hits then fades value out
#endif
RGB_MATRIX_EFFECT_MAX
};
```
Expand Down Expand Up @@ -707,14 +703,12 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_RGB_MATRIX_PIXEL_FLOW` |Enables `RGB_MATRIX_PIXEL_FLOW` |
|`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` |

?> These modes don't require any additional defines.

|Framebuffer Defines |Description |
|------------------------------------------------------|----------------------------------------------|
|`#define ENABLE_RGB_MATRIX_TYPING_HEATMAP` |Enables `RGB_MATRIX_TYPING_HEATMAP` |
|`#define ENABLE_RGB_MATRIX_DIGITAL_RAIN` |Enables `RGB_MATRIX_DIGITAL_RAIN` |

?> These modes also require the `RGB_MATRIX_FRAMEBUFFER_EFFECTS` define to be available.
?> These modes introduce additional logic that can increase firmware size.

|Reactive Defines |Description |
|------------------------------------------------------|----------------------------------------------|
Expand All @@ -731,7 +725,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_RGB_MATRIX_SOLID_SPLASH` |Enables `RGB_MATRIX_SOLID_SPLASH` |
|`#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Enables `RGB_MATRIX_SOLID_MULTISPLASH` |

?> These modes also require the `RGB_MATRIX_KEYPRESSES` or `RGB_MATRIX_KEYRELEASES` define to be available.
?> These modes introduce additional logic that can increase firmware size.


### RGB Matrix Effect Typing Heatmap :id=rgb-matrix-effect-typing-heatmap
Expand Down Expand Up @@ -872,9 +866,7 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
## Additional `config.h` Options :id=additional-configh-options

```c
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS // enable framebuffer effects
#define RGB_MATRIX_KEYRELEASES // reactive effects respond to keyreleases (instead of keypresses)
#define RGB_MATRIX_TIMEOUT 0 // number of milliseconds to wait until rgb automatically turns off
#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
#define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
Expand All @@ -887,7 +879,7 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
#define RGB_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define RGB_MATRIX_DISABLE_KEYCODES // disables control of rgb matrix by keycodes (must use code functions to control the feature)
#define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
// If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
#define RGB_TRIGGER_ON_KEYDOWN // Triggers RGB keypress events on key down. This makes RGB control feel more responsive. This may cause RGB to not function properly on some boards
```
Expand Down
33 changes: 33 additions & 0 deletions quantum/led_matrix/post_config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

// reactive
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_SPLASH)
# define LED_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_LED_MATRIX_SOLID_MULTISPLASH)
# define LED_MATRIX_KEYPRESSES
#endif
53 changes: 53 additions & 0 deletions quantum/rgb_matrix/post_config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

// framebuffer
#if defined(ENABLE_RGB_MATRIX_TYPING_HEATMAP)
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#endif
#if defined(ENABLE_RGB_MATRIX_DIGITAL_RAIN)
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#endif

// reactive
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE)
zvecr marked this conversation as resolved.
Show resolved Hide resolved
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SPLASH)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_MULTISPLASH)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_SPLASH)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS)
# define RGB_MATRIX_KEYPRESSES
#endif
#if defined(ENABLE_RGB_MATRIX_SOLID_MULTISPLASH)
# define RGB_MATRIX_KEYPRESSES
#endif
zvecr marked this conversation as resolved.
Show resolved Hide resolved