aboutsummaryrefslogtreecommitdiff
path: root/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c')
-rw-r--r--keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c b/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
index b348b0b7b..c5c8c0963 100644
--- a/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
+++ b/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
@@ -10,7 +10,7 @@ enum layers_keymap {
10}; 10};
11 11
12void eeconfig_init_keymap(void) { 12void eeconfig_init_keymap(void) {
13 rgblight_sethsv(MODERN_DOLCH_RED.h, MODERN_DOLCH_RED.s, MODERN_DOLCH_RED.v); 13 rgblight_sethsv(MODERN_DOLCH_RED);
14 rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); 14 rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
15} 15}
16 16
@@ -31,6 +31,46 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
31 } 31 }
32} 32}
33 33
34static bool skip_caps = false;
35
36static void fn_light(uint32_t state) {
37 if (IS_LAYER_ON_STATE(state, L_FN)) {
38 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
39 rgblight_sethsv_noeeprom(modern_dolch_red.h, modern_dolch_red.s, rgblight_get_val());
40 skip_caps = true;
41 } else {
42 rgblight_config_t saved = { .raw = eeconfig_read_rgblight() };
43 rgblight_sethsv_noeeprom(saved.hue, saved.sat, saved.val);
44 rgblight_mode_noeeprom(saved.mode);
45 }
46 // caps_light will be called automatically after this
47}
48
49static void caps_light(uint8_t usb_led) {
50 if (skip_caps) {
51 skip_caps = false;
52 return; // Skip calls triggered by the Fn layer turning on
53 }
54 if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
55 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
56 rgblight_sethsv_noeeprom(modern_dolch_cyan.h, modern_dolch_cyan.s, rgblight_get_val());
57 } else {
58 fn_light(layer_state); // Caps is off, check if Fn light should be on
59 }
60}
61
62uint32_t layer_state_set_keymap(uint32_t state) {
63 static uint32_t prev_state = L_BASE;
64 if (IS_LAYER_ON_STATE(state, L_FN) != IS_LAYER_ON_STATE(prev_state, L_FN)) {
65 fn_light(state); // Fn state changed since last time
66 }
67 return prev_state = state;
68}
69
70void led_set_keymap(uint8_t usb_led) {
71 caps_light(usb_led);
72}
73
34const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 74const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
35 /* Base layer 75 /* Base layer
36 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ 76 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐