diff --git a/app/run-test-debug.sh b/app/run-test-debug.sh new file mode 100755 index 00000000..f6696a1d --- /dev/null +++ b/app/run-test-debug.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# +# Copyright (c) 2020 Peter Johanson; Cody McGinnis; Okke Formsma +# +# SPDX-License-Identifier: MIT +# +set -e +set -x + +if [ -z "$1" ]; then + echo "Usage: ./run-test.sh " + exit 1 +elif [ "$1" = "all" ]; then + echo "" > ./build/tests/pass-fail.log + find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 4 ./run-test.sh + err=$? + sort -k2 ./build/tests/pass-fail.log + exit $err +fi + +testcase="$1" +echo "Running $testcase:" + +west build -d build/$testcase -b native_posix --pristine -- -DZMK_CONFIG=$testcase +if [ $? -gt 0 ]; then + echo "FAIL: $testcase did not build" +else + ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log + cat build/$testcase/keycode_events_full.log + cat build/$testcase/keycode_events.log + diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log + if [ $? -gt 0 ]; then + if [ -f $testcase/pending ]; then + echo "PEND: $testcase" + exit 0 + else + echo "FAIL: $testcase" + exit 1 + fi + else + echo "PASS: $testcase" + exit 0 + fi +fi \ No newline at end of file diff --git a/app/tests/tap-hold/.~lock.zmk-modtap-proposal.odg# b/app/tests/tap-hold/.~lock.zmk-modtap-proposal.odg# new file mode 100644 index 00000000..47937d7a --- /dev/null +++ b/app/tests/tap-hold/.~lock.zmk-modtap-proposal.odg# @@ -0,0 +1 @@ +,okke,xps,30.08.2020 20:44,file:///home/okke/.config/libreoffice/4; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/1/events.patterns b/app/tests/tap-hold/balanced/1/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/1/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/1/keycode_events.snapshot b/app/tests/tap-hold/balanced/1/keycode_events.snapshot new file mode 100644 index 00000000..b506b791 --- /dev/null +++ b/app/tests/tap-hold/balanced/1/keycode_events.snapshot @@ -0,0 +1,5 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/1/native_posix.keymap b/app/tests/tap-hold/balanced/1/native_posix.keymap new file mode 100644 index 00000000..10336ef3 --- /dev/null +++ b/app/tests/tap-hold/balanced/1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/2/events.patterns b/app/tests/tap-hold/balanced/2/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/2/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/2/keycode_events.snapshot b/app/tests/tap-hold/balanced/2/keycode_events.snapshot new file mode 100644 index 00000000..ea302d0a --- /dev/null +++ b/app/tests/tap-hold/balanced/2/keycode_events.snapshot @@ -0,0 +1,5 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/2/native_posix.keymap b/app/tests/tap-hold/balanced/2/native_posix.keymap new file mode 100644 index 00000000..aa93b862 --- /dev/null +++ b/app/tests/tap-hold/balanced/2/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/3a/events.patterns b/app/tests/tap-hold/balanced/3a/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/3a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/3a/keycode_events.snapshot b/app/tests/tap-hold/balanced/3a/keycode_events.snapshot new file mode 100644 index 00000000..1355b011 --- /dev/null +++ b/app/tests/tap-hold/balanced/3a/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/3a/native_posix.keymap b/app/tests/tap-hold/balanced/3a/native_posix.keymap new file mode 100644 index 00000000..6f08689b --- /dev/null +++ b/app/tests/tap-hold/balanced/3a/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/3b/events.patterns b/app/tests/tap-hold/balanced/3b/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/3b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/3b/keycode_events.snapshot b/app/tests/tap-hold/balanced/3b/keycode_events.snapshot new file mode 100644 index 00000000..12c1e28e --- /dev/null +++ b/app/tests/tap-hold/balanced/3b/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/3b/native_posix.keymap b/app/tests/tap-hold/balanced/3b/native_posix.keymap new file mode 100644 index 00000000..b9c81b92 --- /dev/null +++ b/app/tests/tap-hold/balanced/3b/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,500) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4a-nested/events.patterns b/app/tests/tap-hold/balanced/4a-nested/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/4a-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4a-nested/keycode_events.snapshot b/app/tests/tap-hold/balanced/4a-nested/keycode_events.snapshot new file mode 100644 index 00000000..cb6d1608 --- /dev/null +++ b/app/tests/tap-hold/balanced/4a-nested/keycode_events.snapshot @@ -0,0 +1,10 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +th_binding_pressed: 1 new undecided tap_hold +th_decide: 1 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +th_binding_released: 1 cleaning up tap-hold +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/4a-nested/native_posix.keymap b/app/tests/tap-hold/balanced/4a-nested/native_posix.keymap new file mode 100644 index 00000000..c10c6d64 --- /dev/null +++ b/app/tests/tap-hold/balanced/4a-nested/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4a/events.patterns b/app/tests/tap-hold/balanced/4a/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/4a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4a/keycode_events.snapshot b/app/tests/tap-hold/balanced/4a/keycode_events.snapshot new file mode 100644 index 00000000..2ca556d7 --- /dev/null +++ b/app/tests/tap-hold/balanced/4a/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/4a/native_posix.keymap b/app/tests/tap-hold/balanced/4a/native_posix.keymap new file mode 100644 index 00000000..ce163f53 --- /dev/null +++ b/app/tests/tap-hold/balanced/4a/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4b/events.patterns b/app/tests/tap-hold/balanced/4b/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/4b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4b/keycode_events.snapshot b/app/tests/tap-hold/balanced/4b/keycode_events.snapshot new file mode 100644 index 00000000..899806e5 --- /dev/null +++ b/app/tests/tap-hold/balanced/4b/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/4b/native_posix.keymap b/app/tests/tap-hold/balanced/4b/native_posix.keymap new file mode 100644 index 00000000..7abda41a --- /dev/null +++ b/app/tests/tap-hold/balanced/4b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4c/events.patterns b/app/tests/tap-hold/balanced/4c/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/4c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4c/keycode_events.snapshot b/app/tests/tap-hold/balanced/4c/keycode_events.snapshot new file mode 100644 index 00000000..899806e5 --- /dev/null +++ b/app/tests/tap-hold/balanced/4c/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/balanced/4c/native_posix.keymap b/app/tests/tap-hold/balanced/4c/native_posix.keymap new file mode 100644 index 00000000..ce030af3 --- /dev/null +++ b/app/tests/tap-hold/balanced/4c/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4d/events.patterns b/app/tests/tap-hold/balanced/4d/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/balanced/4d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/4d/keycode_events.snapshot b/app/tests/tap-hold/balanced/4d/keycode_events.snapshot new file mode 100644 index 00000000..40be1e3f --- /dev/null +++ b/app/tests/tap-hold/balanced/4d/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/tap-hold/balanced/4d/native_posix.keymap b/app/tests/tap-hold/balanced/4d/native_posix.keymap new file mode 100644 index 00000000..54676600 --- /dev/null +++ b/app/tests/tap-hold/balanced/4d/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/behavior_keymap.dtsi b/app/tests/tap-hold/balanced/behavior_keymap.dtsi new file mode 100644 index 00000000..a1314204 --- /dev/null +++ b/app/tests/tap-hold/balanced/behavior_keymap.dtsi @@ -0,0 +1,48 @@ +#include +#include +#include + +/ { + behaviors { + fsf: behavior_f_shift { + compatible = "zmk,behavior-tap-hold"; + label = "f-shift"; + #binding-cells = <0>; + tapping_term_ms = <300>; + bindings = <&kp F>, <&kp LSFT>; + flavor = "balanced"; + }; + + jct: behavior_j_ctrl { + compatible = "zmk,behavior-tap-hold"; + label = "j-ctrl"; + #binding-cells = <0>; + tapping_term_ms = <300>; + bindings = <&kp J>, <&kp LCTL>; + flavor = "balanced"; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &fsf &jct + &kp D &kp RCTL>; + }; + + lower_layer { + bindings = < + &cp M_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/app/tests/tap-hold/hold-preferred/1/events.patterns b/app/tests/tap-hold/hold-preferred/1/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/1/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/1/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/1/keycode_events.snapshot new file mode 100644 index 00000000..39cd5a07 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/1/keycode_events.snapshot @@ -0,0 +1,5 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/1/native_posix.keymap b/app/tests/tap-hold/hold-preferred/1/native_posix.keymap new file mode 100644 index 00000000..10336ef3 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/2/events.patterns b/app/tests/tap-hold/hold-preferred/2/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/2/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/2/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/2/keycode_events.snapshot new file mode 100644 index 00000000..400d93e0 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/2/keycode_events.snapshot @@ -0,0 +1,5 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/2/native_posix.keymap b/app/tests/tap-hold/hold-preferred/2/native_posix.keymap new file mode 100644 index 00000000..aa93b862 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/2/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/3a/events.patterns b/app/tests/tap-hold/hold-preferred/3a/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/3a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/3a/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/3a/keycode_events.snapshot new file mode 100644 index 00000000..d996c894 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/3a/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/3a/native_posix.keymap b/app/tests/tap-hold/hold-preferred/3a/native_posix.keymap new file mode 100644 index 00000000..6f08689b --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/3a/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/3b/events.patterns b/app/tests/tap-hold/hold-preferred/3b/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/3b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/3b/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/3b/keycode_events.snapshot new file mode 100644 index 00000000..2b649e08 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/3b/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/3b/native_posix.keymap b/app/tests/tap-hold/hold-preferred/3b/native_posix.keymap new file mode 100644 index 00000000..b9c81b92 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/3b/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,500) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4a-nested/events.patterns b/app/tests/tap-hold/hold-preferred/4a-nested/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4a-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4a-nested/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/4a-nested/keycode_events.snapshot new file mode 100644 index 00000000..1e57aa72 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4a-nested/keycode_events.snapshot @@ -0,0 +1,10 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +th_binding_pressed: 1 new undecided tap_hold +th_decide: 1 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +th_binding_released: 1 cleaning up tap-hold +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/4a-nested/native_posix.keymap b/app/tests/tap-hold/hold-preferred/4a-nested/native_posix.keymap new file mode 100644 index 00000000..c10c6d64 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4a-nested/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4a/events.patterns b/app/tests/tap-hold/hold-preferred/4a/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4a/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/4a/keycode_events.snapshot new file mode 100644 index 00000000..0398fccb --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4a/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/4a/native_posix.keymap b/app/tests/tap-hold/hold-preferred/4a/native_posix.keymap new file mode 100644 index 00000000..ce163f53 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4a/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4b/events.patterns b/app/tests/tap-hold/hold-preferred/4b/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4b/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/4b/keycode_events.snapshot new file mode 100644 index 00000000..0398fccb --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4b/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/4b/native_posix.keymap b/app/tests/tap-hold/hold-preferred/4b/native_posix.keymap new file mode 100644 index 00000000..7abda41a --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4c/events.patterns b/app/tests/tap-hold/hold-preferred/4c/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4c/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/4c/keycode_events.snapshot new file mode 100644 index 00000000..0398fccb --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4c/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/hold-preferred/4c/native_posix.keymap b/app/tests/tap-hold/hold-preferred/4c/native_posix.keymap new file mode 100644 index 00000000..ce030af3 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4c/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4d/events.patterns b/app/tests/tap-hold/hold-preferred/4d/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/4d/keycode_events.snapshot b/app/tests/tap-hold/hold-preferred/4d/keycode_events.snapshot new file mode 100644 index 00000000..611622cf --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4d/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/tap-hold/hold-preferred/4d/native_posix.keymap b/app/tests/tap-hold/hold-preferred/4d/native_posix.keymap new file mode 100644 index 00000000..54676600 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/4d/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi b/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi new file mode 100644 index 00000000..1ab4cf9d --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi @@ -0,0 +1,48 @@ +#include +#include +#include + +/ { + behaviors { + fsf: behavior_f_shift { + compatible = "zmk,behavior-tap-hold"; + label = "f-shift"; + #binding-cells = <0>; + tapping_term_ms = <300>; + bindings = <&kp F>, <&kp LSFT>; + flavor = "hold-preferred"; + }; + + jct: behavior_j_ctrl { + compatible = "zmk,behavior-tap-hold"; + label = "j-ctrl"; + #binding-cells = <0>; + tapping_term_ms = <300>; + bindings = <&kp J>, <&kp LCTL>; + flavor = "hold-preferred"; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &fsf &jct + &kp D &kp RCTL>; + }; + + lower_layer { + bindings = < + &cp M_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/app/tests/tap-hold/tap-preferred/1/events.patterns b/app/tests/tap-hold/tap-preferred/1/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/1/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/1/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/1/keycode_events.snapshot new file mode 100644 index 00000000..f1623f04 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/1/keycode_events.snapshot @@ -0,0 +1,5 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/1/native_posix.keymap b/app/tests/tap-hold/tap-preferred/1/native_posix.keymap new file mode 100644 index 00000000..10336ef3 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/2/events.patterns b/app/tests/tap-hold/tap-preferred/2/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/2/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/2/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/2/keycode_events.snapshot new file mode 100644 index 00000000..0bac998e --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/2/keycode_events.snapshot @@ -0,0 +1,5 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/2/native_posix.keymap b/app/tests/tap-hold/tap-preferred/2/native_posix.keymap new file mode 100644 index 00000000..aa93b862 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/2/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/3a/events.patterns b/app/tests/tap-hold/tap-preferred/3a/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/3a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/3a/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/3a/keycode_events.snapshot new file mode 100644 index 00000000..af639669 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/3a/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/3a/native_posix.keymap b/app/tests/tap-hold/tap-preferred/3a/native_posix.keymap new file mode 100644 index 00000000..6f08689b --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/3a/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/3b/events.patterns b/app/tests/tap-hold/tap-preferred/3b/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/3b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/3b/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/3b/keycode_events.snapshot new file mode 100644 index 00000000..cbbbcfeb --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/3b/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/3b/native_posix.keymap b/app/tests/tap-hold/tap-preferred/3b/native_posix.keymap new file mode 100644 index 00000000..b9c81b92 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/3b/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,500) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4a-nested/events.patterns b/app/tests/tap-hold/tap-preferred/4a-nested/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4a-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4a-nested/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/4a-nested/keycode_events.snapshot new file mode 100644 index 00000000..6371155f --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4a-nested/keycode_events.snapshot @@ -0,0 +1,10 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +th_binding_pressed: 1 new undecided tap_hold +th_decide: 1 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +th_binding_released: 1 cleaning up tap-hold +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/4a-nested/native_posix.keymap b/app/tests/tap-hold/tap-preferred/4a-nested/native_posix.keymap new file mode 100644 index 00000000..c10c6d64 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4a-nested/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4a/events.patterns b/app/tests/tap-hold/tap-preferred/4a/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4a/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/4a/keycode_events.snapshot new file mode 100644 index 00000000..690551b6 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4a/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/4a/native_posix.keymap b/app/tests/tap-hold/tap-preferred/4a/native_posix.keymap new file mode 100644 index 00000000..ce163f53 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4a/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4b/events.patterns b/app/tests/tap-hold/tap-preferred/4b/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4b/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/4b/keycode_events.snapshot new file mode 100644 index 00000000..690551b6 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4b/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/4b/native_posix.keymap b/app/tests/tap-hold/tap-preferred/4b/native_posix.keymap new file mode 100644 index 00000000..7abda41a --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4c/events.patterns b/app/tests/tap-hold/tap-preferred/4c/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4c/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/4c/keycode_events.snapshot new file mode 100644 index 00000000..f6fc788f --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4c/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold diff --git a/app/tests/tap-hold/tap-preferred/4c/native_posix.keymap b/app/tests/tap-hold/tap-preferred/4c/native_posix.keymap new file mode 100644 index 00000000..ce030af3 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4c/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4d/events.patterns b/app/tests/tap-hold/tap-preferred/4d/events.patterns new file mode 100644 index 00000000..39d12377 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_tap_hold_binding/th_binding/p +s/.*decide_tap_hold/th_decide/p \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/4d/keycode_events.snapshot b/app/tests/tap-hold/tap-preferred/4d/keycode_events.snapshot new file mode 100644 index 00000000..1b8f258b --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4d/keycode_events.snapshot @@ -0,0 +1,7 @@ +th_binding_pressed: 0 new undecided tap_hold +th_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +th_binding_released: 0 cleaning up tap-hold +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/tap-hold/tap-preferred/4d/native_posix.keymap b/app/tests/tap-hold/tap-preferred/4d/native_posix.keymap new file mode 100644 index 00000000..54676600 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/4d/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi b/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi new file mode 100644 index 00000000..809209f5 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi @@ -0,0 +1,48 @@ +#include +#include +#include + +/ { + behaviors { + fsf: behavior_f_shift { + compatible = "zmk,behavior-tap-hold"; + label = "f-shift"; + #binding-cells = <0>; + tapping_term_ms = <300>; + bindings = <&kp F>, <&kp LSFT>; + flavor = "tap-preferred"; + }; + + jct: behavior_j_ctrl { + compatible = "zmk,behavior-tap-hold"; + label = "j-ctrl"; + #binding-cells = <0>; + tapping_term_ms = <300>; + bindings = <&kp J>, <&kp LCTL>; + flavor = "tap-preferred"; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &fsf &jct + &kp D &kp RCTL>; + }; + + lower_layer { + bindings = < + &cp M_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/app/tests/tap-hold/zmk-modtap-proposal.odg b/app/tests/tap-hold/zmk-modtap-proposal.odg new file mode 100644 index 00000000..82f84369 Binary files /dev/null and b/app/tests/tap-hold/zmk-modtap-proposal.odg differ diff --git a/app/tests/tap-hold/zmk-modtap-proposal.pdf b/app/tests/tap-hold/zmk-modtap-proposal.pdf new file mode 100644 index 00000000..33048ca1 Binary files /dev/null and b/app/tests/tap-hold/zmk-modtap-proposal.pdf differ