diff options
Diffstat (limited to 'quantum/process_keycode/process_combo.h')
-rw-r--r-- | quantum/process_keycode/process_combo.h | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h index 9af97588b..43c36d79e 100644 --- a/quantum/process_keycode/process_combo.h +++ b/quantum/process_keycode/process_combo.h | |||
@@ -20,23 +20,38 @@ | |||
20 | #include "quantum.h" | 20 | #include "quantum.h" |
21 | #include <stdint.h> | 21 | #include <stdint.h> |
22 | 22 | ||
23 | #ifdef EXTRA_EXTRA_LONG_COMBOS | 23 | #ifdef EXTRA_SHORT_COMBOS |
24 | # define MAX_COMBO_LENGTH 6 | ||
25 | #elif defined(EXTRA_EXTRA_LONG_COMBOS) | ||
24 | # define MAX_COMBO_LENGTH 32 | 26 | # define MAX_COMBO_LENGTH 32 |
25 | #elif EXTRA_LONG_COMBOS | 27 | #elif defined(EXTRA_LONG_COMBOS) |
26 | # define MAX_COMBO_LENGTH 16 | 28 | # define MAX_COMBO_LENGTH 16 |
27 | #else | 29 | #else |
28 | # define MAX_COMBO_LENGTH 8 | 30 | # define MAX_COMBO_LENGTH 8 |
29 | #endif | 31 | #endif |
30 | 32 | ||
33 | #ifndef COMBO_KEY_BUFFER_LENGTH | ||
34 | # define COMBO_KEY_BUFFER_LENGTH MAX_COMBO_LENGTH | ||
35 | #endif | ||
36 | #ifndef COMBO_BUFFER_LENGTH | ||
37 | # define COMBO_BUFFER_LENGTH 4 | ||
38 | #endif | ||
39 | |||
31 | typedef struct { | 40 | typedef struct { |
32 | const uint16_t *keys; | 41 | const uint16_t *keys; |
33 | uint16_t keycode; | 42 | uint16_t keycode; |
34 | #ifdef EXTRA_EXTRA_LONG_COMBOS | 43 | #ifdef EXTRA_SHORT_COMBOS |
44 | uint8_t state; | ||
45 | #else | ||
46 | bool disabled; | ||
47 | bool active; | ||
48 | # if defined(EXTRA_EXTRA_LONG_COMBOS) | ||
35 | uint32_t state; | 49 | uint32_t state; |
36 | #elif EXTRA_LONG_COMBOS | 50 | # elif defined(EXTRA_LONG_COMBOS) |
37 | uint16_t state; | 51 | uint16_t state; |
38 | #else | 52 | # else |
39 | uint8_t state; | 53 | uint8_t state; |
54 | # endif | ||
40 | #endif | 55 | #endif |
41 | } combo_t; | 56 | } combo_t; |
42 | 57 | ||
@@ -46,12 +61,15 @@ typedef struct { | |||
46 | { .keys = &(ck)[0] } | 61 | { .keys = &(ck)[0] } |
47 | 62 | ||
48 | #define COMBO_END 0 | 63 | #define COMBO_END 0 |
49 | #ifndef COMBO_COUNT | ||
50 | # define COMBO_COUNT 0 | ||
51 | #endif | ||
52 | #ifndef COMBO_TERM | 64 | #ifndef COMBO_TERM |
53 | # define COMBO_TERM TAPPING_TERM | 65 | # define COMBO_TERM 50 |
54 | #endif | 66 | #endif |
67 | #ifndef COMBO_HOLD_TERM | ||
68 | # define COMBO_HOLD_TERM TAPPING_TERM | ||
69 | #endif | ||
70 | |||
71 | /* check if keycode is only modifiers */ | ||
72 | #define KEYCODE_IS_MOD(code) (IS_MOD(code) || (code >= QK_MODS && code <= QK_MODS_MAX && !(code & QK_BASIC_MAX))) | ||
55 | 73 | ||
56 | bool process_combo(uint16_t keycode, keyrecord_t *record); | 74 | bool process_combo(uint16_t keycode, keyrecord_t *record); |
57 | void combo_task(void); | 75 | void combo_task(void); |