From 4d5705ea6ceeb11cd2adc018644ec87c51af4e86 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Mon, 3 Sep 2018 08:26:53 +0100 Subject: Add new RGB matrix effect digital rain aka The Matrix --- quantum/rgb_matrix.h | 1 + 1 file changed, 1 insertion(+) (limited to 'quantum/rgb_matrix.h') diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index b91c9fba59..046d98790f 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -81,6 +81,7 @@ enum rgb_matrix_effects { RGB_MATRIX_RAINBOW_PINWHEELS, RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, + RGB_MATRIX_DIGITAL_RAIN, #ifdef RGB_MATRIX_KEYPRESSES RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, -- cgit v1.2.3 From f70f45ee677a2a39a759052a356e0c5d82e25424 Mon Sep 17 00:00:00 2001 From: James Laird-Wah Date: Fri, 28 Sep 2018 00:40:18 +1000 Subject: RGB Matrix refactoring to open up for new drivers (#3913) * rgb_matrix: use a driver ops struct This is intended to avoid #ifdef proliferation on adding more drivers, eg. model01, which use different architectures. * rgb_matrix: document driver struct members * rgb_matrix: remove unused LED testing code * rgb_matrix: don't build into IS31x drivers unless being used * rgb_matrix: refactor make config options This ensures that the necessary files are included for any custom RGB_MATRIX_ENABLE value, without having to add entries here for specific boards. This particularly affects model01 because its controller is integrated and won't be used anywhere else, so it's preferable not to put it in common_features.mk. This now validates the value of RGB_MATRIX_ENABLE. It was necessary to fix an error in ergodox_ez rules.mk using the wrong comment separator, yielding an invalid value. * IS31x drivers: don't write the control registers all the time This is only needed when they are changed. This is done in init() and board- or keymap-specific code is free to make further changes. * rgb_matrix: move structs from chip drivers to rgb_matrix_drivers.c This approach is specific to the rgb_matrix functionality, so keep it neatly separated from the raw chip drivers. --- common_features.mk | 24 ++++----- drivers/issi/is31fl3731.c | 1 - drivers/issi/is31fl3733.c | 3 +- keyboards/ergodox_ez/rules.mk | 2 +- quantum/rgb_matrix.c | 113 ++---------------------------------------- quantum/rgb_matrix.h | 17 +++++-- quantum/rgb_matrix_drivers.c | 82 ++++++++++++++++++++++++++++++ 7 files changed, 113 insertions(+), 129 deletions(-) create mode 100644 quantum/rgb_matrix_drivers.c (limited to 'quantum/rgb_matrix.h') diff --git a/common_features.mk b/common_features.mk index 7af7789808..6c835abde6 100644 --- a/common_features.mk +++ b/common_features.mk @@ -114,37 +114,35 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) endif endif -ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) +RGB_MATRIX_ENABLE ?= no +VALID_MATRIX_TYPES := yes IS31FL3731L IS31FL3733L custom +ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) +ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),) + $(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type) +endif OPT_DEFS += -DRGB_MATRIX_ENABLE - OPT_DEFS += -DIS31FL3731 - COMMON_VPATH += $(DRIVER_PATH)/issi - SRC += is31fl3731.c - SRC += i2c_master.c SRC += $(QUANTUM_DIR)/color.c SRC += $(QUANTUM_DIR)/rgb_matrix.c + SRC += $(QUANTUM_DIR)/rgb_matrix_drivers.c CIE1931_CURVE = yes endif +ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) + RGB_MATRIX_ENABLE = IS31FL3731 +endif + ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731) - OPT_DEFS += -DRGB_MATRIX_ENABLE OPT_DEFS += -DIS31FL3731 COMMON_VPATH += $(DRIVER_PATH)/issi SRC += is31fl3731.c SRC += i2c_master.c - SRC += $(QUANTUM_DIR)/color.c - SRC += $(QUANTUM_DIR)/rgb_matrix.c - CIE1931_CURVE = yes endif ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733) - OPT_DEFS += -DRGB_MATRIX_ENABLE OPT_DEFS += -DIS31FL3733 COMMON_VPATH += $(DRIVER_PATH)/issi SRC += is31fl3733.c SRC += i2c_master.c - SRC += $(QUANTUM_DIR)/color.c - SRC += $(QUANTUM_DIR)/rgb_matrix.c - CIE1931_CURVE = yes endif ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) diff --git a/drivers/issi/is31fl3731.c b/drivers/issi/is31fl3731.c index 4d0d6b8a5e..c9155f5a37 100644 --- a/drivers/issi/is31fl3731.c +++ b/drivers/issi/is31fl3731.c @@ -268,4 +268,3 @@ void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) } } } - diff --git a/drivers/issi/is31fl3733.c b/drivers/issi/is31fl3733.c index 4098b54689..c198ec5174 100644 --- a/drivers/issi/is31fl3733.c +++ b/drivers/issi/is31fl3733.c @@ -24,10 +24,10 @@ #include "wait.h" #endif -#include "is31fl3733.h" #include #include "i2c_master.h" #include "progmem.h" +#include "rgb_matrix.h" // This is a 7-bit address, that gets left-shifted and bit 0 // set to 0 for write, 1 for read (as per I2C protocol) @@ -250,4 +250,3 @@ void IS31FL3733_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) } } } - diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk index dfbdba10d6..ef2aefbb9a 100644 --- a/keyboards/ergodox_ez/rules.mk +++ b/keyboards/ergodox_ez/rules.mk @@ -83,6 +83,6 @@ SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard SLEEP_LED_ENABLE = no API_SYSEX_ENABLE = no RGBLIGHT_ENABLE = yes -RGB_MATRIX_ENABLE = no // enable later +RGB_MATRIX_ENABLE = no # enable later LAYOUTS = ergodox diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 5fb59af8c0..807e4d62d1 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -18,7 +18,6 @@ #include "rgb_matrix.h" -#include "i2c_master.h" #include "progmem.h" #include "config.h" #include "eeprom.h" @@ -111,29 +110,15 @@ void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i, uint8_t } void rgb_matrix_update_pwm_buffers(void) { -#ifdef IS31FL3731 - IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); - IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#elif defined(IS31FL3733) - IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); - IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#endif + rgb_matrix_driver.flush(); } void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) { -#ifdef IS31FL3731 - IS31FL3731_set_color( index, red, green, blue ); -#elif defined(IS31FL3733) - IS31FL3733_set_color( index, red, green, blue ); -#endif + rgb_matrix_driver.set_color(index, red, green, blue); } void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) { -#ifdef IS31FL3731 - IS31FL3731_set_color_all( red, green, blue ); -#elif defined(IS31FL3733) - IS31FL3733_set_color_all( red, green, blue ); -#endif + rgb_matrix_driver.set_color_all(red, green, blue); } bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) { @@ -196,47 +181,6 @@ void rgb_matrix_test(void) { } } -// This tests the LEDs -// Note that it will change the LED control registers -// in the LED drivers, and leave them in an invalid -// state for other backlight effects. -// ONLY USE THIS FOR TESTING LEDS! -void rgb_matrix_single_LED_test(void) { - static uint8_t color = 0; // 0,1,2 for R,G,B - static uint8_t row = 0; - static uint8_t column = 0; - - static uint8_t tick = 0; - tick++; - - if ( tick > 2 ) - { - tick = 0; - column++; - } - if ( column > MATRIX_COLS ) - { - column = 0; - row++; - } - if ( row > MATRIX_ROWS ) - { - row = 0; - color++; - } - if ( color > 2 ) - { - color = 0; - } - - uint8_t led[8], led_count; - map_row_column_to_led(row,column,led,&led_count); - for(uint8_t i = 0; i < led_count; i++) { - rgb_matrix_set_color_all( 40, 40, 40 ); - rgb_matrix_test_led( led[i], color==0, color==1, color==2 ); - } -} - // All LEDs off void rgb_matrix_all_off(void) { rgb_matrix_set_color_all( 0, 0, 0 ); @@ -817,7 +761,7 @@ void rgb_matrix_indicators_user(void) {} // } void rgb_matrix_init(void) { - rgb_matrix_setup_drivers(); + rgb_matrix_driver.init(); // TODO: put the 1 second startup delay here? @@ -841,33 +785,6 @@ void rgb_matrix_init(void) { eeconfig_debug_rgb_matrix(); // display current eeprom values } -void rgb_matrix_setup_drivers(void) { - // Initialize TWI - i2c_init(); -#ifdef IS31FL3731 - IS31FL3731_init( DRIVER_ADDR_1 ); - IS31FL3731_init( DRIVER_ADDR_2 ); -#elif defined (IS31FL3733) - IS31FL3733_init( DRIVER_ADDR_1 ); -#endif - - for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) { - bool enabled = true; - // This only caches it for later -#ifdef IS31FL3731 - IS31FL3731_set_led_control_register( index, enabled, enabled, enabled ); -#elif defined (IS31FL3733) - IS31FL3733_set_led_control_register( index, enabled, enabled, enabled ); -#endif - } - // This actually updates the LED drivers -#ifdef IS31FL3731 - IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#elif defined (IS31FL3733) - IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#endif -} - // Deals with the messy details of incrementing an integer uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { int16_t new_value = value; @@ -910,28 +827,6 @@ uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { // } // } -void rgb_matrix_test_led( uint8_t index, bool red, bool green, bool blue ) { - for ( int i=0; i. + */ + +#include "rgb_matrix.h" + +/* Each driver needs to define the struct + * const rgb_matrix_driver_t rgb_matrix_driver; + * All members must be provided. + * Keyboard custom drivers can define this in their own files, it should only + * be here if shared between boards. + */ + +#if defined(IS31FL3731) || defined(IS31FL3733) + +#include "i2c_master.h" + +static void init( void ) +{ + i2c_init(); +#ifdef IS31FL3731 + IS31FL3731_init( DRIVER_ADDR_1 ); + IS31FL3731_init( DRIVER_ADDR_2 ); +#else + IS31FL3733_init( DRIVER_ADDR_1 ); +#endif + for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) { + bool enabled = true; + // This only caches it for later +#ifdef IS31FL3731 + IS31FL3731_set_led_control_register( index, enabled, enabled, enabled ); +#else + IS31FL3733_set_led_control_register( index, enabled, enabled, enabled ); +#endif + } + // This actually updates the LED drivers +#ifdef IS31FL3731 + IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +#else + IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +#endif +} + +#ifdef IS31FL3731 +static void flush( void ) +{ + IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +} + +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = init, + .flush = flush, + .set_color = IS31FL3731_set_color, + .set_color_all = IS31FL3731_set_color_all, +}; +#else +static void flush( void ) +{ + IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +} + +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = init, + .flush = flush, + .set_color = IS31FL3733_set_color, + .set_color_all = IS31FL3733_set_color_all, +}; +#endif + +#endif -- cgit v1.2.3 From 9aecf4ccfdbef6123bbf0a1e6670f85f4763ee89 Mon Sep 17 00:00:00 2001 From: Florian Didron Date: Tue, 2 Oct 2018 08:41:19 +0900 Subject: Adds a method allowing to set custom colors to the rgb matrix --- quantum/rgb_matrix.c | 7 +++++++ quantum/rgb_matrix.h | 1 + 2 files changed, 8 insertions(+) (limited to 'quantum/rgb_matrix.h') diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index f0c2ddfdfb..1f00e9d99b 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -903,3 +903,10 @@ void rgblight_mode(uint8_t mode) { uint32_t rgblight_get_mode(void) { return rgb_matrix_config.mode; } + +void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { + rgb_matrix_config.hue = hue; + rgb_matrix_config.sat = sat; + rgb_matrix_config.val = val; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index 45caaac423..d2450a7d99 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -128,6 +128,7 @@ uint32_t rgb_matrix_get_tick(void); void rgblight_toggle(void); void rgblight_step(void); +void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val); void rgblight_step_reverse(void); void rgblight_increase_hue(void); void rgblight_decrease_hue(void); -- cgit v1.2.3 From 504bf11769f1340711d749e8dc818f39a56a4dfb Mon Sep 17 00:00:00 2001 From: Florian Didron Date: Mon, 19 Nov 2018 01:24:41 +0900 Subject: Allows disabling rgb effects in userspace (#4422) * Allows disabling animations in user space * Describe disabling effects in the docs * Allows disabling individual reactive modes * Adds the list ode defines --- docs/feature_rgb_matrix.md | 24 +++++++ quantum/rgb_matrix.c | 170 +++++++++++++++++++++++++++++---------------- quantum/rgb_matrix.h | 44 ++++++++++-- 3 files changed, 173 insertions(+), 65 deletions(-) (limited to 'quantum/rgb_matrix.h') diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 809d034bdc..0af1e49479 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -150,6 +150,30 @@ These are the effects that are currently available: #endif RGB_MATRIX_EFFECT_MAX }; + +You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `config.h`: + + +|Define |Description | +|---------------------------------------------------|--------------------------------------------| +|`#define DISABLE_RGB_MATRIX_ALPHAS_MODS` |Disables `RGB_MATRIX_ALPHAS_MODS` | +|`#define DISABLE_RGB_MATRIX_DUAL_BEACON` |Disables `RGB_MATRIX_DUAL_BEACON` | +|`#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN` |Disables `RGB_MATRIX_GRADIENT_UP_DOWN` | +|`#define DISABLE_RGB_MATRIX_RAINDROPS` |Disables `RGB_MATRIX_RAINDROPS` | +|`#define DISABLE_RGB_MATRIX_CYCLE_ALL` |Disables `RGB_MATRIX_CYCLE_ALL` | +|`#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT` |Disables `RGB_MATRIX_CYCLE_LEFT_RIGHT` | +|`#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN` |Disables `RGB_MATRIX_CYCLE_UP_DOWN` | +|`#define DISABLE_RGB_MATRIX_RAINBOW_BEACON` |Disables `RGB_MATRIX_RAINBOW_BEACON` | +|`#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS` |Disables `RGB_MATRIX_RAINBOW_PINWHEELS` | +|`#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON`|Disables `RGB_MATRIX_RAINBOW_MOVING_CHEVRON`| +|`#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS` |Disables `RGB_MATRIX_JELLYBEAN_RAINDROPS` | +|`#define DISABLE_RGB_MATRIX_DIGITAL_RAIN` |Disables `RGB_MATRIX_DIGITAL_RAIN` | +|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE` |Disables `RGB_MATRIX_SOLID_REACTIVE` | +|`#define DISABLE_RGB_MATRIX_SPLASH` |Disables `RGB_MATRIX_SPLASH` | +|`#define DISABLE_RGB_MATRIX_MULTISPLASH` |Disables `RGB_MATRIX_MULTISPLASH` | +|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` | +|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` | + ## Custom layer effects diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 26ee57f5c2..15bd136716 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -55,6 +55,10 @@ rgb_config_t rgb_matrix_config; #define RGB_DIGITAL_RAIN_DROPS 24 #endif +#if !defined(DISABLE_RGB_MATRIX_RAINDROPS) || !defined(DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS) || !defined(DISABLE_RGB_MATRIX_DIGITAL_RAIN) + #define TRACK_PREVIOUS_EFFECT +#endif + bool g_suspend_state = false; // Global tick at 20 Hz @@ -79,7 +83,12 @@ void eeconfig_update_rgb_matrix(uint32_t val) { void eeconfig_update_rgb_matrix_default(void) { dprintf("eeconfig_update_rgb_matrix_default\n"); rgb_matrix_config.enable = 1; +#ifndef DISABLE_RGB_MATRIX_CYCLE_ALL rgb_matrix_config.mode = RGB_MATRIX_CYCLE_LEFT_RIGHT; +#else + // fallback to solid colors if RGB_MATRIX_CYCLE_LEFT_RIGHT is disabled in userspace + rgb_matrix_config.mode = RGB_MATRIX_SOLID_COLOR; +#endif rgb_matrix_config.hue = 0; rgb_matrix_config.sat = 255; rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS; @@ -499,7 +508,7 @@ void rgb_matrix_digital_rain( const bool initialize ) { map_row_column_to_led(row, col, &led, &led_count); if (map[col][row] > pure_green_intensity) { - const uint8_t boost = (uint8_t) ((uint16_t) max_brightness_boost + const uint8_t boost = (uint8_t) ((uint16_t) max_brightness_boost * (map[col][row] - pure_green_intensity) / (max_intensity - pure_green_intensity)); rgb_matrix_set_color(led, boost, max_intensity, boost); } @@ -618,12 +627,16 @@ void rgb_matrix_custom(void) { } void rgb_matrix_task(void) { - static uint8_t toggle_enable_last = 255; + #ifdef TRACK_PREVIOUS_EFFECT + static uint8_t toggle_enable_last = 255; + #endif if (!rgb_matrix_config.enable) { - rgb_matrix_all_off(); - rgb_matrix_indicators(); - toggle_enable_last = rgb_matrix_config.enable; - return; + rgb_matrix_all_off(); + rgb_matrix_indicators(); + #ifdef TRACK_PREVIOUS_EFFECT + toggle_enable_last = rgb_matrix_config.enable; + #endif + return; } // delay 1 second before driving LEDs or doing anything else static uint8_t startup_tick = 0; @@ -658,13 +671,16 @@ void rgb_matrix_task(void) { (RGB_DISABLE_AFTER_TIMEOUT > 0 && g_any_key_hit > RGB_DISABLE_AFTER_TIMEOUT * 60 * 20)); uint8_t effect = suspend_backlight ? 0 : rgb_matrix_config.mode; - // Keep track of the effect used last time, - // detect change in effect, so each effect can - // have an optional initialization. - static uint8_t effect_last = 255; - bool initialize = (effect != effect_last) || (rgb_matrix_config.enable != toggle_enable_last); - effect_last = effect; - toggle_enable_last = rgb_matrix_config.enable; + #ifdef TRACK_PREVIOUS_EFFECT + // Keep track of the effect used last time, + // detect change in effect, so each effect can + // have an optional initialization. + + static uint8_t effect_last = 255; + bool initialize = (effect != effect_last) || (rgb_matrix_config.enable != toggle_enable_last); + effect_last = effect; + toggle_enable_last = rgb_matrix_config.enable; + #endif // this gets ticked at 20 Hz. // each effect can opt to do calculations @@ -673,59 +689,93 @@ void rgb_matrix_task(void) { case RGB_MATRIX_SOLID_COLOR: rgb_matrix_solid_color(); break; - case RGB_MATRIX_ALPHAS_MODS: - rgb_matrix_alphas_mods(); - break; - case RGB_MATRIX_DUAL_BEACON: - rgb_matrix_dual_beacon(); - break; - case RGB_MATRIX_GRADIENT_UP_DOWN: - rgb_matrix_gradient_up_down(); - break; - case RGB_MATRIX_RAINDROPS: - rgb_matrix_raindrops( initialize ); - break; - case RGB_MATRIX_CYCLE_ALL: - rgb_matrix_cycle_all(); - break; - case RGB_MATRIX_CYCLE_LEFT_RIGHT: - rgb_matrix_cycle_left_right(); - break; - case RGB_MATRIX_CYCLE_UP_DOWN: - rgb_matrix_cycle_up_down(); - break; - case RGB_MATRIX_RAINBOW_BEACON: - rgb_matrix_rainbow_beacon(); - break; - case RGB_MATRIX_RAINBOW_PINWHEELS: - rgb_matrix_rainbow_pinwheels(); - break; - case RGB_MATRIX_RAINBOW_MOVING_CHEVRON: - rgb_matrix_rainbow_moving_chevron(); - break; - case RGB_MATRIX_JELLYBEAN_RAINDROPS: - rgb_matrix_jellybean_raindrops( initialize ); - break; - case RGB_MATRIX_DIGITAL_RAIN: - rgb_matrix_digital_rain( initialize ); - break; - #ifdef RGB_MATRIX_KEYPRESSES - case RGB_MATRIX_SOLID_REACTIVE: - rgb_matrix_solid_reactive(); + #ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS + case RGB_MATRIX_ALPHAS_MODS: + rgb_matrix_alphas_mods(); break; - case RGB_MATRIX_SPLASH: - rgb_matrix_splash(); + #endif + #ifndef DISABLE_RGB_MATRIX_DUAL_BEACON + case RGB_MATRIX_DUAL_BEACON: + rgb_matrix_dual_beacon(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + case RGB_MATRIX_GRADIENT_UP_DOWN: + rgb_matrix_gradient_up_down(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_RAINDROPS + case RGB_MATRIX_RAINDROPS: + rgb_matrix_raindrops( initialize ); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_CYCLE_ALL + case RGB_MATRIX_CYCLE_ALL: + rgb_matrix_cycle_all(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + case RGB_MATRIX_CYCLE_LEFT_RIGHT: + rgb_matrix_cycle_left_right(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_CYCLE_UP_DOWN + case RGB_MATRIX_CYCLE_UP_DOWN: + rgb_matrix_cycle_up_down(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_RAINBOW_BEACON + case RGB_MATRIX_RAINBOW_BEACON: + rgb_matrix_rainbow_beacon(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + case RGB_MATRIX_RAINBOW_PINWHEELS: + rgb_matrix_rainbow_pinwheels(); break; - case RGB_MATRIX_MULTISPLASH: - rgb_matrix_multisplash(); + #endif + #ifndef DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + case RGB_MATRIX_RAINBOW_MOVING_CHEVRON: + rgb_matrix_rainbow_moving_chevron(); break; - case RGB_MATRIX_SOLID_SPLASH: - rgb_matrix_solid_splash(); + #endif + #ifndef DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + case RGB_MATRIX_JELLYBEAN_RAINDROPS: + rgb_matrix_jellybean_raindrops( initialize ); break; - case RGB_MATRIX_SOLID_MULTISPLASH: - rgb_matrix_solid_multisplash(); + #endif + #ifndef DISABLE_RGB_MATRIX_DIGITAL_RAIN + case RGB_MATRIX_DIGITAL_RAIN: + rgb_matrix_digital_rain( initialize ); break; #endif + #ifdef RGB_MATRIX_KEYPRESSES + #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE + case RGB_MATRIX_SOLID_REACTIVE: + rgb_matrix_solid_reactive(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_SPLASH + case RGB_MATRIX_SPLASH: + rgb_matrix_splash(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_MULTISPLASH + case RGB_MATRIX_MULTISPLASH: + rgb_matrix_multisplash(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH + case RGB_MATRIX_SOLID_SPLASH: + rgb_matrix_solid_splash(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + case RGB_MATRIX_SOLID_MULTISPLASH: + rgb_matrix_solid_multisplash(); + break; + #endif + #endif default: rgb_matrix_custom(); break; diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index d2450a7d99..3cd248ffc4 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -70,24 +70,58 @@ typedef union { enum rgb_matrix_effects { RGB_MATRIX_SOLID_COLOR = 1, +#ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS RGB_MATRIX_ALPHAS_MODS, +#endif +#ifndef DISABLE_RGB_MATRIX_DUAL_BEACON RGB_MATRIX_DUAL_BEACON, +#endif +#ifndef DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN RGB_MATRIX_GRADIENT_UP_DOWN, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINDROPS RGB_MATRIX_RAINDROPS, +#endif +#ifndef DISABLE_RGB_MATRIX_CYCLE_ALL RGB_MATRIX_CYCLE_ALL, +#endif +#ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT RGB_MATRIX_CYCLE_LEFT_RIGHT, +#endif +#ifndef DISABLE_RGB_MATRIX_CYCLE_UP_DOWN RGB_MATRIX_CYCLE_UP_DOWN, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINBOW_BEACON RGB_MATRIX_RAINBOW_BEACON, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS RGB_MATRIX_RAINBOW_PINWHEELS, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON RGB_MATRIX_RAINBOW_MOVING_CHEVRON, +#endif +#ifndef DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS RGB_MATRIX_JELLYBEAN_RAINDROPS, +#endif +#ifndef DISABLE_RGB_MATRIX_DIGITAL_RAIN RGB_MATRIX_DIGITAL_RAIN, +#endif #ifdef RGB_MATRIX_KEYPRESSES - RGB_MATRIX_SOLID_REACTIVE, - RGB_MATRIX_SPLASH, - RGB_MATRIX_MULTISPLASH, - RGB_MATRIX_SOLID_SPLASH, - RGB_MATRIX_SOLID_MULTISPLASH, + #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE + RGB_MATRIX_SOLID_REACTIVE, + #endif + #ifndef DISABLE_RGB_MATRIX_SPLASH + RGB_MATRIX_SPLASH, + #endif + #ifndef DISABLE_RGB_MATRIX_MULTISPLASH + RGB_MATRIX_MULTISPLASH, + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH + RGB_MATRIX_SOLID_SPLASH, + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + RGB_MATRIX_SOLID_MULTISPLASH, + #endif #endif RGB_MATRIX_EFFECT_MAX }; -- cgit v1.2.3 From da1afe152af5a6dfb5c0bb28d86d34940162f960 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 3 Dec 2018 10:27:15 -0800 Subject: Fix up RGB Matrix code (#4503) * Fix up RGB Matrix code * Convert RGBLIGHT functions to rgbmatrix ones, and add defines --- quantum/rgb_matrix.c | 60 ++++++++++++++++++++++++++++++++++++++-------------- quantum/rgb_matrix.h | 59 +++++++++++++++++++++++++++++++++++++++------------ quantum/rgblight.c | 4 ++-- 3 files changed, 91 insertions(+), 32 deletions(-) (limited to 'quantum/rgb_matrix.h') diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 15bd136716..82d36177b5 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -842,13 +842,13 @@ void rgb_matrix_init(void) { } // Deals with the messy details of incrementing an integer -uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { +static uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { int16_t new_value = value; new_value += step; return MIN( MAX( new_value, min ), max ); } -uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { +static uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { int16_t new_value = value; new_value -= step; return MIN( MAX( new_value, min ), max ); @@ -887,77 +887,105 @@ uint32_t rgb_matrix_get_tick(void) { return g_tick; } -void rgblight_toggle(void) { +void rgb_matrix_toggle(void) { rgb_matrix_config.enable ^= 1; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_step(void) { +void rgb_matrix_enable(void) { + rgb_matrix_config.enable = 1; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgb_matrix_enable_noeeprom(void) { + rgb_matrix_config.enable = 1; +} + +void rgb_matrix_disable(void) { + rgb_matrix_config.enable = 0; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgb_matrix_disable_noeeprom(void) { + rgb_matrix_config.enable = 0; +} + +void rgb_matrix_step(void) { rgb_matrix_config.mode++; if (rgb_matrix_config.mode >= RGB_MATRIX_EFFECT_MAX) rgb_matrix_config.mode = 1; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_step_reverse(void) { +void rgb_matrix_step_reverse(void) { rgb_matrix_config.mode--; if (rgb_matrix_config.mode < 1) rgb_matrix_config.mode = RGB_MATRIX_EFFECT_MAX - 1; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_increase_hue(void) { +void rgb_matrix_increase_hue(void) { rgb_matrix_config.hue = increment( rgb_matrix_config.hue, 8, 0, 255 ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_decrease_hue(void) { +void rgb_matrix_decrease_hue(void) { rgb_matrix_config.hue = decrement( rgb_matrix_config.hue, 8, 0, 255 ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_increase_sat(void) { +void rgb_matrix_increase_sat(void) { rgb_matrix_config.sat = increment( rgb_matrix_config.sat, 8, 0, 255 ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_decrease_sat(void) { +void rgb_matrix_decrease_sat(void) { rgb_matrix_config.sat = decrement( rgb_matrix_config.sat, 8, 0, 255 ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_increase_val(void) { +void rgb_matrix_increase_val(void) { rgb_matrix_config.val = increment( rgb_matrix_config.val, 8, 0, RGB_MATRIX_MAXIMUM_BRIGHTNESS ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_decrease_val(void) { +void rgb_matrix_decrease_val(void) { rgb_matrix_config.val = decrement( rgb_matrix_config.val, 8, 0, RGB_MATRIX_MAXIMUM_BRIGHTNESS ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -void rgblight_increase_speed(void) { +void rgb_matrix_increase_speed(void) { rgb_matrix_config.speed = increment( rgb_matrix_config.speed, 1, 0, 3 ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw);//EECONFIG needs to be increased to support this } -void rgblight_decrease_speed(void) { +void rgb_matrix_decrease_speed(void) { rgb_matrix_config.speed = decrement( rgb_matrix_config.speed, 1, 0, 3 ); eeconfig_update_rgb_matrix(rgb_matrix_config.raw);//EECONFIG needs to be increased to support this } -void rgblight_mode(uint8_t mode) { +void rgb_matrix_mode(uint8_t mode) { rgb_matrix_config.mode = mode; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } -uint32_t rgblight_get_mode(void) { +void rgb_matrix_mode_noeeprom(uint8_t mode) { + rgb_matrix_config.mode = mode; +} + +uint32_t rgb_matrix_get_mode(void) { return rgb_matrix_config.mode; } -void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { +void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { rgb_matrix_config.hue = hue; rgb_matrix_config.sat = sat; rgb_matrix_config.val = val; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } + +void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) { + rgb_matrix_config.hue = hue; + rgb_matrix_config.sat = sat; + rgb_matrix_config.val = val; +} diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index 3cd248ffc4..0cfeb4e069 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -127,6 +127,7 @@ enum rgb_matrix_effects { }; void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); +void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); // This runs after another backlight effect and replaces // colors already set @@ -160,20 +161,50 @@ void rgb_matrix_decrease(void); uint32_t rgb_matrix_get_tick(void); -void rgblight_toggle(void); -void rgblight_step(void); -void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val); -void rgblight_step_reverse(void); -void rgblight_increase_hue(void); -void rgblight_decrease_hue(void); -void rgblight_increase_sat(void); -void rgblight_decrease_sat(void); -void rgblight_increase_val(void); -void rgblight_decrease_val(void); -void rgblight_increase_speed(void); -void rgblight_decrease_speed(void); -void rgblight_mode(uint8_t mode); -uint32_t rgblight_get_mode(void); +void rgb_matrix_toggle(void); +void rgb_matrix_enable(void); +void rgb_matrix_enable_noeeprom(void); +void rgb_matrix_disable(void); +void rgb_matrix_disable_noeeprom(void); +void rgb_matrix_step(void); +void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val); +void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val); +void rgb_matrix_step_reverse(void); +void rgb_matrix_increase_hue(void); +void rgb_matrix_decrease_hue(void); +void rgb_matrix_increase_sat(void); +void rgb_matrix_decrease_sat(void); +void rgb_matrix_increase_val(void); +void rgb_matrix_decrease_val(void); +void rgb_matrix_increase_speed(void); +void rgb_matrix_decrease_speed(void); +void rgb_matrix_mode(uint8_t mode); +void rgb_matrix_mode_noeeprom(uint8_t mode); +uint32_t rgb_matrix_get_mode(void); + +#ifndef RGBLIGHT_ENABLE +#define rgblight_toggle() rgb_matrix_toggle() +#define rgblight_enable() rgb_matrix_enable() +#define rgblight_enable_noeeprom() rgb_matrix_enable_noeeprom() +#define rgblight_disable() rgb_matrix_disable() +#define rgblight_disable_noeeprom() rgb_matrix_disable_noeeprom() +#define rgblight_step() rgb_matrix_step() +#define rgblight_sethsv(hue, sat, val) rgb_matrix_sethsv(hue, sat, val) +#define rgblight_sethsv_noeeprom(hue, sat, val) rgb_matrix_sethsv_noeeprom(hue, sat, val) +#define rgblight_step_reverse() rgb_matrix_step_reverse() +#define rgblight_increase_hue() rgb_matrix_increase_hue() +#define rgblight_decrease_hue() rgb_matrix_decrease_hue() +#define rgblight_increase_sat() rgb_matrix_increase_sat() +#define rgblight_decrease_sat() rgb_matrix_decrease_sat() +#define rgblight_increase_val() rgb_matrix_increase_val() +#define rgblight_decrease_val() rgb_matrix_decrease_val() +#define rgblight_increase_speed() rgb_matrix_increase_speed() +#define rgblight_decrease_speed() rgb_matrix_decrease_speed() +#define rgblight_mode(mode) rgb_matrix_mode(mode) +#define rgblight_mode_noeeprom(mode) rgb_matrix_mode_noeeprom(mode) +#define rgblight_get_mode() rgb_matrix_get_mode() + +#endif typedef struct { /* Perform any initialisation required for the other driver functions to work. */ diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 9ce3b23092..a2d6fe7a07 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -325,13 +325,13 @@ void rgblight_disable_noeeprom(void) { // Deals with the messy details of incrementing an integer -uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { +static uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { int16_t new_value = value; new_value += step; return MIN( MAX( new_value, min ), max ); } -uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { +static uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { int16_t new_value = value; new_value -= step; return MIN( MAX( new_value, min ), max ); -- cgit v1.2.3 From b7688590b8a252f7497e3f78d569b98ae62ab177 Mon Sep 17 00:00:00 2001 From: David Dai Date: Mon, 31 Dec 2018 08:42:58 -0800 Subject: Change rgblight_get_mode & rgb_matrix_get_mode's return type to uint8_t. (#4747) * Change rgblight_get_mode's return type to uint8_t. Since rgblight_get_mode() is just returning rgblight_config_t.mode, it should match rgblight_config_t.mode's type: uint8_t. * Update rgb_matrix_get_mode to return uint8_t. --- keyboards/mxss/rgblight.c | 2 +- quantum/rgb_matrix.c | 2 +- quantum/rgb_matrix.h | 2 +- quantum/rgblight.c | 2 +- quantum/rgblight.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'quantum/rgb_matrix.h') diff --git a/keyboards/mxss/rgblight.c b/keyboards/mxss/rgblight.c index da7959c6a8..73f94f3ab0 100644 --- a/keyboards/mxss/rgblight.c +++ b/keyboards/mxss/rgblight.c @@ -234,7 +234,7 @@ void rgblight_step_reverse(void) { rgblight_mode(mode); } -uint32_t rgblight_get_mode(void) { +uint8_t rgblight_get_mode(void) { if (!rgblight_config.enable) { return false; } diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 82d36177b5..2ed36304dc 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -973,7 +973,7 @@ void rgb_matrix_mode_noeeprom(uint8_t mode) { rgb_matrix_config.mode = mode; } -uint32_t rgb_matrix_get_mode(void) { +uint8_t rgb_matrix_get_mode(void) { return rgb_matrix_config.mode; } diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index 0cfeb4e069..e43532d11e 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -180,7 +180,7 @@ void rgb_matrix_increase_speed(void); void rgb_matrix_decrease_speed(void); void rgb_matrix_mode(uint8_t mode); void rgb_matrix_mode_noeeprom(uint8_t mode); -uint32_t rgb_matrix_get_mode(void); +uint8_t rgb_matrix_get_mode(void); #ifndef RGBLIGHT_ENABLE #define rgblight_toggle() rgb_matrix_toggle() diff --git a/quantum/rgblight.c b/quantum/rgblight.c index ae5dca1884..23420ddd87 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -234,7 +234,7 @@ void rgblight_step_reverse(void) { rgblight_step_reverse_helper(true); } -uint32_t rgblight_get_mode(void) { +uint8_t rgblight_get_mode(void) { if (!rgblight_config.enable) { return false; } diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 99ede43c5b..65dda3f521 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -167,7 +167,7 @@ void rgblight_enable(void); void rgblight_disable(void); void rgblight_step(void); void rgblight_step_reverse(void); -uint32_t rgblight_get_mode(void); +uint8_t rgblight_get_mode(void); void rgblight_mode(uint8_t mode); void rgblight_set(void); void rgblight_update_dword(uint32_t dword); -- cgit v1.2.3