diff options
-rw-r--r-- | docs/feature_rgb_matrix.md | 2 | ||||
-rw-r--r-- | quantum/quantum.c | 10 | ||||
-rw-r--r-- | quantum/quantum_keycodes.h | 2 | ||||
-rw-r--r-- | quantum/rgb.h | 6 | ||||
-rw-r--r-- | quantum/rgb_matrix.c | 18 | ||||
-rw-r--r-- | quantum/rgb_matrix.h | 3 | ||||
-rw-r--r-- | quantum/rgblight.c | 26 | ||||
-rw-r--r-- | quantum/rgblight.h | 6 |
8 files changed, 70 insertions, 3 deletions
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index dfc103247a..084e87ec48 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -69,6 +69,8 @@ All RGB keycodes are currently shared with the RGBLIGHT system: * `RGB_SAD` - decrease saturation * `RGB_VAI` - increase value * `RGB_VAD` - decrease value + * `RGB_SPI` - increase speed effect (no EEPROM support) + * `RGB_SPD` - decrease speed effect (no EEPROM support) * `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system diff --git a/quantum/quantum.c b/quantum/quantum.c index e1bc8b242e..f9b3e2197d 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -368,6 +368,16 @@ bool process_record_quantum(keyrecord_t *record) { rgblight_decrease_val(); } return false; + case RGB_SPI: + if (record->event.pressed) { + rgblight_increase_speed(); + } + return false; + case RGB_SPD: + if (record->event.pressed) { + rgblight_decrease_speed(); + } + return false; case RGB_MODE_PLAIN: if (record->event.pressed) { rgblight_mode(1); diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index d6030284a9..405741eb15 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -413,6 +413,8 @@ enum quantum_keycodes { RGB_SAD, RGB_VAI, RGB_VAD, + RGB_SPI, + RGB_SPD, RGB_MODE_PLAIN, RGB_MODE_BREATHE, RGB_MODE_RAINBOW, diff --git a/quantum/rgb.h b/quantum/rgb.h index fbdda293f4..ce674ce6bc 100644 --- a/quantum/rgb.h +++ b/quantum/rgb.h @@ -44,4 +44,10 @@ void rgblight_increase_val(void) {}; __attribute__((weak)) void rgblight_decrease_val(void) {}; +__attribute__((weak)) +void rgblight_increase_speed(void) {}; + +__attribute__((weak)) +void rgblight_decrease_speed(void) {}; + #endif
\ No newline at end of file diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 6cb0478f71..558e28dece 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -69,6 +69,7 @@ void eeconfig_update_rgb_matrix_default(void) { rgb_matrix_config.hue = 0; rgb_matrix_config.sat = 255; rgb_matrix_config.val = 255; + rgb_matrix_config.speed = 0; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } void eeconfig_debug_rgb_matrix(void) { @@ -78,6 +79,7 @@ void eeconfig_debug_rgb_matrix(void) { dprintf("rgb_matrix_config.hue = %d\n", rgb_matrix_config.hue); dprintf("rgb_matrix_config.sat = %d\n", rgb_matrix_config.sat); dprintf("rgb_matrix_config.val = %d\n", rgb_matrix_config.val); + dprintf("rgb_matrix_config.speed = %d\n", rgb_matrix_config.speed); } // Last led hit @@ -343,7 +345,7 @@ void rgb_matrix_raindrops(bool initialize) { } void rgb_matrix_cycle_all(void) { - uint8_t offset = g_tick & 0xFF; + uint8_t offset = ( g_tick << rgb_matrix_config.speed ) & 0xFF; rgb_led led; @@ -364,7 +366,7 @@ void rgb_matrix_cycle_all(void) { } void rgb_matrix_cycle_left_right(void) { - uint8_t offset = g_tick & 0xFF; + uint8_t offset = ( g_tick << rgb_matrix_config.speed ) & 0xFF; HSV hsv = { .h = 0, .s = 255, .v = rgb_matrix_config.val }; RGB rgb; Point point; @@ -388,7 +390,7 @@ void rgb_matrix_cycle_left_right(void) { } void rgb_matrix_cycle_up_down(void) { - uint8_t offset = g_tick & 0xFF; + uint8_t offset = ( g_tick << rgb_matrix_config.speed ) & 0xFF; HSV hsv = { .h = 0, .s = 255, .v = rgb_matrix_config.val }; RGB rgb; Point point; @@ -863,6 +865,16 @@ void rgblight_decrease_val(void) { eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } +void rgblight_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) { + 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) { rgb_matrix_config.mode = mode; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index ef93c6d5cb..1552d59103 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -58,6 +58,7 @@ typedef union { uint16_t hue :9; uint8_t sat :8; uint8_t val :8; + uint8_t speed :8;//EECONFIG needs to be increased to support this }; } rgb_config_t; @@ -129,6 +130,8 @@ 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); diff --git a/quantum/rgblight.c b/quantum/rgblight.c index ae18344081..75512e97a7 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -27,6 +27,9 @@ #define RGBLIGHT_LIMIT_VAL 255 #endif +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + __attribute__ ((weak)) const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; __attribute__ ((weak)) @@ -122,6 +125,7 @@ void eeconfig_update_rgblight_default(void) { rgblight_config.hue = 0; rgblight_config.sat = 255; rgblight_config.val = RGBLIGHT_LIMIT_VAL; + rgblight_config.speed = 0; eeconfig_update_rgblight(rgblight_config.raw); } void eeconfig_debug_rgblight(void) { @@ -131,6 +135,7 @@ void eeconfig_debug_rgblight(void) { dprintf("rgblight_config.hue = %d\n", rgblight_config.hue); dprintf("rgblight_config.sat = %d\n", rgblight_config.sat); dprintf("rgblight_config.val = %d\n", rgblight_config.val); + dprintf("rgblight_config.speed = %d\n", rgblight_config.speed); } void rgblight_init(void) { @@ -280,6 +285,18 @@ void rgblight_disable(void) { rgblight_set(); } +// 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; + 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 ) { + int16_t new_value = value; + new_value -= step; + return MIN( MAX( new_value, min ), max ); +} void rgblight_increase_hue(void) { uint16_t hue; @@ -331,6 +348,15 @@ void rgblight_decrease_val(void) { } rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); } +void rgblight_increase_speed(void) { + rgblight_config.speed = increment( rgblight_config.speed, 1, 0, 3 ); + eeconfig_update_rgblight(rgblight_config.raw);//EECONFIG needs to be increased to support this +} + +void rgblight_decrease_speed(void) { + rgblight_config.speed = decrement( rgblight_config.speed, 1, 0, 3 ); + eeconfig_update_rgblight(rgblight_config.raw);//EECONFIG needs to be increased to support this +} void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) { inmem_config.raw = rgblight_config.raw; diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 8c33f1a8fc..a6593af98b 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -92,6 +92,7 @@ typedef union { uint16_t hue :9; uint8_t sat :8; uint8_t val :8; + uint8_t speed :8;//EECONFIG needs to be increased to support this }; } rgblight_config_t; @@ -113,6 +114,8 @@ 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_sethsv(uint16_t hue, uint8_t sat, uint8_t val); uint16_t rgblight_get_hue(void); uint8_t rgblight_get_sat(void); @@ -126,6 +129,9 @@ void eeconfig_update_rgblight(uint32_t val); void eeconfig_update_rgblight_default(void); void eeconfig_debug_rgblight(void); +void rgb_matrix_increase(void); +void rgb_matrix_decrease(void); + void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1); void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val); |