summaryrefslogtreecommitdiffstats
path: root/keyboards/keebio/levinson/keymaps/issmirnov/rgb.c
blob: 36957313537e70be2c7f5d6d1b0332a838554627 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "rgb.h"

// TODO gate this debugging header
#include <print.h>

// Wired up in layer_state_set_user in keymap.c
layer_state_t layer_state_set_rgb(layer_state_t state) {
  switch (get_highest_layer(state)) {
    case _QWERTY:
      rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
      rgblight_sethsv_noeeprom(RGB_CLEAR);
      break;
    case _SYMB:
      rgblight_sethsv_noeeprom_red();
      break;
    case _NUMP:
      rgblight_sethsv_noeeprom_green();
      break;
    case _OVERWATCH:
      rgblight_sethsv_noeeprom_blue();
      // TODO set up animated rainbow swirl with overwatch colors.
      // rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
      // rgblight_effect_breathing(&animation_status);
      // rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
      break;
    case _NAVI:
      rgblight_sethsv_noeeprom(HSV_AZURE);
      break;
    default: //  for any other layers, or the default layer
      break;
    }
  return state;
}


void keyboard_post_init_rgb(void) {
  rgblight_enable();
  rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
  rgblight_setrgb(RGB_CLEAR);
  uprintf("Reset RGB colors");
}

void matrix_scan_rgb(void) {
  set_rgb_indicators(get_mods(), get_oneshot_mods());
}

void set_rgb_indicators(uint8_t this_mod, uint8_t this_osm) {
  if (get_highest_layer(layer_state) == _QWERTY) {
    if ((this_mod | this_osm) & MOD_MASK_SHIFT) {
      rgblight_setrgb_gold_at(SHFT_LED1);
    } else {
      rgblight_setrgb_at(RGB_CLEAR, SHFT_LED1);
    }

    if ((this_mod | this_osm) & MOD_MASK_GUI) {
      rgblight_setrgb_purple_at(GUI_LED1);
    } else {
      rgblight_setrgb_at(RGB_CLEAR, GUI_LED1);
    }
  }
}