From f75e9423b5d92334ecdbb7afd111f89848291cd3 Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Thu, 13 Nov 2014 00:49:02 -0800 Subject: [PATCH] Fixing layer latch capability. Latch now activates on key release, and deactivates on next key release. --- CMakeLists.txt | 3 +-- Macro/PartialMap/macro.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0b6f30..346602d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,9 +97,8 @@ set( BaseMap "defaultMap" ##| Layer additonal .kll maps on the BaseMap, layers are in order from 1st to nth ##| Can be set to "" -set( DefaultMap "stdFuncMap" +set( DefaultMap "md1Overlay stdFuncMap" CACHE STRING "KLL DefaultMap" ) -#set( DefaultMap "colemak stdFuncMap" CACHE ) ##| ParitalMaps available on top of the BaseMap. See above for syntax on specifying multiple layers vs. layering ##| Can be set to "" diff --git a/Macro/PartialMap/macro.c b/Macro/PartialMap/macro.c index 9119837..eaaeac6 100644 --- a/Macro/PartialMap/macro.c +++ b/Macro/PartialMap/macro.c @@ -246,8 +246,7 @@ void Macro_layerLatch_capability( uint8_t state, uint8_t stateType, uint8_t *arg // Only use capability on press // TODO Analog - // XXX To make sense, this code be on press or release. Or it could even be a sticky shift (why? dunno) -HaaTa - if ( stateType == 0x00 && state != 0x01 ) // All normal key conditions except press + if ( stateType == 0x00 && state != 0x03 ) // Only on release return; // Get layer index from arguments @@ -312,7 +311,7 @@ void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *arg // Looks up the trigger list for the given scan code (from the active layer) // NOTE: Calling function must handle the NULL pointer case -nat_ptr_t *Macro_layerLookup( uint8_t scanCode ) +nat_ptr_t *Macro_layerLookup( uint8_t scanCode, uint8_t latch_expire ) { // If no trigger macro is defined at the given layer, fallthrough to the next layer for ( uint16_t layerIndex = 0; layerIndex < macroLayerIndexStackSize; layerIndex++ ) @@ -322,10 +321,10 @@ nat_ptr_t *Macro_layerLookup( uint8_t scanCode ) // Check if latch has been pressed for this layer // XXX Regardless of whether a key is found, the latch is removed on first lookup - uint8_t latch = LayerState[ layerIndex ] & 0x02; - if ( latch ) + uint8_t latch = LayerState[ macroLayerIndexStack[ layerIndex ] ] & 0x02; + if ( latch && latch_expire ) { - LayerState[ layerIndex ] &= ~0x02; + Macro_layerState( 0, 0, macroLayerIndexStack[ layerIndex ], 0x02 ); } // Only use layer, if state is valid @@ -832,8 +831,12 @@ inline void Macro_updateTriggerMacroPendingList() if ( macroTriggerListBuffer[ key ].state == 0x00 && macroTriggerListBuffer[ key ].state != 0x01 ) continue; + // TODO Analog + // If this is a release case, indicate to layer lookup for possible latch expiry + uint8_t latch_expire = macroTriggerListBuffer[ key ].state == 0x03; + // Lookup Trigger List - nat_ptr_t *triggerList = Macro_layerLookup( macroTriggerListBuffer[ key ].scanCode ); + nat_ptr_t *triggerList = Macro_layerLookup( macroTriggerListBuffer[ key ].scanCode, latch_expire ); // Number of Triggers in list nat_ptr_t triggerListSize = triggerList[0];