// 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;
// ----- 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;
}
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;
}
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
// 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 };
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
Define_TM( 0, 0 ),
Define_TM( 1, 1 ),
Define_TM( 2, 2 ),
+ Define_TM( 3, 3 ),
};
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 };
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 )
// Assign TriggerGuide element (key type, state and scancode)
ResultGuide *guide = (ResultGuide*)(¯o->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 )