aboutsummaryrefslogtreecommitdiff
path: root/quantum/rgb_matrix.h
diff options
context:
space:
mode:
authorXScorpion2 <rcalt2vt@gmail.com>2019-04-02 19:24:14 -0500
committerDrashna Jaelre <drashna@live.com>2019-04-02 17:24:14 -0700
commitc98247e3dd2958bd2d8969dc75170e7e2757b895 (patch)
treea566de223a9501809e1059c522b52adf7d37fe74 /quantum/rgb_matrix.h
parent68d8bb2b3fb8a35fda164539d27754b3f74e0819 (diff)
downloadqmk_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.h152
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
33typedef 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
38typedef 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
51extern const rgb_led g_rgb_leds[DRIVER_LED_TOTAL]; 52extern 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
59typedef 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
71enum rgb_matrix_effects { 60enum 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
125uint8_t rgb_matrix_map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i);
126
132void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); 127void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
133void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); 128void 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
165uint32_t rgb_matrix_get_tick(void);
166
167void rgb_matrix_toggle(void); 160void rgb_matrix_toggle(void);
168void rgb_matrix_enable(void); 161void rgb_matrix_enable(void);
169void rgb_matrix_enable_noeeprom(void); 162void rgb_matrix_enable_noeeprom(void);
@@ -212,7 +205,6 @@ uint8_t rgb_matrix_get_mode(void);
212typedef struct { 205typedef 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. */