Convert clipping variables in rgblight.c to a structure (#7720)
This commit is contained in:
parent
5f5c2a219c
commit
86c4c4e91d
4 changed files with 56 additions and 65 deletions
|
@ -22,31 +22,11 @@
|
||||||
*/
|
*/
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
|
||||||
# include "ws2812.c"
|
|
||||||
# include "ergodox_ez.h"
|
# include "ergodox_ez.h"
|
||||||
|
|
||||||
extern rgblight_config_t rgblight_config;
|
extern rgblight_config_t rgblight_config;
|
||||||
|
|
||||||
void rgblight_set(void) {
|
void rgblight_call_driver(LED_TYPE *led, uint8_t led_num) {
|
||||||
if (!rgblight_config.enable) {
|
|
||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
|
||||||
led[i].r = 0;
|
|
||||||
led[i].g = 0;
|
|
||||||
led[i].b = 0;
|
|
||||||
#ifdef RGBW
|
|
||||||
led[i].w = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef RGBW
|
|
||||||
else {
|
|
||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
|
||||||
convert_rgb_to_rgbw(&led[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t led_num = RGBLED_NUM;
|
|
||||||
i2c_init();
|
i2c_init();
|
||||||
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
|
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -54,8 +34,8 @@ void rgblight_set(void) {
|
||||||
// prevent right-half code from trying to bitbang all 30
|
// prevent right-half code from trying to bitbang all 30
|
||||||
// so with 30 LEDs, we count from 29 to 15 here, and the
|
// so with 30 LEDs, we count from 29 to 15 here, and the
|
||||||
// other half does 0 to 14.
|
// other half does 0 to 14.
|
||||||
led_num = RGBLED_NUM / 2;
|
uint8_t half_led_num = RGBLED_NUM / 2;
|
||||||
for (i = led_num + led_num - 1; i >= led_num; --i)
|
for (i = half_led_num + half_led_num - 1; i >= half_led_num; --i)
|
||||||
# elif defined(ERGODOX_LED_15_MIRROR)
|
# elif defined(ERGODOX_LED_15_MIRROR)
|
||||||
for (i = 0; i < led_num; ++i)
|
for (i = 0; i < led_num; ++i)
|
||||||
# else // ERGDOX_LED_15 non-mirrored
|
# else // ERGDOX_LED_15 non-mirrored
|
||||||
|
@ -72,7 +52,7 @@ void rgblight_set(void) {
|
||||||
}
|
}
|
||||||
i2c_stop();
|
i2c_stop();
|
||||||
|
|
||||||
ws2812_setleds(led, RGBLED_NUM);
|
ws2812_setleds(led, led_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard
|
||||||
SLEEP_LED_ENABLE = no
|
SLEEP_LED_ENABLE = no
|
||||||
API_SYSEX_ENABLE = no
|
API_SYSEX_ENABLE = no
|
||||||
RGBLIGHT_ENABLE = yes
|
RGBLIGHT_ENABLE = yes
|
||||||
RGBLIGHT_CUSTOM_DRIVER = yes
|
|
||||||
|
|
||||||
RGB_MATRIX_ENABLE = no # enable later
|
RGB_MATRIX_ENABLE = no # enable later
|
||||||
DEBOUNCE_TYPE = eager_pr
|
DEBOUNCE_TYPE = eager_pr
|
||||||
|
|
|
@ -107,23 +107,19 @@ LED_TYPE led[RGBLED_NUM];
|
||||||
rgblight_segment_t const *const *rgblight_layers = NULL;
|
rgblight_segment_t const *const *rgblight_layers = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static uint8_t clipping_start_pos = 0;
|
rgblight_ranges_t rgblight_ranges = { 0, RGBLED_NUM, 0, RGBLED_NUM, RGBLED_NUM };
|
||||||
static uint8_t clipping_num_leds = RGBLED_NUM;
|
|
||||||
static uint8_t effect_start_pos = 0;
|
|
||||||
static uint8_t effect_end_pos = RGBLED_NUM;
|
|
||||||
static uint8_t effect_num_leds = RGBLED_NUM;
|
|
||||||
|
|
||||||
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
|
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
|
||||||
clipping_start_pos = start_pos;
|
rgblight_ranges.clipping_start_pos = start_pos;
|
||||||
clipping_num_leds = num_leds;
|
rgblight_ranges.clipping_num_leds = num_leds;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
|
void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) {
|
||||||
if (start_pos >= RGBLED_NUM) return;
|
if (start_pos >= RGBLED_NUM) return;
|
||||||
if (start_pos + num_leds > RGBLED_NUM) return;
|
if (start_pos + num_leds > RGBLED_NUM) return;
|
||||||
effect_start_pos = start_pos;
|
rgblight_ranges.effect_start_pos = start_pos;
|
||||||
effect_end_pos = start_pos + num_leds;
|
rgblight_ranges.effect_end_pos = start_pos + num_leds;
|
||||||
effect_num_leds = num_leds;
|
rgblight_ranges.effect_num_leds = num_leds;
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -468,15 +464,15 @@ void rgblight_sethsv_eeprom_helper(uint8_t hue, uint8_t sat, uint8_t val, bool w
|
||||||
# else
|
# else
|
||||||
uint8_t range = RGBLED_GRADIENT_RANGES[delta / 2];
|
uint8_t range = RGBLED_GRADIENT_RANGES[delta / 2];
|
||||||
# endif
|
# endif
|
||||||
for (uint8_t i = 0; i < effect_num_leds; i++) {
|
for (uint8_t i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
uint8_t _hue = ((uint16_t)i * (uint16_t)range) / effect_num_leds;
|
uint8_t _hue = ((uint16_t)i * (uint16_t)range) / rgblight_ranges.effect_num_leds;
|
||||||
if (direction) {
|
if (direction) {
|
||||||
_hue = hue + _hue;
|
_hue = hue + _hue;
|
||||||
} else {
|
} else {
|
||||||
_hue = hue - _hue;
|
_hue = hue - _hue;
|
||||||
}
|
}
|
||||||
dprintf("rgblight rainbow set hsv: %d,%d,%d,%u\n", i, _hue, direction, range);
|
dprintf("rgblight rainbow set hsv: %d,%d,%d,%u\n", i, _hue, direction, range);
|
||||||
sethsv(_hue, sat, val, (LED_TYPE *)&led[i + effect_start_pos]);
|
sethsv(_hue, sat, val, (LED_TYPE *)&led[i + rgblight_ranges.effect_start_pos]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
}
|
}
|
||||||
|
@ -530,7 +526,7 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = effect_start_pos; i < effect_end_pos; i++) {
|
for (uint8_t i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = r;
|
led[i].r = r;
|
||||||
led[i].g = g;
|
led[i].g = g;
|
||||||
led[i].b = b;
|
led[i].b = b;
|
||||||
|
@ -664,10 +660,15 @@ static void rgblight_layers_write(void) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
__attribute__((weak))
|
||||||
|
void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) {
|
||||||
|
ws2812_setleds(start_led, num_leds);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef RGBLIGHT_CUSTOM_DRIVER
|
#ifndef RGBLIGHT_CUSTOM_DRIVER
|
||||||
void rgblight_set(void) {
|
void rgblight_set(void) {
|
||||||
LED_TYPE *start_led;
|
LED_TYPE *start_led;
|
||||||
uint16_t num_leds = clipping_num_leds;
|
uint8_t num_leds = rgblight_ranges.clipping_num_leds;
|
||||||
|
|
||||||
# ifdef RGBLIGHT_LAYERS
|
# ifdef RGBLIGHT_LAYERS
|
||||||
if (rgblight_layers != NULL) {
|
if (rgblight_layers != NULL) {
|
||||||
|
@ -676,7 +677,7 @@ void rgblight_set(void) {
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
if (!rgblight_config.enable) {
|
if (!rgblight_config.enable) {
|
||||||
for (uint8_t i = effect_start_pos; i < effect_end_pos; i++) {
|
for (uint8_t i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = 0;
|
led[i].r = 0;
|
||||||
led[i].g = 0;
|
led[i].g = 0;
|
||||||
led[i].b = 0;
|
led[i].b = 0;
|
||||||
|
@ -691,9 +692,9 @@ void rgblight_set(void) {
|
||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
led0[i] = led[pgm_read_byte(&led_map[i])];
|
led0[i] = led[pgm_read_byte(&led_map[i])];
|
||||||
}
|
}
|
||||||
start_led = led0 + clipping_start_pos;
|
start_led = led0 + rgblight_ranges.clipping_start_pos;
|
||||||
# else
|
# else
|
||||||
start_led = led + clipping_start_pos;
|
start_led = led + rgblight_ranges.clipping_start_pos;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef RGBW
|
# ifdef RGBW
|
||||||
|
@ -701,7 +702,7 @@ void rgblight_set(void) {
|
||||||
convert_rgb_to_rgbw(&start_led[i]);
|
convert_rgb_to_rgbw(&start_led[i]);
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
ws2812_setleds(start_led, num_leds);
|
rgblight_call_driver(start_led, num_leds);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -961,9 +962,9 @@ void rgblight_effect_rainbow_swirl(animation_status_t *anim) {
|
||||||
uint8_t hue;
|
uint8_t hue;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
for (i = 0; i < effect_num_leds; i++) {
|
for (i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
hue = (RGBLIGHT_RAINBOW_SWIRL_RANGE / effect_num_leds * i + anim->current_hue);
|
hue = (RGBLIGHT_RAINBOW_SWIRL_RANGE / rgblight_ranges.effect_num_leds * i + anim->current_hue);
|
||||||
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + effect_start_pos]);
|
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + rgblight_ranges.effect_start_pos]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
|
|
||||||
|
@ -991,7 +992,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
||||||
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
||||||
if (anim->pos == 0) { // restart signal
|
if (anim->pos == 0) { // restart signal
|
||||||
if (increment == 1) {
|
if (increment == 1) {
|
||||||
pos = effect_num_leds - 1;
|
pos = rgblight_ranges.effect_num_leds - 1;
|
||||||
} else {
|
} else {
|
||||||
pos = 0;
|
pos = 0;
|
||||||
}
|
}
|
||||||
|
@ -999,8 +1000,8 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
for (i = 0; i < effect_num_leds; i++) {
|
for (i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
LED_TYPE *ledp = led + i + effect_start_pos;
|
LED_TYPE *ledp = led + i + rgblight_ranges.effect_start_pos;
|
||||||
ledp->r = 0;
|
ledp->r = 0;
|
||||||
ledp->g = 0;
|
ledp->g = 0;
|
||||||
ledp->b = 0;
|
ledp->b = 0;
|
||||||
|
@ -1013,7 +1014,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
||||||
k = k % RGBLED_NUM;
|
k = k % RGBLED_NUM;
|
||||||
}
|
}
|
||||||
if (k < 0) {
|
if (k < 0) {
|
||||||
k = k + effect_num_leds;
|
k = k + rgblight_ranges.effect_num_leds;
|
||||||
}
|
}
|
||||||
if (i == k) {
|
if (i == k) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val * (RGBLIGHT_EFFECT_SNAKE_LENGTH - j) / RGBLIGHT_EFFECT_SNAKE_LENGTH), ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val * (RGBLIGHT_EFFECT_SNAKE_LENGTH - j) / RGBLIGHT_EFFECT_SNAKE_LENGTH), ledp);
|
||||||
|
@ -1023,7 +1024,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
if (increment == 1) {
|
if (increment == 1) {
|
||||||
if (pos - 1 < 0) {
|
if (pos - 1 < 0) {
|
||||||
pos = effect_num_leds - 1;
|
pos = rgblight_ranges.effect_num_leds - 1;
|
||||||
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
||||||
anim->pos = 0;
|
anim->pos = 0;
|
||||||
# endif
|
# endif
|
||||||
|
@ -1034,7 +1035,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pos = (pos + 1) % effect_num_leds;
|
pos = (pos + 1) % rgblight_ranges.effect_num_leds;
|
||||||
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
# if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
|
||||||
anim->pos = pos;
|
anim->pos = pos;
|
||||||
# endif
|
# endif
|
||||||
|
@ -1060,7 +1061,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
// Set all the LEDs to 0
|
// Set all the LEDs to 0
|
||||||
for (i = effect_start_pos; i < effect_end_pos; i++) {
|
for (i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = 0;
|
led[i].r = 0;
|
||||||
led[i].g = 0;
|
led[i].g = 0;
|
||||||
led[i].b = 0;
|
led[i].b = 0;
|
||||||
|
@ -1070,7 +1071,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
|
||||||
}
|
}
|
||||||
// Determine which LEDs should be lit up
|
// Determine which LEDs should be lit up
|
||||||
for (i = 0; i < RGBLIGHT_EFFECT_KNIGHT_LED_NUM; i++) {
|
for (i = 0; i < RGBLIGHT_EFFECT_KNIGHT_LED_NUM; i++) {
|
||||||
cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % effect_num_leds + effect_start_pos;
|
cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % rgblight_ranges.effect_num_leds + rgblight_ranges.effect_start_pos;
|
||||||
|
|
||||||
if (i >= low_bound && i <= high_bound) {
|
if (i >= low_bound && i <= high_bound) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[cur]);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[cur]);
|
||||||
|
@ -1107,9 +1108,9 @@ void rgblight_effect_christmas(animation_status_t *anim) {
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
anim->current_offset = (anim->current_offset + 1) % 2;
|
anim->current_offset = (anim->current_offset + 1) % 2;
|
||||||
for (i = 0; i < effect_num_leds; i++) {
|
for (i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
hue = 0 + ((i / RGBLIGHT_EFFECT_CHRISTMAS_STEP + anim->current_offset) % 2) * 85;
|
hue = 0 + ((i / RGBLIGHT_EFFECT_CHRISTMAS_STEP + anim->current_offset) % 2) * 85;
|
||||||
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + effect_start_pos]);
|
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i + rgblight_ranges.effect_start_pos]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
}
|
}
|
||||||
|
@ -1148,11 +1149,11 @@ void rgblight_effect_rgbtest(animation_status_t *anim) {
|
||||||
|
|
||||||
#ifdef RGBLIGHT_EFFECT_ALTERNATING
|
#ifdef RGBLIGHT_EFFECT_ALTERNATING
|
||||||
void rgblight_effect_alternating(animation_status_t *anim) {
|
void rgblight_effect_alternating(animation_status_t *anim) {
|
||||||
for (int i = 0; i < effect_num_leds; i++) {
|
for (int i = 0; i < rgblight_ranges.effect_num_leds; i++) {
|
||||||
LED_TYPE *ledp = led + i + effect_start_pos;
|
LED_TYPE *ledp = led + i + rgblight_ranges.effect_start_pos;
|
||||||
if (i < effect_num_leds / 2 && anim->pos) {
|
if (i < rgblight_ranges.effect_num_leds / 2 && anim->pos) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
||||||
} else if (i >= effect_num_leds / 2 && !anim->pos) {
|
} else if (i >= rgblight_ranges.effect_num_leds / 2 && !anim->pos) {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, ledp);
|
||||||
} else {
|
} else {
|
||||||
sethsv(rgblight_config.hue, rgblight_config.sat, 0, ledp);
|
sethsv(rgblight_config.hue, rgblight_config.sat, 0, ledp);
|
||||||
|
|
|
@ -130,7 +130,7 @@ enum RGBLIGHT_EFFECT_MODE {
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifndef RGBLIGHT_EFFECT_KNIGHT_LED_NUM
|
# ifndef RGBLIGHT_EFFECT_KNIGHT_LED_NUM
|
||||||
# define RGBLIGHT_EFFECT_KNIGHT_LED_NUM (effect_num_leds)
|
# define RGBLIGHT_EFFECT_KNIGHT_LED_NUM (rgblight_ranges.effect_num_leds)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL
|
# ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL
|
||||||
|
@ -160,9 +160,7 @@ enum RGBLIGHT_EFFECT_MODE {
|
||||||
# include <stdint.h>
|
# include <stdint.h>
|
||||||
# include <stdbool.h>
|
# include <stdbool.h>
|
||||||
# include "eeconfig.h"
|
# include "eeconfig.h"
|
||||||
# ifndef RGBLIGHT_CUSTOM_DRIVER
|
# include "ws2812.h"
|
||||||
# include "ws2812.h"
|
|
||||||
# endif
|
|
||||||
# include "color.h"
|
# include "color.h"
|
||||||
# include "rgblight_list.h"
|
# include "rgblight_list.h"
|
||||||
|
|
||||||
|
@ -230,6 +228,19 @@ typedef struct _rgblight_status_t {
|
||||||
# endif
|
# endif
|
||||||
} rgblight_status_t;
|
} rgblight_status_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure for RGB Light clipping ranges
|
||||||
|
*/
|
||||||
|
typedef struct _rgblight_ranges_t {
|
||||||
|
uint8_t clipping_start_pos;
|
||||||
|
uint8_t clipping_num_leds;
|
||||||
|
uint8_t effect_start_pos;
|
||||||
|
uint8_t effect_end_pos;
|
||||||
|
uint8_t effect_num_leds;
|
||||||
|
} rgblight_ranges_t;
|
||||||
|
|
||||||
|
extern rgblight_ranges_t rgblight_ranges;
|
||||||
|
|
||||||
/* === Utility Functions ===*/
|
/* === Utility Functions ===*/
|
||||||
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
|
void sethsv(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); // without RGBLIGHT_LIMIT_VAL check
|
void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1); // without RGBLIGHT_LIMIT_VAL check
|
||||||
|
|
Loading…
Reference in a new issue