Skip to content

Commit

Permalink
rgblight: Fix rgblight_blink_layer when multiple layers are active
Browse files Browse the repository at this point in the history
The change to support repeated blinking (qmk#12237) does not work correctly
when there are multiple blinking layers active at the same time.

It is decrementing the number of times remaining for every active layer
which will cause it to reach 0 prematurely and ignore some of the layers.

Decrement times remaining only once for each timer event.
  • Loading branch information
nomis committed Apr 9, 2022
1 parent 07bdbe0 commit 85fe4fc
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions quantum/rgblight/rgblight.c
Original file line number Diff line number Diff line change
Expand Up @@ -825,18 +825,19 @@ void rgblight_blink_layer_repeat(uint8_t layer, uint16_t duration_ms, uint8_t ti
void rgblight_blink_layer_repeat_helper(void) {
if (_blinking_layer_mask != 0 && timer_expired(sync_timer_read(), _repeat_timer)) {
for (uint8_t layer = 0; layer < RGBLIGHT_MAX_LAYERS; layer++) {
if ((_blinking_layer_mask & (rgblight_layer_mask_t)1 << layer) != 0 && _times_remaining > 0) {
if ((_blinking_layer_mask & (rgblight_layer_mask_t)1 << layer) != 0) {
if (_times_remaining % 2 == 1) {
rgblight_set_layer_state(layer, false);
} else {
rgblight_set_layer_state(layer, true);
}
_times_remaining--;
_repeat_timer = sync_timer_read() + _dur;
}
}
_times_remaining--;
if (_times_remaining <= 0) {
_blinking_layer_mask = 0;
} else {
_repeat_timer = sync_timer_read() + _dur;
}
}
}
Expand Down

0 comments on commit 85fe4fc

Please sign in to comment.