]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/handwired/promethium/rgbsps.c
line ending stuff
[qmk_firmware.git] / keyboards / handwired / promethium / rgbsps.c
1 #include "light_ws2812.h"
2 #include "rgbsps.h"
3
4 struct cRGB led[RGBSPS_NUM];
5
6 void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
7   led[index].r = r;
8   led[index].g = g;
9   led[index].b = b;
10 }
11
12 void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) {
13   for (uint16_t i = 0; i < RGBSPS_NUM; i++) {
14     rgbsps_set(i, r, g, b);
15   }
16 }
17
18 void rgbsps_turnoff(void) {
19   rgbsps_setall(0, 0, 0);
20 }
21
22 void rgbsps_send(void) {
23   ws2812_setleds(led, RGBSPS_NUM);
24 }
25
26 void rgbsps_sethsv(uint8_t index, uint16_t hue, uint8_t sat, uint8_t val) {
27   uint8_t r = 0, g = 0, b = 0, base, color;
28
29   if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
30     r = val;
31     g = val;
32     b = val;
33   } else {
34     base = ((255 - sat) * val) >> 8;
35     color = (val - base) * (hue % 60) / 60;
36
37     switch (hue / 60) {
38       case 0:
39         r = val;
40         g = base + color;
41         b = base;
42         break;
43       case 1:
44         r = val - color;
45         g = val;
46         b = base;
47         break;
48       case 2:
49         r = base;
50         g = val;
51         b = base + color;
52         break;
53       case 3:
54         r = base;
55         g = val - color;
56         b = val;
57         break;
58       case 4:
59         r = base + color;
60         g = base;
61         b = val;
62         break;
63       case 5:
64         r = val;
65         g = base;
66         b = val - color;
67         break;
68     }
69   }
70
71   rgbsps_set(index, r, g, b);
72 }
73