qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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