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];