summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/feature_rgb_matrix.md2
-rw-r--r--quantum/quantum.c10
-rw-r--r--quantum/quantum_keycodes.h2
-rw-r--r--quantum/rgb.h6
-rw-r--r--quantum/rgb_matrix.c18
-rw-r--r--quantum/rgb_matrix.h3
-rw-r--r--quantum/rgblight.c26
-rw-r--r--quantum/rgblight.h6
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);