From 0f00b4a9a9fa84653a214e09d0b5201537b4d2d1 Mon Sep 17 00:00:00 2001 From: "James N. V. Cash" Date: Wed, 25 Oct 2017 21:17:31 -0400 Subject: [PATCH] Add method to allow upload of keymap for individual layer --- src/Kaleidoscope/EEPROM-Keymap-Focus.h | 3 +++ src/Kaleidoscope/EEPROM-Keymap.cpp | 16 ++++++++++++++++ src/Kaleidoscope/EEPROM-Keymap.h | 1 + 3 files changed, 20 insertions(+) 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);