diff options
| author | Alex Ong <the.onga@gmail.com> | 2019-01-04 19:43:45 +1100 |
|---|---|---|
| committer | Alex Ong <the.onga@gmail.com> | 2019-01-04 19:43:45 +1100 |
| commit | 2bb2977c133646c4e056960e72029270d77cc1eb (patch) | |
| tree | 235d491f992121ac1716c5bf2fafb80983748576 /quantum/process_keycode/process_leader.c | |
| parent | a55c838961c89097ab849ed6cb1f261791e6b9b4 (diff) | |
| parent | 47c91fc7f75ae0a477e55b687aa0fc30da0a283c (diff) | |
| download | qmk_firmware-2bb2977c133646c4e056960e72029270d77cc1eb.tar.gz qmk_firmware-2bb2977c133646c4e056960e72029270d77cc1eb.zip | |
Merge branch 'master' into debounce_refactor
# Conflicts:
# tmk_core/common/keyboard.c
Diffstat (limited to 'quantum/process_keycode/process_leader.c')
| -rw-r--r-- | quantum/process_keycode/process_leader.c | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c index c87ef115a..897e9eabf 100644 --- a/quantum/process_keycode/process_leader.c +++ b/quantum/process_keycode/process_leader.c | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | #ifndef DISABLE_LEADER | 17 | #ifdef LEADER_ENABLE |
| 18 | 18 | ||
| 19 | #include "process_leader.h" | 19 | #include "process_leader.h" |
| 20 | 20 | ||
| @@ -35,25 +35,40 @@ uint16_t leader_time = 0; | |||
| 35 | uint16_t leader_sequence[5] = {0, 0, 0, 0, 0}; | 35 | uint16_t leader_sequence[5] = {0, 0, 0, 0, 0}; |
| 36 | uint8_t leader_sequence_size = 0; | 36 | uint8_t leader_sequence_size = 0; |
| 37 | 37 | ||
| 38 | void qk_leader_start(void) { | ||
| 39 | if (leading) { return; } | ||
| 40 | leader_start(); | ||
| 41 | leading = true; | ||
| 42 | leader_time = timer_read(); | ||
| 43 | leader_sequence_size = 0; | ||
| 44 | leader_sequence[0] = 0; | ||
| 45 | leader_sequence[1] = 0; | ||
| 46 | leader_sequence[2] = 0; | ||
| 47 | leader_sequence[3] = 0; | ||
| 48 | leader_sequence[4] = 0; | ||
| 49 | } | ||
| 50 | |||
| 38 | bool process_leader(uint16_t keycode, keyrecord_t *record) { | 51 | bool process_leader(uint16_t keycode, keyrecord_t *record) { |
| 39 | // Leader key set-up | 52 | // Leader key set-up |
| 40 | if (record->event.pressed) { | 53 | if (record->event.pressed) { |
| 41 | if (!leading && keycode == KC_LEAD) { | 54 | if (leading) { |
| 42 | leader_start(); | 55 | if (timer_elapsed(leader_time) < LEADER_TIMEOUT) { |
| 43 | leading = true; | 56 | #ifndef LEADER_KEY_STRICT_KEY_PROCESSING |
| 44 | leader_time = timer_read(); | 57 | if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { |
| 45 | leader_sequence_size = 0; | 58 | keycode = keycode & 0xFF; |
| 46 | leader_sequence[0] = 0; | 59 | } |
| 47 | leader_sequence[1] = 0; | 60 | #endif // LEADER_KEY_STRICT_KEY_PROCESSING |
| 48 | leader_sequence[2] = 0; | 61 | leader_sequence[leader_sequence_size] = keycode; |
| 49 | leader_sequence[3] = 0; | 62 | leader_sequence_size++; |
| 50 | leader_sequence[4] = 0; | 63 | #ifdef LEADER_PER_KEY_TIMING |
| 51 | return false; | 64 | leader_time = timer_read(); |
| 52 | } | 65 | #endif |
| 53 | if (leading && timer_elapsed(leader_time) < LEADER_TIMEOUT) { | 66 | return false; |
| 54 | leader_sequence[leader_sequence_size] = keycode; | 67 | } |
| 55 | leader_sequence_size++; | 68 | } else { |
| 56 | return false; | 69 | if (keycode == KC_LEAD) { |
| 70 | qk_leader_start(); | ||
| 71 | } | ||
| 57 | } | 72 | } |
| 58 | } | 73 | } |
| 59 | return true; | 74 | return true; |
