# HG changeset patch # User Jacob Alexander # Date 1415868542 28800 # Node ID e79f2b9c39cf3485006ed570d804cb4ca71d7c96 # Parent 627bacaeb1eac1db5a7afcca555e16c7c141fb22 Fixing layer latch capability. Latch now activates on key release, and deactivates on next key release. diff -r 627bacaeb1ea -r e79f2b9c39cf CMakeLists.txt --- a/CMakeLists.txt Wed Nov 12 23:33:28 2014 -0800 +++ b/CMakeLists.txt Thu Nov 13 00:49:02 2014 -0800 @@ -97,9 +97,8 @@ ##| 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 -r 627bacaeb1ea -r e79f2b9c39cf Macro/PartialMap/macro.c --- a/Macro/PartialMap/macro.c Wed Nov 12 23:33:28 2014 -0800 +++ b/Macro/PartialMap/macro.c Thu Nov 13 00:49:02 2014 -0800 @@ -246,8 +246,7 @@ // 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 @@ // 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 @@ // 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 @@ 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];