diff --git a/Macro/PartialMap/generatedKeymap.h b/Macro/PartialMap/generatedKeymap.h index 7455c4f..bb19193 100644 --- a/Macro/PartialMap/generatedKeymap.h +++ b/Macro/PartialMap/generatedKeymap.h @@ -249,7 +249,7 @@ TriggerMacro TriggerMacroList[] = { Define_TM( 6, 1 ), Define_TM( 7, 2 ), Define_TM( 8, 0 ), - Define_TM( 9, 0 ), // TODO + Define_TM( 9, 0 ), Define_TM( 10, 4 ), }; @@ -308,9 +308,9 @@ Define_TL( default, 0x1C ) = { 0 }; Define_TL( default, 0x1D ) = { 0 }; Define_TL( default, 0x1E ) = { 0 }; Define_TL( default, 0x1F ) = { 0 }; -Define_TL( default, 0x20 ) = { 1, 8 }; +Define_TL( default, 0x20 ) = { 2, 8, 9 }; Define_TL( default, 0x21 ) = { 1, 8 }; -Define_TL( default, 0x22 ) = { 0 }; +Define_TL( default, 0x22 ) = { 1, 9 }; Define_TL( default, 0x23 ) = { 0 }; Define_TL( default, 0x24 ) = { 0 }; Define_TL( default, 0x25 ) = { 0 }; diff --git a/Macro/PartialMap/macro.c b/Macro/PartialMap/macro.c index 3e31bb3..7144684 100644 --- a/Macro/PartialMap/macro.c +++ b/Macro/PartialMap/macro.c @@ -56,12 +56,13 @@ void cliFunc_macroStep ( char* args ); // Bit positions are important, passes (correct key) always trump incorrect key votes typedef enum TriggerMacroVote { - TriggerMacroVote_Release = 0x8, // Correct key - TriggerMacroVote_PassRelease = 0xC, // Correct key (both pass and release) - TriggerMacroVote_Pass = 0x4, // Correct key - TriggerMacroVote_DoNothing = 0x2, // Incorrect key - TriggerMacroVote_Fail = 0x1, // Incorrect key - TriggerMacroVote_Invalid = 0x0, // Invalid state + TriggerMacroVote_Release = 0x10, // Correct key + TriggerMacroVote_PassRelease = 0x18, // Correct key (both pass and release) + TriggerMacroVote_Pass = 0x8, // Correct key + TriggerMacroVote_DoNothingRelease = 0x4, // Incorrect key + TriggerMacroVote_DoNothing = 0x2, // Incorrect key + TriggerMacroVote_Fail = 0x1, // Incorrect key + TriggerMacroVote_Invalid = 0x0, // Invalid state } TriggerMacroVote; typedef enum TriggerMacroEval { @@ -450,10 +451,13 @@ inline TriggerMacroVote Macro_evalLongTriggerMacroVote( TriggerGuide *key, Trigg case 0x01: return TriggerMacroVote_Fail; - // Wrong key, held or released, do not pass (no effect) + // Wrong key, held, do not pass (no effect) case 0x02: - case 0x03: return TriggerMacroVote_DoNothing; + + // Wrong key released, fail out if pos == 0 + case 0x03: + return TriggerMacroVote_DoNothing | TriggerMacroVote_DoNothingRelease; } } @@ -572,6 +576,11 @@ inline TriggerMacroEval Macro_evalTriggerMacro( unsigned int triggerMacroIndex ) overallVote |= vote; } + // If no pass vote was found after scanning the entire combo + // And this is the first position in the combo, just remove it (nothing important happened) + if ( longMacro && overallVote & TriggerMacroVote_DoNothingRelease && pos == 0 ) + overallVote |= TriggerMacroVote_Fail; + // Decide new state of macro after voting // Fail macro, remove from pending list if ( overallVote & TriggerMacroVote_Fail ) @@ -780,22 +789,18 @@ inline void Macro_process() case TriggerMacroEval_DoResult: // Append ResultMacro to PendingList Macro_appendResultMacroToPendingList( &TriggerMacroList[ macroTriggerMacroPendingList[ macro ] ] ); - print("D"); default: macroTriggerMacroPendingList[ macroTriggerMacroPendingListTail++ ] = macroTriggerMacroPendingList[ macro ]; - print("A"); break; // Trigger Result Macro and Remove (purposely falling through) case TriggerMacroEval_DoResultAndRemove: // Append ResultMacro to PendingList Macro_appendResultMacroToPendingList( &TriggerMacroList[ macroTriggerMacroPendingList[ macro ] ] ); - print("&"); // Remove Macro from Pending List, nothing to do, removing by default case TriggerMacroEval_Remove: - print("R"); break; } }