fixes for feedback round 2
This commit is contained in:
parent
c5ca664411
commit
c9a82d71d0
4 changed files with 29 additions and 29 deletions
|
@ -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>
|
||||
|
|
|
@ -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>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -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) {
|
||||
decide_balanced(hold_tap, event);
|
||||
} else if (flavor == 2) {
|
||||
decide_tap_preferred(hold_tap, event);
|
||||
} else if (flavor == 0) {
|
||||
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);
|
||||
case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED:
|
||||
decide_tap_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;
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in a new issue