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…
	
	Add table
		Add a link
		
	
		Reference in a new issue