diff options
author | Okke Formsma <okke@formsma.nl> | 2021-02-04 13:50:13 +0100 |
---|---|---|
committer | Pete Johanson <peter@peterjohanson.com> | 2021-02-24 07:24:27 -0500 |
commit | abc60fc7cb5c145bff9029a1aadd73c5adbf4a7b (patch) | |
tree | 9072131e78bc83e1f38d4fecc68328da4da58ab1 /app/src/behaviors/behavior_hold_tap.c | |
parent | 200c6cabeaed2101f136a0ab844657e592f12d09 (diff) |
refactor(hold-tap): split hold state into interrupt and timer
Diffstat (limited to 'app/src/behaviors/behavior_hold_tap.c')
-rw-r--r-- | app/src/behaviors/behavior_hold_tap.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 8df401b..6c5adc5 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -39,7 +39,8 @@ enum flavor { enum status { STATUS_UNDECIDED, STATUS_TAP, - STATUS_HOLD, + STATUS_HOLD_INTERRUPT, + STATUS_HOLD_TIMER, }; struct behavior_hold_tap_config { @@ -221,8 +222,10 @@ static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_mome hold_tap->status = STATUS_TAP; return; case HT_OTHER_KEY_UP: + hold_tap->status = STATUS_HOLD_INTERRUPT; + return; case HT_TIMER_EVENT: - hold_tap->status = STATUS_HOLD; + hold_tap->status = STATUS_HOLD_TIMER; return; case HT_QUICK_TAP: hold_tap->status = STATUS_TAP; @@ -238,7 +241,7 @@ static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision hold_tap->status = STATUS_TAP; return; case HT_TIMER_EVENT: - hold_tap->status = STATUS_HOLD; + hold_tap->status = STATUS_HOLD_TIMER; return; case HT_QUICK_TAP: hold_tap->status = STATUS_TAP; @@ -254,8 +257,10 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio hold_tap->status = STATUS_TAP; return; case HT_OTHER_KEY_DOWN: + hold_tap->status = STATUS_HOLD_INTERRUPT; + return; case HT_TIMER_EVENT: - hold_tap->status = STATUS_HOLD; + hold_tap->status = STATUS_HOLD_TIMER; return; case HT_QUICK_TAP: hold_tap->status = STATUS_TAP; @@ -281,8 +286,10 @@ static inline const char *status_str(enum status status) { switch (status) { case STATUS_UNDECIDED: return "undecided"; - case STATUS_HOLD: - return "hold"; + case STATUS_HOLD_TIMER: + return "hold-timer"; + case STATUS_HOLD_INTERRUPT: + return "hold-interrupt"; case STATUS_TAP: return "tap"; } @@ -322,7 +329,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome }; struct zmk_behavior_binding binding; - if (hold_tap->status == STATUS_HOLD) { + if (hold_tap->status & STATUS_HOLD) { binding.behavior_dev = hold_tap->config->hold_behavior_dev; binding.param1 = hold_tap->param_hold; binding.param2 = 0; @@ -397,7 +404,7 @@ static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, }; struct zmk_behavior_binding sub_behavior_binding; - if (hold_tap->status == STATUS_HOLD) { + if (hold_tap->status & STATUS_HOLD) { sub_behavior_binding.behavior_dev = hold_tap->config->hold_behavior_dev; sub_behavior_binding.param1 = hold_tap->param_hold; sub_behavior_binding.param2 = 0; |