aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
authorDavid Stosik <davidstosik@users.noreply.github.com>2017-09-06 06:19:08 +0900
committerskullydazed <skullydazed@users.noreply.github.com>2017-09-05 14:19:08 -0700
commit4edfa97e031c3c1884d54d6f0310c99a9d6abd82 (patch)
tree7f63fa87e63c7c2b6a153fa38aa3a41d27b2aeac /quantum
parent5f154f0a00391546666ce1e3276f4299731d4be4 (diff)
downloadqmk_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.c59
-rw-r--r--quantum/rgblight.h4
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}
541void rgblight_effect_knight(uint8_t interval) { 541void 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