diff options
| author | XScorpion2 <rcalt2vt@gmail.com> | 2019-04-02 19:24:14 -0500 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2019-04-02 17:24:14 -0700 |
| commit | c98247e3dd2958bd2d8969dc75170e7e2757b895 (patch) | |
| tree | a566de223a9501809e1059c522b52adf7d37fe74 /quantum/rgb_matrix.h | |
| parent | 68d8bb2b3fb8a35fda164539d27754b3f74e0819 (diff) | |
| download | qmk_firmware-c98247e3dd2958bd2d8969dc75170e7e2757b895.tar.gz qmk_firmware-c98247e3dd2958bd2d8969dc75170e7e2757b895.zip | |
RGB Matrix Overhaul (#5372)
* RGB Matrix overhaul
Breakout of animations to separate files
Integration of optimized int based math lib
Overhaul of rgb_matrix.c and animations for performance
* Updating effect function api for future extensions
* Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary
* Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain
Diffstat (limited to 'quantum/rgb_matrix.h')
| -rw-r--r-- | quantum/rgb_matrix.h | 152 |
1 files changed, 72 insertions, 80 deletions
diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index e6acd2d4b..855ea0323 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h | |||
| @@ -21,32 +21,33 @@ | |||
| 21 | 21 | ||
| 22 | #include <stdint.h> | 22 | #include <stdint.h> |
| 23 | #include <stdbool.h> | 23 | #include <stdbool.h> |
| 24 | #include "rgb_matrix_types.h" | ||
| 24 | #include "color.h" | 25 | #include "color.h" |
| 25 | #include "quantum.h" | 26 | #include "quantum.h" |
| 26 | 27 | ||
| 27 | #ifdef IS31FL3731 | 28 | #ifdef IS31FL3731 |
| 28 | #include "is31fl3731.h" | 29 | #include "is31fl3731.h" |
| 29 | #elif defined (IS31FL3733) | 30 | #elif defined (IS31FL3733) |
| 30 | #include "is31fl3733.h" | 31 | #include "is31fl3733.h" |
| 31 | #endif | 32 | #endif |
| 32 | 33 | ||
| 33 | typedef struct Point { | 34 | #ifndef RGB_MATRIX_LED_FLUSH_LIMIT |
| 34 | uint8_t x; | 35 | #define RGB_MATRIX_LED_FLUSH_LIMIT 16 |
| 35 | uint8_t y; | 36 | #endif |
| 36 | } __attribute__((packed)) Point; | ||
| 37 | 37 | ||
| 38 | typedef struct rgb_led { | 38 | #ifndef RGB_MATRIX_LED_PROCESS_LIMIT |
| 39 | union { | 39 | #define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 |
| 40 | uint8_t raw; | 40 | #endif |
| 41 | struct { | ||
| 42 | uint8_t row:4; // 16 max | ||
| 43 | uint8_t col:4; // 16 max | ||
| 44 | }; | ||
| 45 | } matrix_co; | ||
| 46 | Point point; | ||
| 47 | uint8_t modifier:1; | ||
| 48 | } __attribute__((packed)) rgb_led; | ||
| 49 | 41 | ||
| 42 | #if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL | ||
| 43 | #define RGB_MATRIX_USE_LIMITS(min, max) uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; \ | ||
| 44 | uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT; \ | ||
| 45 | if (max > DRIVER_LED_TOTAL) \ | ||
| 46 | max = DRIVER_LED_TOTAL; | ||
| 47 | #else | ||
| 48 | #define RGB_MATRIX_USE_LIMITS(min, max) uint8_t min = 0; \ | ||
| 49 | uint8_t max = DRIVER_LED_TOTAL; | ||
| 50 | #endif | ||
| 50 | 51 | ||
| 51 | extern const rgb_led g_rgb_leds[DRIVER_LED_TOTAL]; | 52 | extern const rgb_led g_rgb_leds[DRIVER_LED_TOTAL]; |
| 52 | 53 | ||
| @@ -56,79 +57,73 @@ typedef struct | |||
| 56 | uint8_t index; | 57 | uint8_t index; |
| 57 | } rgb_indicator; | 58 | } rgb_indicator; |
| 58 | 59 | ||
| 59 | typedef union { | ||
| 60 | uint32_t raw; | ||
| 61 | struct { | ||
| 62 | bool enable :1; | ||
| 63 | uint8_t mode :6; | ||
| 64 | uint16_t hue :9; | ||
| 65 | uint8_t sat :8; | ||
| 66 | uint8_t val :8; | ||
| 67 | uint8_t speed :8;//EECONFIG needs to be increased to support this | ||
| 68 | }; | ||
| 69 | } rgb_config_t; | ||
| 70 | |||
| 71 | enum rgb_matrix_effects { | 60 | enum rgb_matrix_effects { |
| 61 | RGB_MATRIX_NONE = 0, | ||
| 72 | RGB_MATRIX_SOLID_COLOR = 1, | 62 | RGB_MATRIX_SOLID_COLOR = 1, |
| 73 | #ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS | 63 | #ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS |
| 74 | RGB_MATRIX_ALPHAS_MODS, | 64 | RGB_MATRIX_ALPHAS_MODS, |
| 75 | #endif | 65 | #endif // DISABLE_RGB_MATRIX_ALPHAS_MODS |
| 76 | #ifndef DISABLE_RGB_MATRIX_DUAL_BEACON | ||
| 77 | RGB_MATRIX_DUAL_BEACON, | ||
| 78 | #endif | ||
| 79 | #ifndef DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN | 66 | #ifndef DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN |
| 80 | RGB_MATRIX_GRADIENT_UP_DOWN, | 67 | RGB_MATRIX_GRADIENT_UP_DOWN, |
| 81 | #endif | 68 | #endif // DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN |
| 82 | #ifndef DISABLE_RGB_MATRIX_RAINDROPS | 69 | #ifndef DISABLE_RGB_MATRIX_BREATHING |
| 83 | RGB_MATRIX_RAINDROPS, | 70 | RGB_MATRIX_BREATHING, |
| 84 | #endif | 71 | #endif // DISABLE_RGB_MATRIX_BREATHING |
| 85 | #ifndef DISABLE_RGB_MATRIX_CYCLE_ALL | 72 | #ifndef DISABLE_RGB_MATRIX_CYCLE_ALL |
| 86 | RGB_MATRIX_CYCLE_ALL, | 73 | RGB_MATRIX_CYCLE_ALL, |
| 87 | #endif | 74 | #endif // DISABLE_RGB_MATRIX_CYCLE_ALL |
| 88 | #ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT | 75 | #ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT |
| 89 | RGB_MATRIX_CYCLE_LEFT_RIGHT, | 76 | RGB_MATRIX_CYCLE_LEFT_RIGHT, |
| 90 | #endif | 77 | #endif // DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT |
| 91 | #ifndef DISABLE_RGB_MATRIX_CYCLE_UP_DOWN | 78 | #ifndef DISABLE_RGB_MATRIX_CYCLE_UP_DOWN |
| 92 | RGB_MATRIX_CYCLE_UP_DOWN, | 79 | RGB_MATRIX_CYCLE_UP_DOWN, |
| 93 | #endif | 80 | #endif // DISABLE_RGB_MATRIX_CYCLE_UP_DOWN |
| 81 | #ifndef DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON | ||
| 82 | RGB_MATRIX_RAINBOW_MOVING_CHEVRON, | ||
| 83 | #endif // DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON | ||
| 84 | #ifndef DISABLE_RGB_MATRIX_DUAL_BEACON | ||
| 85 | RGB_MATRIX_DUAL_BEACON, | ||
| 86 | #endif // DISABLE_RGB_MATRIX_DUAL_BEACON | ||
| 94 | #ifndef DISABLE_RGB_MATRIX_RAINBOW_BEACON | 87 | #ifndef DISABLE_RGB_MATRIX_RAINBOW_BEACON |
| 95 | RGB_MATRIX_RAINBOW_BEACON, | 88 | RGB_MATRIX_RAINBOW_BEACON, |
| 96 | #endif | 89 | #endif // DISABLE_RGB_MATRIX_RAINBOW_BEACON |
| 97 | #ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS | 90 | #ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS |
| 98 | RGB_MATRIX_RAINBOW_PINWHEELS, | 91 | RGB_MATRIX_RAINBOW_PINWHEELS, |
| 99 | #endif | 92 | #endif // DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS |
| 100 | #ifndef DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON | 93 | #ifndef DISABLE_RGB_MATRIX_RAINDROPS |
| 101 | RGB_MATRIX_RAINBOW_MOVING_CHEVRON, | 94 | RGB_MATRIX_RAINDROPS, |
| 102 | #endif | 95 | #endif // DISABLE_RGB_MATRIX_RAINDROPS |
| 103 | #ifndef DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS | 96 | #ifndef DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS |
| 104 | RGB_MATRIX_JELLYBEAN_RAINDROPS, | 97 | RGB_MATRIX_JELLYBEAN_RAINDROPS, |
| 105 | #endif | 98 | #endif // DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS |
| 106 | #ifndef DISABLE_RGB_MATRIX_DIGITAL_RAIN | 99 | #ifndef DISABLE_RGB_MATRIX_DIGITAL_RAIN |
| 107 | RGB_MATRIX_DIGITAL_RAIN, | 100 | RGB_MATRIX_DIGITAL_RAIN, |
| 108 | #endif | 101 | #endif // DISABLE_RGB_MATRIX_DIGITAL_RAIN |
| 109 | #ifdef RGB_MATRIX_KEYPRESSES | 102 | #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED |
| 110 | #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE | 103 | #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE |
| 111 | RGB_MATRIX_SOLID_REACTIVE, | 104 | RGB_MATRIX_SOLID_REACTIVE_SIMPLE, |
| 112 | #endif | 105 | #endif // DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE |
| 113 | #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE | 106 | #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE |
| 114 | RGB_MATRIX_SOLID_REACTIVE_SIMPLE, | 107 | RGB_MATRIX_SOLID_REACTIVE, |
| 115 | #endif | 108 | #endif // DISABLE_RGB_MATRIX_SOLID_REACTIVE |
| 116 | #ifndef DISABLE_RGB_MATRIX_SPLASH | 109 | #ifndef DISABLE_RGB_MATRIX_SPLASH |
| 117 | RGB_MATRIX_SPLASH, | 110 | RGB_MATRIX_SPLASH, |
| 118 | #endif | 111 | #endif // DISABLE_RGB_MATRIX_SPLASH |
| 119 | #ifndef DISABLE_RGB_MATRIX_MULTISPLASH | 112 | #ifndef DISABLE_RGB_MATRIX_MULTISPLASH |
| 120 | RGB_MATRIX_MULTISPLASH, | 113 | RGB_MATRIX_MULTISPLASH, |
| 121 | #endif | 114 | #endif // DISABLE_RGB_MATRIX_MULTISPLASH |
| 122 | #ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH | 115 | #ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH |
| 123 | RGB_MATRIX_SOLID_SPLASH, | 116 | RGB_MATRIX_SOLID_SPLASH, |
| 124 | #endif | 117 | #endif // DISABLE_RGB_MATRIX_SOLID_SPLASH |
| 125 | #ifndef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH | 118 | #ifndef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH |
| 126 | RGB_MATRIX_SOLID_MULTISPLASH, | 119 | RGB_MATRIX_SOLID_MULTISPLASH, |
| 127 | #endif | 120 | #endif // DISABLE_RGB_MATRIX_SOLID_MULTISPLASH |
| 128 | #endif | 121 | #endif // RGB_MATRIX_KEYREACTIVE_ENABLED |
| 129 | RGB_MATRIX_EFFECT_MAX | 122 | RGB_MATRIX_EFFECT_MAX |
| 130 | }; | 123 | }; |
| 131 | 124 | ||
| 125 | uint8_t rgb_matrix_map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i); | ||
| 126 | |||
| 132 | void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); | 127 | void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); |
| 133 | void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); | 128 | void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); |
| 134 | 129 | ||
| @@ -162,8 +157,6 @@ void rgb_matrix_decrease(void); | |||
| 162 | // void backlight_get_key_color( uint8_t led, HSV *hsv ); | 157 | // void backlight_get_key_color( uint8_t led, HSV *hsv ); |
| 163 | // void backlight_set_key_color( uint8_t row, uint8_t column, HSV hsv ); | 158 | // void backlight_set_key_color( uint8_t row, uint8_t column, HSV hsv ); |
| 164 | 159 | ||
| 165 | uint32_t rgb_matrix_get_tick(void); | ||
| 166 | |||
| 167 | void rgb_matrix_toggle(void); | 160 | void rgb_matrix_toggle(void); |
| 168 | void rgb_matrix_enable(void); | 161 | void rgb_matrix_enable(void); |
| 169 | void rgb_matrix_enable_noeeprom(void); | 162 | void rgb_matrix_enable_noeeprom(void); |
| @@ -212,7 +205,6 @@ uint8_t rgb_matrix_get_mode(void); | |||
| 212 | typedef struct { | 205 | typedef struct { |
| 213 | /* Perform any initialisation required for the other driver functions to work. */ | 206 | /* Perform any initialisation required for the other driver functions to work. */ |
| 214 | void (*init)(void); | 207 | void (*init)(void); |
| 215 | |||
| 216 | /* Set the colour of a single LED in the buffer. */ | 208 | /* Set the colour of a single LED in the buffer. */ |
| 217 | void (*set_color)(int index, uint8_t r, uint8_t g, uint8_t b); | 209 | void (*set_color)(int index, uint8_t r, uint8_t g, uint8_t b); |
| 218 | /* Set the colour of all LEDS on the keyboard in the buffer. */ | 210 | /* Set the colour of all LEDS on the keyboard in the buffer. */ |
