4e69a32103
The current combo completion check only makes sure the last key in the combo is set. This works when the combo is typed correctly initially, or when reraising events in a combo of length two. However, it fails for longer combos since the last event in pressed_keys might be set, but the first (or subsequent) event in pressed_keys can be NULL thanks to release_pressed_keys. Also added a regression test.
37 lines
580 B
Text
37 lines
580 B
Text
#include <dt-bindings/zmk/keys.h>
|
|
#include <behaviors.dtsi>
|
|
#include <dt-bindings/zmk/kscan-mock.h>
|
|
|
|
/ {
|
|
combos {
|
|
compatible = "zmk,combos";
|
|
combo_one {
|
|
timeout-ms = <80>;
|
|
key-positions = <0 1 2>;
|
|
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(0,0,10)
|
|
ZMK_MOCK_PRESS(0,1,10)
|
|
ZMK_MOCK_PRESS(1,1,10)
|
|
ZMK_MOCK_RELEASE(1,1,100)
|
|
ZMK_MOCK_RELEASE(0,1,100)
|
|
ZMK_MOCK_RELEASE(0,0,100)
|
|
>;
|
|
};
|