diff --git a/src/kaleidoscope/Runtime.cpp b/src/kaleidoscope/Runtime.cpp index 4f45f0c8..380ec63a 100644 --- a/src/kaleidoscope/Runtime.cpp +++ b/src/kaleidoscope/Runtime.cpp @@ -42,11 +42,7 @@ Runtime_::setup(void) { device().setup(); - // Update the keymap cache, so we start with a non-empty state. - Layer.updateActiveLayers(); - for (auto key_addr : KeyAddr::all()) { - Layer.updateLiveCompositeKeymap(key_addr); - } + Layer.setup(); } void diff --git a/src/kaleidoscope/layers.cpp b/src/kaleidoscope/layers.cpp index af283773..48053d42 100644 --- a/src/kaleidoscope/layers.cpp +++ b/src/kaleidoscope/layers.cpp @@ -46,6 +46,17 @@ Key Layer_::live_composite_keymap_[Runtime.device().numKeys()]; uint8_t Layer_::active_layer_keymap_[Runtime.device().numKeys()]; Layer_::GetKeyFunction Layer_::getKey = &Layer_::getKeyFromPROGMEM; +void Layer_::setup() { + // Explicitly set layer 0's state to 1 + bitSet(layer_state_, 0); + + // Update the keymap cache, so we start with a non-empty state. + Layer.updateActiveLayers(); + for (auto key_addr : KeyAddr::all()) { + Layer.updateLiveCompositeKeymap(key_addr); + } +} + void Layer_::handleKeymapKeyswitchEvent(Key keymapEntry, uint8_t keyState) { if (keymapEntry.getKeyCode() >= LAYER_MOVE_OFFSET) { if (keyToggledOn(keyState)) { diff --git a/src/kaleidoscope/layers.h b/src/kaleidoscope/layers.h index 22ceb9cb..9b6175b9 100644 --- a/src/kaleidoscope/layers.h +++ b/src/kaleidoscope/layers.h @@ -51,6 +51,8 @@ class Layer_ { public: Layer_() {} + void setup(); + /* There are two lookup functions, because we have two caches, and different * parts of the firmware will want to use either this or that (or perhaps * both, in rare cases).