summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOkke Formsma <okke@formsma.nl>2020-09-02 16:41:39 +0200
committerOkke Formsma <okke@formsma.nl>2020-09-02 16:41:39 +0200
commitc9a82d71d06146dfe706a2e8d223dab593dffffc (patch)
tree837fd976b409fd902fb8c1f8018e369271d1594e
parentc5ca66441172114b57ca7f7b27d13d0d342d4fcc (diff)
fixes for feedback round 2
-rw-r--r--app/dts/behaviors.dtsi1
-rw-r--r--app/dts/behaviors/homerow_tap.dtsi12
-rw-r--r--app/src/behaviors/behavior_hold_tap.c39
-rw-r--r--docs/docs/behavior/hold-tap.md4
4 files changed, 28 insertions, 28 deletions
diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi
index fdcf426..ab70bcc 100644
--- a/app/dts/behaviors.dtsi
+++ b/app/dts/behaviors.dtsi
@@ -3,7 +3,6 @@
#include <behaviors/none.dtsi>
#include <behaviors/mod_tap.dtsi>
#include <behaviors/layer_tap.dtsi>
-#include <behaviors/homerow_tap.dtsi>
#include <behaviors/momentary_layer.dtsi>
#include <behaviors/toggle_layer.dtsi>
#include <behaviors/reset.dtsi>
diff --git a/app/dts/behaviors/homerow_tap.dtsi b/app/dts/behaviors/homerow_tap.dtsi
deleted file mode 100644
index 4162c28..0000000
--- a/app/dts/behaviors/homerow_tap.dtsi
+++ /dev/null
@@ -1,12 +0,0 @@
-/ {
- behaviors {
- ht: behavior_homerow_mod {
- compatible = "zmk,behavior-hold-tap";
- label = "HOMEROW_MOD";
- #binding-cells = <2>;
- flavor = "balanced";
- tapping_term_ms = <200>;
- bindings = <&kp>, <&kp>;
- };
- };
-};
diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c
index cd788f7..2c6d996 100644
--- a/app/src/behaviors/behavior_hold_tap.c
+++ b/app/src/behaviors/behavior_hold_tap.c
@@ -29,6 +29,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
// increase if you have keyboard with more keys.
#define ZMK_BHV_HOLD_TAP_POSITION_NOT_USED 9999
+
+enum flavor {
+ ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED = 0,
+ ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED = 1,
+ ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED = 2,
+};
+
struct behavior_hold_tap_behaviors {
struct zmk_behavior_binding tap;
struct zmk_behavior_binding hold;
@@ -39,7 +46,7 @@ typedef k_timeout_t (*timer_func)();
struct behavior_hold_tap_config {
timer_func tapping_term_ms;
struct behavior_hold_tap_behaviors *behaviors;
- int flavor;
+ enum flavor flavor;
};
// this data is specific for each hold-tap
@@ -197,9 +204,6 @@ static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_mome
hold_tap->is_decided = true;
break;
case HT_OTHER_KEY_UP:
- hold_tap->is_hold = 1;
- hold_tap->is_decided = true;
- break;
case HT_TIMER_EVENT:
hold_tap->is_hold = 1;
hold_tap->is_decided = true;
@@ -231,9 +235,6 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio
hold_tap->is_decided = true;
break;
case HT_OTHER_KEY_DOWN:
- hold_tap->is_hold = 1;
- hold_tap->is_decided = true;
- break;
case HT_TIMER_EVENT:
hold_tap->is_hold = 1;
hold_tap->is_decided = true;
@@ -242,6 +243,18 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio
}
}
+static inline char* flavor_str(enum flavor flavor) {
+ switch(flavor) {
+ case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED:
+ return "hold-preferred";
+ case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED:
+ return "balanced";
+ case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED:
+ return "tap-preferred";
+ }
+ return "UNKNOWN FLAVOR";
+}
+
static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event)
{
if (hold_tap->is_decided) {
@@ -253,13 +266,13 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome
return;
}
- int flavor = hold_tap->config->flavor;
- if (flavor == 1) {
+ switch(hold_tap->config->flavor) {
+ case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED:
+ decide_hold_preferred(hold_tap, event);
+ case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED:
decide_balanced(hold_tap, event);
- } else if (flavor == 2) {
+ case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED:
decide_tap_preferred(hold_tap, event);
- } else if (flavor == 0) {
- decide_hold_preferred(hold_tap, event);
}
if (!hold_tap->is_decided) {
@@ -269,7 +282,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome
LOG_DBG("%d decided %s (%s event %d)",
hold_tap->position,
hold_tap->is_hold ? "hold" : "tap",
- flavor == 0 ? "hold-preferred" : flavor == 1 ? "balanced": "tap-preferred",
+ flavor_str(hold_tap->config->flavor),
event);
undecided_hold_tap = NULL;
diff --git a/docs/docs/behavior/hold-tap.md b/docs/docs/behavior/hold-tap.md
index b586b90..fa68538 100644
--- a/docs/docs/behavior/hold-tap.md
+++ b/docs/docs/behavior/hold-tap.md
@@ -31,9 +31,9 @@ A code example which configures a mod-tap setting that works with homerow mods:
/ {
behaviors {
- &hm: homerow_mods {
+ hm: homerow_mods {
compatible = "zmk,behavior-hold-tap";
- label = "homerow_mods";
+ label = "HOMEROW_MODS";
#binding-cells = <2>;
tapping_term_ms = <175>;
flavor = "balanced";