changeset 180:ed56f7873645

Added capabilities list debug option - Changed macro/capabilities data structure to index capabilities rather than specify function pointers - Used an 8 bit array, this reduced the max number of capabities to 255 * Shouldn't be an issue, but this can be addressed if the limit is hit...unlikely though
author Jacob Alexander <haata@kiibohd.com>
date Thu, 24 Jul 2014 23:18:38 -0700
parents e5cf79b516e4
children 80a44dcdafaf
files Macro/PartialMap/generatedKeymap.h Macro/PartialMap/macro.c
diffstat 2 files changed, 46 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/Macro/PartialMap/generatedKeymap.h	Thu Jul 24 22:22:35 2014 -0700
+++ b/Macro/PartialMap/generatedKeymap.h	Thu Jul 24 23:18:38 2014 -0700
@@ -43,18 +43,18 @@
 // ResultMacro.stateType -> <last key state type>
 
 typedef struct ResultMacro {
-	unsigned int *guide;
-	unsigned int  pos;
+	uint8_t *guide;
+	unsigned int pos;
 	uint8_t  state;
 	uint8_t  stateType;
 } ResultMacro;
 
 // Guide, key element
-#define ResultGuideSize( guidePtr ) sizeof( ResultGuide ) / 4 - 1 + guidePtr->argCount
+#define ResultGuideSize( guidePtr ) sizeof( ResultGuide ) - 1 + guidePtr->argCount
 typedef struct ResultGuide {
-	void         *function;
-	unsigned int  argCount;
-	unsigned int *args;
+	uint8_t index;
+	uint8_t argCount;
+	uint8_t args; // This is used as an array pointer (but for packing purposes, must be 8 bit)
 } ResultGuide;
 
 
@@ -99,13 +99,13 @@
 
 // ----- Macros -----
 
-#define debugPrint_cap( arg ) (unsigned int) debugPrint_capability, 1, arg
+#define debugPrint_cap( arg ) 0, 1, arg
 void debugPrint_capability( uint8_t state, uint8_t stateType, uint8_t *args )
 {
 	// Display capability name
 	if ( stateType == 0xFF && state == 0xFF )
 	{
-		print("debugPrint");
+		print("debugPrint(arg)");
 		return;
 	}
 
@@ -119,13 +119,13 @@
 	print( " )" NL );
 }
 
-#define debugPrint2_cap( arg1, arg2 ) (unsigned int) debugPrint2_capability, 2, arg1, arg2
+#define debugPrint2_cap( arg1, arg2 ) 1, 2, arg1, arg2
 void debugPrint2_capability( uint8_t state, uint8_t stateType, uint8_t *args )
 {
 	// Display capability name
 	if ( stateType == 0xFF && state == 0xFF )
 	{
-		print("debugPrint2");
+		print("debugPrint2(arg1,arg2)");
 		return;
 	}
 
@@ -141,6 +141,16 @@
 	print( " )" NL );
 }
 
+// Total Number of Capabilities
+#define CapabilitiesNum sizeof( CapabilitiesList ) / 4
+
+// Indexed Capabilities Table
+// TODO Should be moved to the Scan Module
+void *CapabilitiesList[] = {
+	debugPrint_capability,
+	debugPrint2_capability,
+};
+
 
 // -- Result Macros
 
@@ -151,7 +161,7 @@
 // Define_RM( index );
 //  * index  - Result Macro index number
 //  Must be used after Guide_RM
-#define Guide_RM( index ) static unsigned int rm##index##_guide[]
+#define Guide_RM( index ) static uint8_t rm##index##_guide[]
 #define Define_RM( index ) { rm##index##_guide, 0, 0, 0 }
 
 Guide_RM( 0 ) = { 1, debugPrint_cap( 0xDA ), 0 };
@@ -188,6 +198,7 @@
 Guide_TM( 0 ) = { 1, 0x10, 0x01, 0x73, 0 };
 Guide_TM( 1 ) = { 1, 0x0F, 0x01, 0x73, 1, 0x00, 0x01, 0x75, 0 };
 Guide_TM( 2 ) = { 2, 0xF0, 0x01, 0x73, 0x00, 0x01, 0x74, 0 };
+Guide_TM( 3 ) = { 1, 0x10, 0x01, 0x76, 0 };
 
 // Total number of trigger macros (tm's)
 // Used to create pending tm's table
@@ -198,6 +209,7 @@
 	Define_TM( 0, 0 ),
 	Define_TM( 1, 1 ),
 	Define_TM( 2, 2 ),
+	Define_TM( 3, 3 ),
 };
 
 
@@ -341,7 +353,7 @@
 Define_TL( default, 0x73 ) = { 3, tm(0), tm(1), tm(2) };
 Define_TL( default, 0x74 ) = { 1, tm(2) };
 Define_TL( default, 0x75 ) = { 1, tm(1) };
-Define_TL( default, 0x76 ) = { 0 };
+Define_TL( default, 0x76 ) = { 1, tm(3) };
 Define_TL( default, 0x77 ) = { 0 };
 Define_TL( default, 0x78 ) = { 0 };
 Define_TL( default, 0x79 ) = { 0 };
--- a/Macro/PartialMap/macro.c	Thu Jul 24 22:22:35 2014 -0700
+++ b/Macro/PartialMap/macro.c	Thu Jul 24 23:18:38 2014 -0700
@@ -370,7 +370,20 @@
 
 void cliFunc_capList( char* args )
 {
-	// TODO
+	print( NL );
+	info_msg("Capabilities List");
+
+	// Iterate through all of the capabilities and display them
+	for ( unsigned int cap = 0; cap < CapabilitiesNum; cap++ )
+	{
+		print( NL "\t" );
+		printHex( cap );
+		print(" - ");
+
+		// Display/Lookup Capability Name (utilize debug mode of capability)
+		void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ cap ]);
+		capability( 0xFF, 0xFF, 0 );
+	}
 }
 
 void cliFunc_capSelect( char* args )
@@ -588,20 +601,24 @@
 			// Assign TriggerGuide element (key type, state and scancode)
 			ResultGuide *guide = (ResultGuide*)(&macro->guide[ pos ]);
 
+			// Display Function Index
+			printHex( guide->index );
+			print("|");
+
 			// Display Function Ptr Address
-			printHex( (unsigned int)guide->function );
+			printHex( (unsigned int)CapabilitiesList[ guide->index ] );
 			print("|");
 
 			// Display/Lookup Capability Name (utilize debug mode of capability)
-			void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(guide->function);
+			void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ guide->index ]);
 			capability( 0xFF, 0xFF, 0 );
 
 			// Display Argument(s)
 			print("(");
 			for ( unsigned int arg = 0; arg < guide->argCount; arg++ )
 			{
-				// Arguments are only 8 bit values (guides are 32 bit for function pointers)
-				printHex( (uint8_t)(unsigned int)(&guide->args)[ arg ] );
+				// Arguments are only 8 bit values
+				printHex( (&guide->args)[ arg ] );
 
 				// Only show arg separator if there are args left
 				if ( arg + 1 < guide->argCount )