diff Macro/PartialMap/macro.c @ 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 9f62492034c7
children 708af1b9bc55
line wrap: on
line diff
--- 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];