summaryrefslogtreecommitdiff
path: root/app/src/behaviors
diff options
context:
space:
mode:
authorOkke Formsma <okke@formsma.nl>2021-02-04 13:50:13 +0100
committerPete Johanson <peter@peterjohanson.com>2021-02-24 07:24:27 -0500
commitabc60fc7cb5c145bff9029a1aadd73c5adbf4a7b (patch)
tree9072131e78bc83e1f38d4fecc68328da4da58ab1 /app/src/behaviors
parent200c6cabeaed2101f136a0ab844657e592f12d09 (diff)
refactor(hold-tap): split hold state into interrupt and timer
Diffstat (limited to 'app/src/behaviors')
-rw-r--r--app/src/behaviors/behavior_hold_tap.c23
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;