Преглед на файлове

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
simple
Jacob Alexander преди 10 години
родител
ревизия
f7bacebb26
променени са 2 файла, в които са добавени 46 реда и са изтрити 17 реда
  1. 24
    12
      Macro/PartialMap/generatedKeymap.h
  2. 22
    5
      Macro/PartialMap/macro.c

+ 24
- 12
Macro/PartialMap/generatedKeymap.h Целия файл

// ResultMacro.stateType -> <last key state type> // ResultMacro.stateType -> <last key state type>


typedef struct ResultMacro { typedef struct ResultMacro {
unsigned int *guide;
unsigned int pos;
uint8_t *guide;
unsigned int pos;
uint8_t state; uint8_t state;
uint8_t stateType; uint8_t stateType;
} ResultMacro; } ResultMacro;


// Guide, key element // Guide, key element
#define ResultGuideSize( guidePtr ) sizeof( ResultGuide ) / 4 - 1 + guidePtr->argCount
#define ResultGuideSize( guidePtr ) sizeof( ResultGuide ) - 1 + guidePtr->argCount
typedef struct ResultGuide { 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; } ResultGuide;






// ----- Macros ----- // ----- 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 ) void debugPrint_capability( uint8_t state, uint8_t stateType, uint8_t *args )
{ {
// Display capability name // Display capability name
if ( stateType == 0xFF && state == 0xFF ) if ( stateType == 0xFF && state == 0xFF )
{ {
print("debugPrint");
print("debugPrint(arg)");
return; return;
} }


print( " )" NL ); 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 ) void debugPrint2_capability( uint8_t state, uint8_t stateType, uint8_t *args )
{ {
// Display capability name // Display capability name
if ( stateType == 0xFF && state == 0xFF ) if ( stateType == 0xFF && state == 0xFF )
{ {
print("debugPrint2");
print("debugPrint2(arg1,arg2)");
return; return;
} }


print( " )" NL ); 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 // -- Result Macros


// Define_RM( index ); // Define_RM( index );
// * index - Result Macro index number // * index - Result Macro index number
// Must be used after Guide_RM // 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 } #define Define_RM( index ) { rm##index##_guide, 0, 0, 0 }


Guide_RM( 0 ) = { 1, debugPrint_cap( 0xDA ), 0 }; Guide_RM( 0 ) = { 1, debugPrint_cap( 0xDA ), 0 };
Guide_TM( 0 ) = { 1, 0x10, 0x01, 0x73, 0 }; Guide_TM( 0 ) = { 1, 0x10, 0x01, 0x73, 0 };
Guide_TM( 1 ) = { 1, 0x0F, 0x01, 0x73, 1, 0x00, 0x01, 0x75, 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( 2 ) = { 2, 0xF0, 0x01, 0x73, 0x00, 0x01, 0x74, 0 };
Guide_TM( 3 ) = { 1, 0x10, 0x01, 0x76, 0 };


// Total number of trigger macros (tm's) // Total number of trigger macros (tm's)
// Used to create pending tm's table // Used to create pending tm's table
Define_TM( 0, 0 ), Define_TM( 0, 0 ),
Define_TM( 1, 1 ), Define_TM( 1, 1 ),
Define_TM( 2, 2 ), Define_TM( 2, 2 ),
Define_TM( 3, 3 ),
}; };




Define_TL( default, 0x73 ) = { 3, tm(0), tm(1), tm(2) }; Define_TL( default, 0x73 ) = { 3, tm(0), tm(1), tm(2) };
Define_TL( default, 0x74 ) = { 1, tm(2) }; Define_TL( default, 0x74 ) = { 1, tm(2) };
Define_TL( default, 0x75 ) = { 1, tm(1) }; 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, 0x77 ) = { 0 };
Define_TL( default, 0x78 ) = { 0 }; Define_TL( default, 0x78 ) = { 0 };
Define_TL( default, 0x79 ) = { 0 }; Define_TL( default, 0x79 ) = { 0 };

+ 22
- 5
Macro/PartialMap/macro.c Целия файл



void cliFunc_capList( char* args ) 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 ) void cliFunc_capSelect( char* args )
// Assign TriggerGuide element (key type, state and scancode) // Assign TriggerGuide element (key type, state and scancode)
ResultGuide *guide = (ResultGuide*)(&macro->guide[ pos ]); ResultGuide *guide = (ResultGuide*)(&macro->guide[ pos ]);


// Display Function Index
printHex( guide->index );
print("|");

// Display Function Ptr Address // Display Function Ptr Address
printHex( (unsigned int)guide->function );
printHex( (unsigned int)CapabilitiesList[ guide->index ] );
print("|"); print("|");


// Display/Lookup Capability Name (utilize debug mode of capability) // 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 ); capability( 0xFF, 0xFF, 0 );


// Display Argument(s) // Display Argument(s)
print("("); print("(");
for ( unsigned int arg = 0; arg < guide->argCount; arg++ ) 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 // Only show arg separator if there are args left
if ( arg + 1 < guide->argCount ) if ( arg + 1 < guide->argCount )