Browse Source

[User] Update personal userspace and keymaps, add reactive underglow (#6410)

* Update MODERN_DOLCH_RED color

* Remove unused RAL_LAL tap dance

* Disable Space Cadet on all boards

* Rework SEND_STRING_CLEAN into CLEAN_MODS, fix DST_P_R/DST_N_A

* Disable unnecessary underglow animations

* Rearrange feature flags in rules.mk files

* Change custom colors from structs to defines

* Add some explicit initializers

* Add MODERN_DOLCH_CYAN color

* Add IS_LAYER_ON_STATE()/IS_LAYER_OFF_STATE() macros

* Add led_set_keymap() template function

* Change underglow color based on Caps/Fn state

* Preserve val when changing underglow colors

* Only trigger Fn light for Fn layer

* Refactor fn_light() and caps_light() slightly

* Add comments to fn_light() and caps_light()
Konstantin Đorđević 5 years ago
parent
commit
36d3902504

+ 0 - 1
keyboards/kbdfans/kbd6x/keymaps/konstantin/config.h

@@ -1,4 +1,3 @@
 #pragma once
 
 #define LAYER_FN
-#define SEND_STRING_CLEAN

+ 41 - 1
keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c

@@ -10,7 +10,7 @@ enum layers_keymap {
 };
 
 void eeconfig_init_keymap(void) {
-    rgblight_sethsv(MODERN_DOLCH_RED.h, MODERN_DOLCH_RED.s, MODERN_DOLCH_RED.v);
+    rgblight_sethsv(MODERN_DOLCH_RED);
     rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
 }
 
@@ -31,6 +31,46 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
     }
 }
 
+static bool skip_caps = false;
+
+static void fn_light(uint32_t state) {
+    if (IS_LAYER_ON_STATE(state, L_FN)) {
+        rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+        rgblight_sethsv_noeeprom(modern_dolch_red.h, modern_dolch_red.s, rgblight_get_val());
+        skip_caps = true;
+    } else {
+        rgblight_config_t saved = { .raw = eeconfig_read_rgblight() };
+        rgblight_sethsv_noeeprom(saved.hue, saved.sat, saved.val);
+        rgblight_mode_noeeprom(saved.mode);
+    }
+    // caps_light will be called automatically after this
+}
+
+static void caps_light(uint8_t usb_led) {
+    if (skip_caps) {
+        skip_caps = false;
+        return;  // Skip calls triggered by the Fn layer turning on
+    }
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+        rgblight_sethsv_noeeprom(modern_dolch_cyan.h, modern_dolch_cyan.s, rgblight_get_val());
+    } else {
+        fn_light(layer_state);  // Caps is off, check if Fn light should be on
+    }
+}
+
+uint32_t layer_state_set_keymap(uint32_t state) {
+    static uint32_t prev_state = L_BASE;
+    if (IS_LAYER_ON_STATE(state, L_FN) != IS_LAYER_ON_STATE(prev_state, L_FN)) {
+        fn_light(state);  // Fn state changed since last time
+    }
+    return prev_state = state;
+}
+
+void led_set_keymap(uint8_t usb_led) {
+    caps_light(usb_led);
+}
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Base layer
      * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐

+ 11 - 11
keyboards/kbdfans/kbd6x/keymaps/konstantin/rules.mk

@@ -1,11 +1,11 @@
-BOOTMAGIC_ENABLE  = no
-COMMAND_ENABLE    = yes
-CONSOLE_ENABLE    = no
-EXTRAKEY_ENABLE   = yes
-MOUSEKEY_ENABLE   = yes
-NKRO_ENABLE       = yes
-TAP_DANCE_ENABLE  = yes
-UNICODEMAP_ENABLE = no
-
-BACKLIGHT_ENABLE = yes
-RGBLIGHT_ENABLE  = yes
+BACKLIGHT_ENABLE   = no
+BOOTMAGIC_ENABLE   = no
+COMMAND_ENABLE     = yes
+CONSOLE_ENABLE     = yes
+EXTRAKEY_ENABLE    = yes
+MOUSEKEY_ENABLE    = yes
+NKRO_ENABLE        = yes
+RGBLIGHT_ENABLE    = yes
+SPACE_CADET_ENABLE = no
+TAP_DANCE_ENABLE   = yes
+UNICODEMAP_ENABLE  = no

+ 1 - 1
keyboards/melody96/keymaps/konstantin/keymap.c

@@ -1,7 +1,7 @@
 #include QMK_KEYBOARD_H
 #include "konstantin.h"
 
-static const HSV *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW };
+static const HSV *colors[] = { &godspeed_blue, &godspeed_yellow };
 static const size_t cnum = sizeof colors / sizeof *colors;
 static size_t cidx = 0;
 

+ 11 - 10
keyboards/melody96/keymaps/konstantin/rules.mk

@@ -1,10 +1,11 @@
-BOOTMAGIC_ENABLE  = no
-COMMAND_ENABLE    = yes
-CONSOLE_ENABLE    = no
-EXTRAKEY_ENABLE   = yes
-MOUSEKEY_ENABLE   = yes
-NKRO_ENABLE       = yes
-TAP_DANCE_ENABLE  = yes
-UNICODEMAP_ENABLE = yes
-
-BACKLIGHT_ENABLE = no
+BACKLIGHT_ENABLE   = no
+BOOTMAGIC_ENABLE   = no
+COMMAND_ENABLE     = yes
+CONSOLE_ENABLE     = no
+EXTRAKEY_ENABLE    = yes
+MOUSEKEY_ENABLE    = yes
+NKRO_ENABLE        = yes
+RGBLIGHT_ENABLE    = yes
+SPACE_CADET_ENABLE = no
+TAP_DANCE_ENABLE   = yes
+UNICODEMAP_ENABLE  = yes

+ 10 - 8
keyboards/wasdat/keymaps/konstantin/rules.mk

@@ -1,8 +1,10 @@
-BOOTMAGIC_ENABLE  = no
-COMMAND_ENABLE    = yes
-CONSOLE_ENABLE    = yes
-EXTRAKEY_ENABLE   = yes
-MOUSEKEY_ENABLE   = yes
-NKRO_ENABLE       = yes
-TAP_DANCE_ENABLE  = yes
-UNICODEMAP_ENABLE = yes
+BACKLIGHT_ENABLE   = no
+BOOTMAGIC_ENABLE   = no
+COMMAND_ENABLE     = yes
+CONSOLE_ENABLE     = yes
+EXTRAKEY_ENABLE    = yes
+MOUSEKEY_ENABLE    = yes
+NKRO_ENABLE        = yes
+SPACE_CADET_ENABLE = no
+TAP_DANCE_ENABLE   = yes
+UNICODEMAP_ENABLE  = yes

+ 11 - 11
keyboards/whitefox/keymaps/konstantin/rules.mk

@@ -1,11 +1,11 @@
-BOOTMAGIC_ENABLE  = no
-COMMAND_ENABLE    = yes
-CONSOLE_ENABLE    = yes
-EXTRAKEY_ENABLE   = yes
-MOUSEKEY_ENABLE   = yes
-NKRO_ENABLE       = yes
-TAP_DANCE_ENABLE  = yes
-UNICODEMAP_ENABLE = yes
-
-BACKLIGHT_ENABLE  = no
-VISUALIZER_ENABLE = no
+BACKLIGHT_ENABLE   = no
+BOOTMAGIC_ENABLE   = no
+COMMAND_ENABLE     = yes
+CONSOLE_ENABLE     = yes
+EXTRAKEY_ENABLE    = yes
+MOUSEKEY_ENABLE    = yes
+NKRO_ENABLE        = yes
+SPACE_CADET_ENABLE = no
+TAP_DANCE_ENABLE   = yes
+UNICODEMAP_ENABLE  = yes
+VISUALIZER_ENABLE  = no

+ 6 - 0
users/konstantin/config.h

@@ -13,6 +13,12 @@
 #define NO_ACTION_MACRO
 #define NO_ACTION_ONESHOT
 
+#undef  RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+
 #define PERMISSIVE_HOLD
 #define TAPPING_TERM        200
 #define TAPPING_TOGGLE      2

+ 32 - 20
users/konstantin/konstantin.c

@@ -32,26 +32,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     }
 
     switch (keycode) {
-    case CLEAR:
-        if (record->event.pressed) {
-            SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
-        }
-        return false;
-
-    case DST_P_R:
-        (record->event.pressed ? register_code16 : unregister_code16)(
-            (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV
-        );
-        return false;
-
-    case DST_N_A:
-        (record->event.pressed ? register_code16 : unregister_code16)(
-            (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT
-        );
-        return false;
-
+        uint16_t kc;
 #ifdef LAYER_FN
-        static bool fn_lock;
+        static bool fn_lock = false;
 
     case FN_FNLK:
         if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
@@ -77,6 +60,28 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
         }
         return true;
 
+    case CLEAR:
+        if (record->event.pressed) {
+            CLEAN_MODS(
+                SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+            )
+        }
+        return false;
+
+    case DST_P_R:
+        kc = (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV;
+        CLEAN_MODS(
+            (record->event.pressed ? register_code16 : unregister_code16)(kc);
+        )
+        return false;
+
+    case DST_N_A:
+        kc = (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT;
+        CLEAN_MODS(
+            (record->event.pressed ? register_code16 : unregister_code16)(kc);
+        )
+        return false;
+
     default:
         return true;
     }
@@ -91,7 +96,7 @@ uint32_t layer_state_set_user(uint32_t state) {
     state = layer_state_set_keymap(state);
 
 #ifdef LAYER_NUMPAD
-    bool numpad = state & 1UL<<L_NUMPAD;
+    bool numpad = IS_LAYER_ON_STATE(state, L_NUMPAD);
     bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
     if (numpad != num_lock) {
         tap_code(KC_NLCK);  // Toggle Num Lock to match Numpad layer state
@@ -100,3 +105,10 @@ uint32_t layer_state_set_user(uint32_t state) {
 
     return state;
 }
+
+__attribute__((weak))
+void led_set_keymap(uint8_t usb_led) {}
+
+void led_set_user(uint8_t usb_led) {
+    led_set_keymap(usb_led);
+}

+ 12 - 10
users/konstantin/konstantin.h

@@ -47,15 +47,16 @@
 
 #define LCT_CPS LCTL_T(KC_CAPS)
 
-#ifdef SEND_STRING_CLEAN
-    #undef  SEND_STRING
-    #define SEND_STRING(string) {         \
-            uint8_t ss_mods = get_mods(); \
-            clear_mods();                 \
-            send_string_P(PSTR(string));  \
-            set_mods(ss_mods);            \
-        }
-#endif
+#define IS_LAYER_ON_STATE(state, layer)  ( (state) & (1UL << (layer)))
+#define IS_LAYER_OFF_STATE(state, layer) (~(state) & (1UL << (layer)))
+
+// Clear mods, perform action, restore mods
+#define CLEAN_MODS(action) {       \
+        uint8_t mods = get_mods(); \
+        clear_mods();              \
+        action;                    \
+        set_mods(mods);            \
+    }
 
 enum keycodes_user {
     CLEAR = SAFE_RANGE,
@@ -81,5 +82,6 @@ void keyboard_pre_init_keymap(void);
 void eeconfig_init_keymap(void);
 void keyboard_post_init_keymap(void);
 
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+bool     process_record_keymap(uint16_t keycode, keyrecord_t *record);
 uint32_t layer_state_set_keymap(uint32_t state);
+void     led_set_keymap(uint8_t usb_led);

+ 4 - 3
users/konstantin/rgb.c

@@ -20,6 +20,7 @@ const uint8_t PROGMEM RGBLED_SNAKE_INTERVALS[] = { 20, 50, 100 };
 const uint8_t PROGMEM RGBLED_KNIGHT_INTERVALS[] = { 20, 50, 100 };
 #endif
 
-const HSV GODSPEED_BLUE    = { .h = 198, .s = 68,  .v = 255 };
-const HSV GODSPEED_YELLOW  = { .h = 27,  .s = 153, .v = 255 };
-const HSV MODERN_DOLCH_RED = { .h = 252, .s = 255, .v = 144 };
+const HSV godspeed_blue     = { GODSPEED_BLUE };
+const HSV godspeed_yellow   = { GODSPEED_YELLOW };
+const HSV modern_dolch_cyan = { MODERN_DOLCH_CYAN };
+const HSV modern_dolch_red  = { MODERN_DOLCH_RED };

+ 9 - 3
users/konstantin/rgb.h

@@ -2,6 +2,12 @@
 
 #include "quantum.h"
 
-extern const HSV GODSPEED_BLUE;
-extern const HSV GODSPEED_YELLOW;
-extern const HSV MODERN_DOLCH_RED;
+#define GODSPEED_BLUE     198, 68,  255
+#define GODSPEED_YELLOW   27,  153, 255
+#define MODERN_DOLCH_CYAN 110, 255, 108
+#define MODERN_DOLCH_RED  251, 255, 108
+
+extern const HSV godspeed_blue;
+extern const HSV godspeed_yellow;
+extern const HSV modern_dolch_cyan;
+extern const HSV modern_dolch_red;

+ 1 - 1
users/konstantin/tap_dance.c

@@ -107,12 +107,12 @@ void td_layer_mod_reset(qk_tap_dance_state_t *state, void *user_data) {
 qk_tap_dance_action_t tap_dance_actions[] = {
     [TD_DST_A_R] = ACTION_TAP_DANCE_DOUBLE(DST_ADD, DST_REM),
 
-    [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_LALT),
     [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI),
     [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT),
     [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RSFT, KC_RCTL),
 
     [TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN),
     [TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN),
+
     [TD_FN_RCTL] = ACTION_TAP_DANCE_LAYER_MOD(L_FN, KC_RCTL),
 };

+ 2 - 2
users/konstantin/tap_dance.h

@@ -4,24 +4,24 @@
 
 #define DST_A_R TD(TD_DST_A_R)
 
-#define RAL_LAL TD(TD_RAL_LAL)
 #define RAL_RGU TD(TD_RAL_RGU)
 #define RCT_RSF TD(TD_RCT_RSF)
 #define RSF_RCT TD(TD_RSF_RCT)
 
 #define LSFT_FN TD(TD_LSFT_FN)
 #define RCTL_FN TD(TD_RCTL_FN)
+
 #define FN_RCTL TD(TD_FN_RCTL)
 
 enum tap_dance {
     TD_DST_A_R,
 
-    TD_RAL_LAL,
     TD_RAL_RGU,
     TD_RCT_RSF,
     TD_RSF_RCT,
 
     TD_LSFT_FN,
     TD_RCTL_FN,
+
     TD_FN_RCTL,
 };