diff --git a/src/Kaleidoscope/EEPROM-Keymap-Focus.h b/src/Kaleidoscope/EEPROM-Keymap-Focus.h index 23bfb61f..931be0ff 100644 --- a/src/Kaleidoscope/EEPROM-Keymap-Focus.h +++ b/src/Kaleidoscope/EEPROM-Keymap-Focus.h @@ -23,5 +23,8 @@ #define FOCUS_HOOK_KEYMAP FOCUS_HOOK(EEPROMKeymap.focusKeymap, "keymap.map") +#define FOCUS_HOOK_KEYMAP_LAYER FOCUS_HOOK(EEPROMKeymap.focusKeymapLayer, \ + "keymap.layer") + #define FOCUS_HOOK_KEYMAP_TRANSFER FOCUS_HOOK(EEPROMKeymap.focusKeymapTransfer, \ "keymap.transfer") diff --git a/src/Kaleidoscope/EEPROM-Keymap.cpp b/src/Kaleidoscope/EEPROM-Keymap.cpp index e9a9de8d..af6d5507 100644 --- a/src/Kaleidoscope/EEPROM-Keymap.cpp +++ b/src/Kaleidoscope/EEPROM-Keymap.cpp @@ -107,6 +107,22 @@ bool EEPROMKeymap::focusKeymap(const char *command) { return true; } +bool EEPROMKeymap::focusKeymapLayer(const char *command) { + if (strcmp_P(command, PSTR("keymap.layer")) != 0) { + return false; + } + + uint8_t layer = Serial.parseInt(); + uint16_t keysPerLayer = ROWS * COLS; + uint16_t offset = layer * keysPerLayer; + for (uint16_t k = 0; (k < keysPerLayer) && (Serial.peek() != '\n'); k++) { + updateKey(layer + k, parseKey()); + } + + return true; + +} + bool EEPROMKeymap::focusKeymapTransfer(const char *command) { if (strcmp_P(command, PSTR("keymap.transfer")) != 0) return false; diff --git a/src/Kaleidoscope/EEPROM-Keymap.h b/src/Kaleidoscope/EEPROM-Keymap.h index b1e7de81..66c89620 100644 --- a/src/Kaleidoscope/EEPROM-Keymap.h +++ b/src/Kaleidoscope/EEPROM-Keymap.h @@ -36,6 +36,7 @@ class EEPROMKeymap : public KaleidoscopePlugin { static Key getKeyOverride(uint8_t layer, byte row, byte col); static bool focusKeymap(const char *command); + static bool focusKeymapLayer(const char *command); static bool focusKeymapTransfer(const char *command); static void updateKey(uint16_t base_pos, Key key);