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