logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

rgbsps.c (1410B)


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