~ruther/qmk_firmware

0100629fa2e5e9ddd6d0f855d687938352f82774 — customMK 3 years ago a372ddc
Fix AVR backlight breathing: low brightness limit & exceeding breathing table max index (#16770)

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: David Hoelscher <infinityis@users.noreply.github.com>
1 files changed, 6 insertions(+), 2 deletions(-)

M quantum/backlight/backlight_avr.c
M quantum/backlight/backlight_avr.c => quantum/backlight/backlight_avr.c +6 -2
@@ 405,14 405,18 @@ ISR(TIMERx_OVF_vect)
    uint16_t interval = (uint16_t)get_breathing_period() * breathing_ISR_frequency / BREATHING_STEPS;
    // resetting after one period to prevent ugly reset at overflow.
    breathing_counter = (breathing_counter + 1) % (get_breathing_period() * breathing_ISR_frequency);
    uint8_t index     = breathing_counter / interval % BREATHING_STEPS;
    uint8_t index     = breathing_counter / interval;
    // limit index to max step value
    if (index >= BREATHING_STEPS) {
        index = BREATHING_STEPS - 1;
    }

    if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) || ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1))) {
        breathing_interrupt_disable();
    }

    // Set PWM to a brightnessvalue scaled to the configured resolution
    set_pwm(cie_lightness(rescale_limit_val(scale_backlight((uint16_t)pgm_read_byte(&breathing_table[index]) * ICRx / 255))));
    set_pwm(cie_lightness(rescale_limit_val(scale_backlight((uint32_t)pgm_read_byte(&breathing_table[index]) * ICRx / 255))));
}

#endif // BACKLIGHT_BREATHING