@ -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 ;