rgb.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "rgb.h"
  2. // TODO gate this debugging header
  3. #include <print.h>
  4. // Wired up in layer_state_set_user in keymap.c
  5. layer_state_t layer_state_set_rgb(layer_state_t state) {
  6. switch (get_highest_layer(state)) {
  7. case _QWERTY:
  8. rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
  9. rgblight_sethsv_noeeprom(RGB_CLEAR);
  10. break;
  11. case _SYMB:
  12. rgblight_sethsv_noeeprom_red();
  13. break;
  14. case _NUMP:
  15. rgblight_sethsv_noeeprom_green();
  16. break;
  17. case _OVERWATCH:
  18. rgblight_sethsv_noeeprom_blue();
  19. // TODO set up animated rainbow swirl with overwatch colors.
  20. // rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
  21. // rgblight_effect_breathing(&animation_status);
  22. // rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
  23. break;
  24. case _NAVI:
  25. rgblight_sethsv_noeeprom(HSV_AZURE);
  26. break;
  27. default: // for any other layers, or the default layer
  28. break;
  29. }
  30. return state;
  31. }
  32. void keyboard_post_init_rgb(void) {
  33. rgblight_enable();
  34. rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
  35. rgblight_setrgb(RGB_CLEAR);
  36. uprintf("Reset RGB colors");
  37. }
  38. void matrix_scan_rgb(void) {
  39. set_rgb_indicators(get_mods(), get_oneshot_mods());
  40. }
  41. void set_rgb_indicators(uint8_t this_mod, uint8_t this_osm) {
  42. if (get_highest_layer(layer_state) == _QWERTY) {
  43. if ((this_mod | this_osm) & MOD_MASK_SHIFT) {
  44. rgblight_setrgb_gold_at(SHFT_LED1);
  45. } else {
  46. rgblight_setrgb_at(RGB_CLEAR, SHFT_LED1);
  47. }
  48. if ((this_mod | this_osm) & MOD_MASK_GUI) {
  49. rgblight_setrgb_purple_at(GUI_LED1);
  50. } else {
  51. rgblight_setrgb_at(RGB_CLEAR, GUI_LED1);
  52. }
  53. }
  54. }