Mercurial > louis > kiibohd-controller
changeset 253:e79f2b9c39cf
Fixing layer latch capability.
Latch now activates on key release, and deactivates on next key release.
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Thu, 13 Nov 2014 00:49:02 -0800 |
parents | 627bacaeb1ea |
children | 45cb81040110 |
files | CMakeLists.txt Macro/PartialMap/macro.c |
diffstat | 2 files changed, 11 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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 ""
--- 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];