From 0df71100581d040178bd0fe8ec0382d84dc59a40 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sat, 27 Feb 2021 22:34:15 +0100 Subject: fix(combos): Fix stuck keys when pressing long combos. To properly retrigger hold-taps when a combo is not activated, some position down events are reraised instead of released. The corresponding position up events were never reraised, causing a potential stuck key. --- .../combo/combos-and-holdtaps-0/events.patterns | 1 - .../combo/combos-and-holdtaps-1/events.patterns | 3 +- .../combo/combos-and-holdtaps-2/events.patterns | 3 +- app/tests/combo/layer-filter-0/events.patterns | 3 +- app/tests/combo/layer-filter-1/events.patterns | 3 +- .../combo/overlapping-combos-0/events.patterns | 3 +- .../combo/overlapping-combos-1/events.patterns | 3 +- .../combo/overlapping-combos-2/events.patterns | 3 +- .../combo/overlapping-combos-3/events.patterns | 3 +- .../combo/press-release-long-combo/events.patterns | 1 + .../keycode_events.snapshot | 4 +++ .../press-release-long-combo/native_posix.keymap | 35 ++++++++++++++++++++++ .../events.patterns | 3 +- .../events.patterns | 1 - .../events.patterns | 3 +- 15 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 app/tests/combo/press-release-long-combo/events.patterns create mode 100644 app/tests/combo/press-release-long-combo/keycode_events.snapshot create mode 100644 app/tests/combo/press-release-long-combo/native_posix.keymap (limited to 'app/tests') diff --git a/app/tests/combo/combos-and-holdtaps-0/events.patterns b/app/tests/combo/combos-and-holdtaps-0/events.patterns index b90d786..b1342af 100644 --- a/app/tests/combo/combos-and-holdtaps-0/events.patterns +++ b/app/tests/combo/combos-and-holdtaps-0/events.patterns @@ -1,2 +1 @@ s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-1/events.patterns b/app/tests/combo/combos-and-holdtaps-1/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/combos-and-holdtaps-1/events.patterns +++ b/app/tests/combo/combos-and-holdtaps-1/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/combos-and-holdtaps-2/events.patterns b/app/tests/combo/combos-and-holdtaps-2/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/combos-and-holdtaps-2/events.patterns +++ b/app/tests/combo/combos-and-holdtaps-2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/layer-filter-0/events.patterns b/app/tests/combo/layer-filter-0/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/layer-filter-0/events.patterns +++ b/app/tests/combo/layer-filter-0/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/layer-filter-1/events.patterns b/app/tests/combo/layer-filter-1/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/layer-filter-1/events.patterns +++ b/app/tests/combo/layer-filter-1/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-0/events.patterns b/app/tests/combo/overlapping-combos-0/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/overlapping-combos-0/events.patterns +++ b/app/tests/combo/overlapping-combos-0/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-1/events.patterns b/app/tests/combo/overlapping-combos-1/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/overlapping-combos-1/events.patterns +++ b/app/tests/combo/overlapping-combos-1/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-2/events.patterns b/app/tests/combo/overlapping-combos-2/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/overlapping-combos-2/events.patterns +++ b/app/tests/combo/overlapping-combos-2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/overlapping-combos-3/events.patterns b/app/tests/combo/overlapping-combos-3/events.patterns index b90d786..833100f 100644 --- a/app/tests/combo/overlapping-combos-3/events.patterns +++ b/app/tests/combo/overlapping-combos-3/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo//p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/press-release-long-combo/events.patterns b/app/tests/combo/press-release-long-combo/events.patterns new file mode 100644 index 0000000..b1342af --- /dev/null +++ b/app/tests/combo/press-release-long-combo/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p diff --git a/app/tests/combo/press-release-long-combo/keycode_events.snapshot b/app/tests/combo/press-release-long-combo/keycode_events.snapshot new file mode 100644 index 0000000..e7c0cb1 --- /dev/null +++ b/app/tests/combo/press-release-long-combo/keycode_events.snapshot @@ -0,0 +1,4 @@ +pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/combo/press-release-long-combo/native_posix.keymap b/app/tests/combo/press-release-long-combo/native_posix.keymap new file mode 100644 index 0000000..68736d8 --- /dev/null +++ b/app/tests/combo/press-release-long-combo/native_posix.keymap @@ -0,0 +1,35 @@ +#include +#include +#include + +/ { + combos { + compatible = "zmk,combos"; + combo_one { + timeout-ms = <80>; + key-positions = <0 1 2 3>; + bindings = <&kp Z>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp A &kp B + &kp C &kp D + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,1,100) + >; +}; \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release1-release2/events.patterns b/app/tests/combo/press1-press2-release1-release2/events.patterns index 5f3e4cf..833100f 100644 --- a/app/tests/combo/press1-press2-release1-release2/events.patterns +++ b/app/tests/combo/press1-press2-release1-release2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo/combo/p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/combo/press1-press2-release2-release1/events.patterns b/app/tests/combo/press1-press2-release2-release1/events.patterns index b54b66b..b1342af 100644 --- a/app/tests/combo/press1-press2-release2-release1/events.patterns +++ b/app/tests/combo/press1-press2-release2-release1/events.patterns @@ -1,2 +1 @@ s/.*hid_listener_keycode_//p -s/.*combo/combo/p diff --git a/app/tests/combo/press1-release1-press2-release2/events.patterns b/app/tests/combo/press1-release1-press2-release2/events.patterns index 5f3e4cf..833100f 100644 --- a/app/tests/combo/press1-release1-press2-release2/events.patterns +++ b/app/tests/combo/press1-release1-press2-release2/events.patterns @@ -1,2 +1 @@ -s/.*hid_listener_keycode_//p -s/.*combo/combo/p \ No newline at end of file +s/.*hid_listener_keycode_//p \ No newline at end of file -- cgit v1.2.3