changeset 344:f04450004adf

Adding layerDebug cli command - Useful when trying to report layer stacking bugs - Or at least getting unconfused about what's happening with the layers
author Jacob Alexander <haata@kiibohd.com>
date Fri, 19 Jun 2015 20:14:37 -0700
parents e464aaa4730f
children 2bcf6800b851
files Macro/PartialMap/macro.c
diffstat 1 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/Macro/PartialMap/macro.c	Fri Jun 19 01:50:56 2015 -0700
+++ b/Macro/PartialMap/macro.c	Fri Jun 19 20:14:37 2015 -0700
@@ -41,6 +41,7 @@
 void cliFunc_keyHold   ( char* args );
 void cliFunc_keyPress  ( char* args );
 void cliFunc_keyRelease( char* args );
+void cliFunc_layerDebug( char* args );
 void cliFunc_layerList ( char* args );
 void cliFunc_layerState( char* args );
 void cliFunc_macroDebug( char* args );
@@ -86,6 +87,7 @@
 CLIDict_Entry( keyHold,     "Send key-hold events to the macro module. Duplicates have undefined behaviour." NL "\t\t\033[35mS10\033[0m Scancode 0x0A" );
 CLIDict_Entry( keyPress,    "Send key-press events to the macro module. Duplicates have undefined behaviour." NL "\t\t\033[35mS10\033[0m Scancode 0x0A" );
 CLIDict_Entry( keyRelease,  "Send key-release event to macro module. Duplicates have undefined behaviour." NL "\t\t\033[35mS10\033[0m Scancode 0x0A" );
+CLIDict_Entry( layerDebug,  "Layer debug mode. Shows layer stack and any changes." );
 CLIDict_Entry( layerList,   "List available layers." );
 CLIDict_Entry( layerState,  "Modify specified indexed layer state <layer> <state byte>." NL "\t\t\033[35mL2\033[0m Indexed Layer 0x02" NL "\t\t0 Off, 1 Shift, 2 Latch, 4 Lock States" );
 CLIDict_Entry( macroDebug,  "Disables/Enables sending USB keycodes to the Output Module and prints U/K codes." );
@@ -100,6 +102,7 @@
 	CLIDict_Item( keyHold ),
 	CLIDict_Item( keyPress ),
 	CLIDict_Item( keyRelease ),
+	CLIDict_Item( layerDebug ),
 	CLIDict_Item( layerList ),
 	CLIDict_Item( layerState ),
 	CLIDict_Item( macroDebug ),
@@ -111,6 +114,9 @@
 };
 
 
+// Layer debug flag - If set, displays any changes to layers and the full layer stack on change
+uint8_t layerDebugMode = 0;
+
 // Macro debug flag - If set, clears the USB Buffers after signalling processing completion
 uint8_t macroDebugMode = 0;
 
@@ -204,6 +210,30 @@
 		// Reduce LayerIndexStack size
 		macroLayerIndexStackSize--;
 	}
+
+	// Layer Debug Mode
+	if ( layerDebugMode )
+	{
+		dbug_msg("Layer ");
+
+		// Iterate over each of the layers displaying the state as a hex value
+		for ( uint16_t index = 0; index < LayerNum; index++ )
+		{
+			printHex_op( LayerState[ index ], 0 );
+		}
+
+		// Always show the default layer (it's always 0)
+		print(" 0");
+
+		// Iterate over the layer stack starting from the bottom of the stack
+		for ( uint16_t index = 0; index < macroLayerIndexStackSize; index++ )
+		{
+			print(":");
+			printHex_op( macroLayerIndexStack[ index ], 0 );
+		}
+
+		print( NL );
+	}
 }
 
 // Modifies the specified Layer control byte
@@ -1204,6 +1234,16 @@
 	}
 }
 
+void cliFunc_layerDebug( char *args )
+{
+	// Toggle layer debug mode
+	layerDebugMode = layerDebugMode ? 0 : 1;
+
+	print( NL );
+	info_msg("Layer Debug Mode: ");
+	printInt8( layerDebugMode );
+}
+
 void cliFunc_layerList( char* args )
 {
 	print( NL );