|
|
@@ -98,6 +98,83 @@ inline void Scan_finishedWithOutput( uint8_t sentKeys ) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ----- Capabilities ----- |
|
|
|
|
|
|
|
// Custom capability examples |
|
|
|
// Refer to kll.h in Macros/PartialMap for state and stateType information |
|
|
|
void CustomAction_action1_capability( uint8_t state, uint8_t stateType, uint8_t *args ) |
|
|
|
{ |
|
|
|
// Display capability name |
|
|
|
// XXX This is required for debug cli to give you a list of capabilities |
|
|
|
if ( stateType == 0xFF && state == 0xFF ) |
|
|
|
{ |
|
|
|
print("CustomAction_action1_capability()"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Prints Action1 info message to the debug cli |
|
|
|
info_print("Action1"); |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t CustomAction_blockHold_storage = 0; |
|
|
|
void CustomAction_blockHold_capability( uint8_t state, uint8_t stateType, uint8_t *args ) |
|
|
|
{ |
|
|
|
// Display capability name |
|
|
|
if ( stateType == 0xFF && state == 0xFF ) |
|
|
|
{ |
|
|
|
print("CustomAction_blockHold_capability(usbCode)"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Retrieve 8-bit argument |
|
|
|
uint8_t key = args[0]; |
|
|
|
|
|
|
|
// We only care about normal keys |
|
|
|
if ( stateType == 0x00 ) |
|
|
|
{ |
|
|
|
// Block given key if we're in the "Press" or "Hold" state |
|
|
|
if ( ( state == 0x01 || state == 0x02 ) |
|
|
|
&& CustomAction_blockHold_storage == 0 ) |
|
|
|
{ |
|
|
|
CustomAction_blockHold_storage = key; |
|
|
|
info_msg("Blocking Key: "); |
|
|
|
printHex( key ); |
|
|
|
print( NL ); |
|
|
|
} |
|
|
|
// Release if in the "Off" or "Release" state and we're blocking |
|
|
|
else if ( ( state == 0x00 || state == 0x03 ) |
|
|
|
&& key == CustomAction_blockHold_storage ) |
|
|
|
{ |
|
|
|
info_msg("Unblocking Key: "); |
|
|
|
printHex( CustomAction_blockHold_storage ); |
|
|
|
print( NL ); |
|
|
|
CustomAction_blockHold_storage = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void CustomAction_blockKey_capability( uint8_t state, uint8_t stateType, uint8_t *args ) |
|
|
|
{ |
|
|
|
// Display capability name |
|
|
|
if ( stateType == 0xFF && state == 0xFF ) |
|
|
|
{ |
|
|
|
print("CustomAction_blockKey_capability(usbCode)"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Retrieve 8-bit argument |
|
|
|
uint8_t key = args[0]; |
|
|
|
|
|
|
|
// If key is not blocked, process |
|
|
|
if ( key != CustomAction_blockHold_storage ) |
|
|
|
{ |
|
|
|
Output_usbCodeSend_capability( state, stateType, &key ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ----- CLI Command Functions ----- |
|
|
|
|
|
|
|
// XXX Just an example command showing how to parse arguments (more complex than generally needed) |