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,
+};