forked from mirrors/qmk_firmware
Allow for modification of output RGB values when using rgblight/rgb_matrix. (#10638)
This commit is contained in:
parent
daea43debf
commit
de4cbe34ff
16 changed files with 20 additions and 16 deletions
|
@ -31,6 +31,8 @@ const point_t k_rgb_matrix_center = {112, 32};
|
||||||
const point_t k_rgb_matrix_center = RGB_MATRIX_CENTER;
|
const point_t k_rgb_matrix_center = RGB_MATRIX_CENTER;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
__attribute__((weak)) RGB rgb_matrix_hsv_to_rgb(HSV hsv) { return hsv_to_rgb(hsv); }
|
||||||
|
|
||||||
// Generic effect runners
|
// Generic effect runners
|
||||||
#include "rgb_matrix_runners/effect_runner_dx_dy_dist.h"
|
#include "rgb_matrix_runners/effect_runner_dx_dy_dist.h"
|
||||||
#include "rgb_matrix_runners/effect_runner_dx_dy.h"
|
#include "rgb_matrix_runners/effect_runner_dx_dy.h"
|
||||||
|
|
|
@ -7,9 +7,9 @@ bool ALPHAS_MODS(effect_params_t* params) {
|
||||||
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
||||||
|
|
||||||
HSV hsv = rgb_matrix_config.hsv;
|
HSV hsv = rgb_matrix_config.hsv;
|
||||||
RGB rgb1 = hsv_to_rgb(hsv);
|
RGB rgb1 = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
hsv.h += rgb_matrix_config.speed;
|
hsv.h += rgb_matrix_config.speed;
|
||||||
RGB rgb2 = hsv_to_rgb(hsv);
|
RGB rgb2 = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
|
|
||||||
for (uint8_t i = led_min; i < led_max; i++) {
|
for (uint8_t i = led_min; i < led_max; i++) {
|
||||||
RGB_MATRIX_TEST_LED_FLAGS();
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
|
|
|
@ -8,7 +8,7 @@ bool BREATHING(effect_params_t* params) {
|
||||||
HSV hsv = rgb_matrix_config.hsv;
|
HSV hsv = rgb_matrix_config.hsv;
|
||||||
uint16_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 8);
|
uint16_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 8);
|
||||||
hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
|
hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
for (uint8_t i = led_min; i < led_max; i++) {
|
for (uint8_t i = led_min; i < led_max; i++) {
|
||||||
RGB_MATRIX_TEST_LED_FLAGS();
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
|
|
|
@ -12,7 +12,7 @@ bool GRADIENT_LEFT_RIGHT(effect_params_t* params) {
|
||||||
// The x range will be 0..224, map this to 0..7
|
// The x range will be 0..224, map this to 0..7
|
||||||
// Relies on hue being 8-bit and wrapping
|
// Relies on hue being 8-bit and wrapping
|
||||||
hsv.h = rgb_matrix_config.hsv.h + (scale * g_led_config.point[i].x >> 5);
|
hsv.h = rgb_matrix_config.hsv.h + (scale * g_led_config.point[i].x >> 5);
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -12,7 +12,7 @@ bool GRADIENT_UP_DOWN(effect_params_t* params) {
|
||||||
// The y range will be 0..64, map this to 0..4
|
// The y range will be 0..64, map this to 0..4
|
||||||
// Relies on hue being 8-bit and wrapping
|
// Relies on hue being 8-bit and wrapping
|
||||||
hsv.h = rgb_matrix_config.hsv.h + scale * (g_led_config.point[i].y >> 4);
|
hsv.h = rgb_matrix_config.hsv.h + scale * (g_led_config.point[i].y >> 4);
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -5,7 +5,7 @@ RGB_MATRIX_EFFECT(JELLYBEAN_RAINDROPS)
|
||||||
static void jellybean_raindrops_set_color(int i, effect_params_t* params) {
|
static void jellybean_raindrops_set_color(int i, effect_params_t* params) {
|
||||||
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
|
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
|
||||||
HSV hsv = {rand() & 0xFF, rand() & 0xFF, rgb_matrix_config.hsv.v};
|
HSV hsv = {rand() & 0xFF, rand() & 0xFF, rgb_matrix_config.hsv.v};
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ static void raindrops_set_color(int i, effect_params_t* params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
hsv.h = rgb_matrix_config.hsv.h + (deltaH * (rand() & 0x03));
|
hsv.h = rgb_matrix_config.hsv.h + (deltaH * (rand() & 0x03));
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ RGB_MATRIX_EFFECT(SOLID_COLOR)
|
||||||
bool SOLID_COLOR(effect_params_t* params) {
|
bool SOLID_COLOR(effect_params_t* params) {
|
||||||
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
||||||
|
|
||||||
RGB rgb = hsv_to_rgb(rgb_matrix_config.hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv);
|
||||||
for (uint8_t i = led_min; i < led_max; i++) {
|
for (uint8_t i = led_min; i < led_max; i++) {
|
||||||
RGB_MATRIX_TEST_LED_FLAGS();
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
|
|
|
@ -51,7 +51,7 @@ bool TYPING_HEATMAP(effect_params_t* params) {
|
||||||
if (!HAS_ANY_FLAGS(g_led_config.flags[led[j]], params->flags)) continue;
|
if (!HAS_ANY_FLAGS(g_led_config.flags[led[j]], params->flags)) continue;
|
||||||
|
|
||||||
HSV hsv = {170 - qsub8(val, 85), rgb_matrix_config.hsv.s, scale8((qadd8(170, val) - 170) * 3, rgb_matrix_config.hsv.v)};
|
HSV hsv = {170 - qsub8(val, 85), rgb_matrix_config.hsv.s, scale8((qadd8(170, val) - 170) * 3, rgb_matrix_config.hsv.v)};
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
rgb_matrix_set_color(led[j], rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(led[j], rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) {
|
||||||
RGB_MATRIX_TEST_LED_FLAGS();
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
|
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
|
||||||
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
|
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
|
||||||
RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time));
|
RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time));
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -11,7 +11,7 @@ bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func)
|
||||||
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
|
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
|
||||||
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
|
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
|
||||||
uint8_t dist = sqrt16(dx * dx + dy * dy);
|
uint8_t dist = sqrt16(dx * dx + dy * dy);
|
||||||
RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time));
|
RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time));
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -8,7 +8,7 @@ bool effect_runner_i(effect_params_t* params, i_f effect_func) {
|
||||||
uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 4);
|
uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 4);
|
||||||
for (uint8_t i = led_min; i < led_max; i++) {
|
for (uint8_t i = led_min; i < led_max; i++) {
|
||||||
RGB_MATRIX_TEST_LED_FLAGS();
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time));
|
RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time));
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -20,7 +20,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t offset = scale16by8(tick, rgb_matrix_config.speed);
|
uint16_t offset = scale16by8(tick, rgb_matrix_config.speed);
|
||||||
RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset));
|
RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset));
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -20,7 +20,7 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react
|
||||||
hsv = effect_func(hsv, dx, dy, dist, tick);
|
hsv = effect_func(hsv, dx, dy, dist, tick);
|
||||||
}
|
}
|
||||||
hsv.v = scale8(hsv.v, rgb_matrix_config.hsv.v);
|
hsv.v = scale8(hsv.v, rgb_matrix_config.hsv.v);
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -10,7 +10,7 @@ bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) {
|
||||||
int8_t sin_value = sin8(time) - 128;
|
int8_t sin_value = sin8(time) - 128;
|
||||||
for (uint8_t i = led_min; i < led_max; i++) {
|
for (uint8_t i = led_min; i < led_max; i++) {
|
||||||
RGB_MATRIX_TEST_LED_FLAGS();
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time));
|
RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time));
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
}
|
}
|
||||||
return led_max < DRIVER_LED_TOTAL;
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
|
|
@ -123,9 +123,11 @@ void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
|
||||||
rgblight_ranges.effect_num_leds = num_leds;
|
rgblight_ranges.effect_num_leds = num_leds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) RGB rgblight_hsv_to_rgb(HSV hsv) { return hsv_to_rgb(hsv); }
|
||||||
|
|
||||||
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
||||||
HSV hsv = {hue, sat, val};
|
HSV hsv = {hue, sat, val};
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = rgblight_hsv_to_rgb(hsv);
|
||||||
setrgb(rgb.r, rgb.g, rgb.b, led1);
|
setrgb(rgb.r, rgb.g, rgb.b, led1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue