Selaa lähdekoodia

All basic macros tested and working!

Tested
------
Single : Single
Single : Combo
Single : Sequence
Combo : Single
Combo : Combo
Combo : Sequence
Sequence : Single
Sequence : Combo
Sequence : Sequence
simple
Jacob Alexander 9 vuotta sitten
vanhempi
commit
b2eaf0c893
2 muutettua tiedostoa jossa 20 lisäystä ja 15 poistoa
  1. 3
    3
      Macro/PartialMap/generatedKeymap.h
  2. 17
    12
      Macro/PartialMap/macro.c

+ 3
- 3
Macro/PartialMap/generatedKeymap.h Näytä tiedosto

@@ -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 };

+ 17
- 12
Macro/PartialMap/macro.c Näytä tiedosto

@@ -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;
}
}