diff options
Diffstat (limited to 'quantum/process_keycode/process_combo.h')
| -rw-r--r-- | quantum/process_keycode/process_combo.h | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h index e51a2f1f4..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,15 +61,18 @@ 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 matrix_scan_combo(void); | 75 | void combo_task(void); |
| 58 | void process_combo_event(uint16_t combo_index, bool pressed); | 76 | void process_combo_event(uint16_t combo_index, bool pressed); |
| 59 | 77 | ||
| 60 | void combo_enable(void); | 78 | void combo_enable(void); |
