diff options
| author | David Stosik <davidstosik@users.noreply.github.com> | 2017-09-06 06:19:08 +0900 |
|---|---|---|
| committer | skullydazed <skullydazed@users.noreply.github.com> | 2017-09-05 14:19:08 -0700 |
| commit | 4edfa97e031c3c1884d54d6f0310c99a9d6abd82 (patch) | |
| tree | 7f63fa87e63c7c2b6a153fa38aa3a41d27b2aeac /quantum | |
| parent | 5f154f0a00391546666ce1e3276f4299731d4be4 (diff) | |
| download | qmk_firmware-4edfa97e031c3c1884d54d6f0310c99a9d6abd82.tar.gz qmk_firmware-4edfa97e031c3c1884d54d6f0310c99a9d6abd82.zip | |
Improve and simplify RGB Knight mode (#1677)
* Simplify RGB Knight mode code, and make it look closer to KITT
* Remove RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH
Diffstat (limited to 'quantum')
| -rw-r--r-- | quantum/rgblight.c | 59 | ||||
| -rw-r--r-- | quantum/rgblight.h | 4 |
2 files changed, 20 insertions, 43 deletions
diff --git a/quantum/rgblight.c b/quantum/rgblight.c index d568a4f44..1b5076450 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c | |||
| @@ -539,55 +539,36 @@ void rgblight_effect_snake(uint8_t interval) { | |||
| 539 | } | 539 | } |
| 540 | } | 540 | } |
| 541 | void rgblight_effect_knight(uint8_t interval) { | 541 | void rgblight_effect_knight(uint8_t interval) { |
| 542 | static int8_t pos = 0; | ||
| 543 | static uint16_t last_timer = 0; | 542 | static uint16_t last_timer = 0; |
| 544 | uint8_t i, j, cur; | ||
| 545 | int8_t k; | ||
| 546 | LED_TYPE preled[RGBLED_NUM]; | ||
| 547 | static int8_t increment = -1; | ||
| 548 | if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { | 543 | if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { |
| 549 | return; | 544 | return; |
| 550 | } | 545 | } |
| 551 | last_timer = timer_read(); | 546 | last_timer = timer_read(); |
| 552 | for (i = 0; i < RGBLED_NUM; i++) { | 547 | |
| 553 | preled[i].r = 0; | 548 | static int8_t low_bound = 0; |
| 554 | preled[i].g = 0; | 549 | static int8_t high_bound = RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1; |
| 555 | preled[i].b = 0; | 550 | static int8_t increment = 1; |
| 556 | for (j = 0; j < RGBLIGHT_EFFECT_KNIGHT_LENGTH; j++) { | 551 | uint8_t i, cur; |
| 557 | k = pos + j * increment; | 552 | |
| 558 | if (k < 0) { | ||
| 559 | k = 0; | ||
| 560 | } | ||
| 561 | if (k >= RGBLED_NUM) { | ||
| 562 | k = RGBLED_NUM - 1; | ||
| 563 | } | ||
| 564 | if (i == k) { | ||
| 565 | sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&preled[i]); | ||
| 566 | } | ||
| 567 | } | ||
| 568 | } | ||
| 569 | for (i = 0; i < RGBLED_NUM; i++) { | 553 | for (i = 0; i < RGBLED_NUM; i++) { |
| 570 | cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM; | 554 | cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM; |
| 571 | led[i].r = preled[cur].r; | 555 | |
| 572 | led[i].g = preled[cur].g; | 556 | if (i >= low_bound && i <= high_bound) { |
| 573 | led[i].b = preled[cur].b; | 557 | sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[cur]); |
| 574 | } | ||
| 575 | rgblight_set(); | ||
| 576 | if (increment == 1) { | ||
| 577 | if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) { | ||
| 578 | pos = 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH; | ||
| 579 | increment = -1; | ||
| 580 | } else { | ||
| 581 | pos -= 1; | ||
| 582 | } | ||
| 583 | } else { | ||
| 584 | if (pos + 1 > RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH) { | ||
| 585 | pos = RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1; | ||
| 586 | increment = 1; | ||
| 587 | } else { | 558 | } else { |
| 588 | pos += 1; | 559 | led[cur].r = 0; |
| 560 | led[cur].g = 0; | ||
| 561 | led[cur].b = 0; | ||
| 589 | } | 562 | } |
| 590 | } | 563 | } |
| 564 | rgblight_set(); | ||
| 565 | |||
| 566 | low_bound += increment; | ||
| 567 | high_bound += increment; | ||
| 568 | |||
| 569 | if (high_bound <= 0 || low_bound >= RGBLED_NUM - 1) { | ||
| 570 | increment = -increment; | ||
| 571 | } | ||
| 591 | } | 572 | } |
| 592 | 573 | ||
| 593 | 574 | ||
diff --git a/quantum/rgblight.h b/quantum/rgblight.h index d3e3a6cf7..d0dd6e490 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h | |||
| @@ -33,10 +33,6 @@ | |||
| 33 | #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 0 | 33 | #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 0 |
| 34 | #endif | 34 | #endif |
| 35 | 35 | ||
| 36 | #ifndef RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH | ||
| 37 | #define RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH 4 | ||
| 38 | #endif | ||
| 39 | |||
| 40 | #ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL | 36 | #ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL |
| 41 | #define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 1000 | 37 | #define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 1000 |
| 42 | #endif | 38 | #endif |
