From b533b0ebe34fb7675565a3989f90b52a210b36a8 Mon Sep 17 00:00:00 2001 From: H3lli0n Date: Sun, 20 Oct 2024 11:33:45 +0200 Subject: [PATCH] feat: custom keycode and saved settings for indicator --- keyboards/hlb/poorkoi/keymaps/vial/keymap.c | 9 +-- keyboards/hlb/poorkoi/keymaps/vial/vial.json | 6 ++ keyboards/hlb/poorkoi/poorkoi.c | 66 +++++++++++++++++--- keyboards/hlb/poorkoi/poorkoi.h | 4 ++ 4 files changed, 70 insertions(+), 15 deletions(-) diff --git a/keyboards/hlb/poorkoi/keymaps/vial/keymap.c b/keyboards/hlb/poorkoi/keymaps/vial/keymap.c index 8f587e5d7e..be20b83fe2 100644 --- a/keyboards/hlb/poorkoi/keymaps/vial/keymap.c +++ b/keyboards/hlb/poorkoi/keymaps/vial/keymap.c @@ -15,14 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include QMK_KEYBOARD_H - -enum layers { - _BASE = 0, - _FN, - _MEDIA, - _GAME, - _MAC, -}; +#include "poorkoi.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // main layer diff --git a/keyboards/hlb/poorkoi/keymaps/vial/vial.json b/keyboards/hlb/poorkoi/keymaps/vial/vial.json index 406a10ae6c..c6b5882744 100644 --- a/keyboards/hlb/poorkoi/keymaps/vial/vial.json +++ b/keyboards/hlb/poorkoi/keymaps/vial/vial.json @@ -1,6 +1,12 @@ { "name": "PoorKoi", "lighting": "qmk_rgblight", + "customKeycodes": [ + {"name": "LAY_INDIC_RGB", + "title": "Layer indicator on capslock LED", + "shortName": "L_INDIC" + } + ], "matrix": { "rows": 5, "cols": 14 diff --git a/keyboards/hlb/poorkoi/poorkoi.c b/keyboards/hlb/poorkoi/poorkoi.c index 4cdb695839..cdb789813e 100644 --- a/keyboards/hlb/poorkoi/poorkoi.c +++ b/keyboards/hlb/poorkoi/poorkoi.c @@ -16,11 +16,43 @@ along with this program. If not, see . */ #include "poorkoi.h" +typedef union { + uint32_t raw; + struct { + bool rgb_layer_change :1; + }; +} user_config_t; + +/* User preference */ +user_config_t user_config; + +void eeconfig_init_user(void) { // EEPROM is getting reset! + user_config.raw = 0; + user_config.rgb_layer_change = false; // We want this enabled by default + eeconfig_update_user(user_config.raw); // Write default value to EEPROM now + + // use the non noeeprom versions, to write these values to EEPROM too + rgblight_enable(); // Enable RGB by default + rgblight_sethsv(HSV_PURPLE); // Set it to PURPLE by default + rgblight_mode(1); // set to solid by default +} + void keyboard_pre_init_kb(void) { rgblight_set_effect_range(0, 16); keyboard_pre_init_user(); } +void keyboard_post_init_user(void) { + // Read the user config from EEPROM + user_config.raw = eeconfig_read_user(); + + // Set default layer, if enabled + if (user_config.rgb_layer_change) { + rgblight_enable_noeeprom(); + rgblight_sethsv_at(HSV_OFF, 16); + } +} + /* Updating LED located under capslock */ bool led_update_kb(led_t led_state) { bool res = led_update_user(led_state); @@ -30,14 +62,16 @@ bool led_update_kb(led_t led_state) { if(led_state.caps_lock) { rgblight_sethsv_at(CAPS_LOCK_COLOR, 16); } + // Color of activated layer else{ - rgblight_sethsv_at(HSV_OFF, 16); + layer_state_set(layer_state); } } return res; } +/* Use capslock led for layer indicator */ layer_state_t layer_state_set_user(layer_state_t state) { switch (get_highest_layer(state)) { case _BASE: @@ -45,24 +79,42 @@ layer_state_t layer_state_set_user(layer_state_t state) { rgblight_sethsv_at(CAPS_LOCK_COLOR, 16); } else{ - rgblight_sethsv_at(HSV_OFF, 16); + if (user_config.rgb_layer_change) { rgblight_sethsv_at(HSV_OFF, 16);} } break; case _FN: - rgblight_sethsv_at(LAYER_FN_COLOR, 16); + if (user_config.rgb_layer_change) { rgblight_sethsv_at(LAYER_FN_COLOR, 16); } break; case _MEDIA: - rgblight_sethsv_at(LAYER_MEDIA_COLOR, 16); + if (user_config.rgb_layer_change) { rgblight_sethsv_at(LAYER_MEDIA_COLOR, 16); } break; case _GAME: - rgblight_sethsv_at(LAYER_GAMING_COLOR, 16); + if (user_config.rgb_layer_change) { rgblight_sethsv_at(LAYER_GAMING_COLOR, 16); } break; case _MAC: - rgblight_sethsv_at(LAYER_MAC_COLOR, 16); + if (user_config.rgb_layer_change) { rgblight_sethsv_at(LAYER_MAC_COLOR, 16); } break; default: // for any other layers, or the default layer rgblight_sethsv_at(HSV_OFF, 16); break; } - return state; + + return state; +} + +/* Update user preference on layer indicator*/ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LAY_INDIC_RGB: + if (record->event.pressed) { + user_config.rgb_layer_change ^= 1; // Toggles the status + eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM + if (user_config.rgb_layer_change) { // if layer state indication is enabled, + layer_state_set(layer_state); // then immediately update the layer color + } + } + return false; // Skip all further processing of this key + default: + return true; // Process all other keycodes normally + } } diff --git a/keyboards/hlb/poorkoi/poorkoi.h b/keyboards/hlb/poorkoi/poorkoi.h index 072ed8f9f7..fee1d5c381 100644 --- a/keyboards/hlb/poorkoi/poorkoi.h +++ b/keyboards/hlb/poorkoi/poorkoi.h @@ -33,3 +33,7 @@ enum layers { _GAME, _MAC, }; + +enum hlbKeycodes { + LAY_INDIC_RGB = QK_KB_0, +};