qmk

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/qmk.git
Log | Files | Refs | Submodules | LICENSE

commit c89565cc3dda82642a0c6c839176602f05fc56f1
parent 03516d546009af0ca4d46989214c8153c70b0712
Author: yiancar <yiangosyiangou@cytanet.com.cy>
Date:   Thu, 10 May 2018 05:31:24 +0100

General RGB matrix fixes (#2931)

* Added Modular keyboards L,R and NUM

Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split

* Remove modular from master

This is to fix incorrect branching

* General fixes for RGB_matrix

- Complited speed support for all effects
- Fixed raindrop effects to initialized after toggle
- Fixed raindrop effects to use all available LEDs
- Fixed effect step reverse function
- Moved RGB_MATRIX_SOLID_REACTIVE under correct flag

* Documentation update for RGBmatrix

* More doc updates

Diffstat:
docs/feature_rgb_matrix.md | 4++--
quantum/rgb_matrix.c | 29++++++++++++++++-------------
quantum/rgb_matrix.h | 2+-
3 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md @@ -81,7 +81,6 @@ These are the effects that are currently available: enum rgb_matrix_effects { RGB_MATRIX_SOLID_COLOR = 1, - RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_ALPHAS_MODS, RGB_MATRIX_DUAL_BEACON, RGB_MATRIX_GRADIENT_UP_DOWN, @@ -94,6 +93,7 @@ These are the effects that are currently available: RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, #ifdef RGB_MATRIX_KEYPRESSES + RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, RGB_MATRIX_MULTISPLASH, RGB_MATRIX_SOLID_SPLASH, @@ -118,7 +118,7 @@ A similar function works in the keymap as `rgb_matrix_indicators_user`. #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended - #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) + #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1 ## EEPROM storage diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c @@ -324,8 +324,8 @@ void rgb_matrix_raindrops(bool initialize) { HSV hsv; RGB rgb; - // Change one LED every tick - uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % DRIVER_LED_TOTAL : 255; + // Change one LED every tick, make sure speed is not 0 + uint8_t led_to_change = ( g_tick & ( 0x0A / (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed) ) ) == 0 ? rand() % (DRIVER_LED_TOTAL) : 255; for ( int i=0; i<DRIVER_LED_TOTAL; i++ ) { @@ -432,7 +432,7 @@ void rgb_matrix_rainbow_beacon(void) { rgb_led led; for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { led = g_rgb_leds[i]; - hsv.h = 1.5 * (led.point.y - 32.0)* cos(g_tick * PI / 128) + 1.5 * (led.point.x - 112.0) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; + hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.y - 32.0)* cos(g_tick * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - 112.0) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -444,7 +444,7 @@ void rgb_matrix_rainbow_pinwheels(void) { rgb_led led; for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { led = g_rgb_leds[i]; - hsv.h = 2 * (led.point.y - 32.0)* cos(g_tick * PI / 128) + 2 * (66 - abs(led.point.x - 112.0)) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; + hsv.h = (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.y - 32.0)* cos(g_tick * PI / 128) + (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (66 - abs(led.point.x - 112.0)) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -458,7 +458,7 @@ void rgb_matrix_rainbow_moving_chevron(void) { led = g_rgb_leds[i]; // uint8_t r = g_tick; uint8_t r = 32; - hsv.h = 1.5 * abs(led.point.y - 32.0)* sin(r * PI / 128) + 1.5 * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + rgb_matrix_config.hue; + hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * abs(led.point.y - 32.0)* sin(r * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -469,8 +469,8 @@ void rgb_matrix_jellybean_raindrops( bool initialize ) { HSV hsv; RGB rgb; - // Change one LED every tick - uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % DRIVER_LED_TOTAL : 255; + // Change one LED every tick, make sure speed is not 0 + uint8_t led_to_change = ( g_tick & ( 0x0A / (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed) ) ) == 0 ? rand() % (DRIVER_LED_TOTAL) : 255; for ( int i=0; i<DRIVER_LED_TOTAL; i++ ) { @@ -577,8 +577,10 @@ void rgb_matrix_custom(void) { } void rgb_matrix_task(void) { + static uint8_t toggle_enable_last = 255; if (!rgb_matrix_config.enable) { rgb_matrix_all_off(); + toggle_enable_last = rgb_matrix_config.enable; return; } // delay 1 second before driving LEDs or doing anything else @@ -618,8 +620,9 @@ void rgb_matrix_task(void) { // detect change in effect, so each effect can // have an optional initialization. static uint8_t effect_last = 255; - bool initialize = effect != effect_last; + bool initialize = (effect != effect_last) || (rgb_matrix_config.enable != toggle_enable_last); effect_last = effect; + toggle_enable_last = rgb_matrix_config.enable; // this gets ticked at 20 Hz. // each effect can opt to do calculations @@ -628,9 +631,6 @@ void rgb_matrix_task(void) { case RGB_MATRIX_SOLID_COLOR: rgb_matrix_solid_color(); break; - case RGB_MATRIX_SOLID_REACTIVE: - rgb_matrix_solid_reactive(); - break; case RGB_MATRIX_ALPHAS_MODS: rgb_matrix_alphas_mods(); break; @@ -665,6 +665,9 @@ void rgb_matrix_task(void) { rgb_matrix_jellybean_raindrops( initialize ); break; #ifdef RGB_MATRIX_KEYPRESSES + case RGB_MATRIX_SOLID_REACTIVE: + rgb_matrix_solid_reactive(); + break; case RGB_MATRIX_SPLASH: rgb_matrix_splash(); break; @@ -830,8 +833,8 @@ void rgblight_step(void) { void rgblight_step_reverse(void) { rgb_matrix_config.mode--; - if (rgb_matrix_config.mode <= 1) - rgb_matrix_config.mode = (RGB_MATRIX_EFFECT_MAX - 1); + if (rgb_matrix_config.mode < 1) + rgb_matrix_config.mode = RGB_MATRIX_EFFECT_MAX - 1; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h @@ -64,7 +64,6 @@ typedef union { enum rgb_matrix_effects { RGB_MATRIX_SOLID_COLOR = 1, - RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_ALPHAS_MODS, RGB_MATRIX_DUAL_BEACON, RGB_MATRIX_GRADIENT_UP_DOWN, @@ -77,6 +76,7 @@ enum rgb_matrix_effects { RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, #ifdef RGB_MATRIX_KEYPRESSES + RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, RGB_MATRIX_MULTISPLASH, RGB_MATRIX_SOLID_SPLASH,