Open SolidHal opened 2 days ago
when we precompute the release state, we don't properly fill in the wait_ms
[00:00:00.313,629] <err> zmk: BEHAVIOR_MARO_INIT cfg default = 2
[00:00:00.313,659] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:00.313,659] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:00.313,690] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:00.313,720] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:00.313,781] <dbg> zmk: behavior_macro_init: Release will resume at 9
[00:00:00.313,781] <err> zmk: BEHAVIOR_MARO_INIT state->release_state.wait_ms = 0
with the fix we can see the releases properly get 2ms of wait time
[00:00:34.730,468] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:34.730,468] <err> zmk: MACRO MODE PRESS wait_ms: 2
[00:00:34.730,529] <dbg> zmk: behavior_queue_process_next: Invoking momentary_layer: 0x07 0x00
[00:00:34.730,560] <dbg> zmk: mo_keymap_binding_pressed: position 0 layer 7
[00:00:34.730,560] <dbg> zmk: set_layer_state: layer_changed: layer 7 state 1
[00:00:34.730,590] <dbg> zmk: conditional_layer_activate: layer 12
[00:00:34.730,621] <dbg> zmk: behavior_queue_process_next: Processing next queued behavior in 2ms
[00:00:34.730,621] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:34.730,651] <err> zmk: MACRO MODE PRESS wait_ms: 2
[00:00:34.730,682] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:34.730,712] <err> zmk: MACRO MODE PRESS wait_ms: 2
[00:00:34.730,712] <dbg> zmk: handle_control_binding: macro mode set: press
[00:00:34.730,743] <err> zmk: MACRO MODE PRESS wait_ms: 2
[00:00:34.732,757] <dbg> zmk: behavior_queue_process_next: Invoking midi_key_press: 0x33 0x00
[00:00:34.732,788] <dbg> zmk: on_keymap_binding_pressed: position 0 keycode 0x33
[00:00:34.732,788] <dbg> zmk: listener_midi_key_pressed: midi key: 0x0033
[00:00:34.732,818] <inf> zmk: zmk_midi_key_press received: 0x0033 aka 51
[00:00:34.732,818] <inf> zmk: body cin = 144, key = 51, key_value = 63
[00:00:34.732,849] <inf> zmk: Sending midi bytes 90 33 3f
[00:00:34.732,849] <inf> zmk: Sending midi packet 09 90 33 3f to endpoint 81
[00:00:34.732,879] <inf> zmk: doing midi usb_write
[00:00:34.732,910] <inf> zmk: completed midi usb write 0
[00:00:34.732,940] <dbg> zmk: behavior_queue_process_next: Processing next queued behavior in 2ms
[00:00:34.733,612] <dbg> zmk: midi_in_ep_cb: midi_in_ep_cb is not implemented
[00:00:34.735,046] <dbg> zmk: behavior_queue_process_next: Invoking midi_key_press: 0x37 0x00
[00:00:34.735,076] <dbg> zmk: on_keymap_binding_pressed: position 0 keycode 0x37
[00:00:34.735,107] <dbg> zmk: listener_midi_key_pressed: midi key: 0x0037
[00:00:34.735,107] <inf> zmk: zmk_midi_key_press received: 0x0037 aka 55
[00:00:34.735,137] <inf> zmk: body cin = 144, key = 55, key_value = 63
[00:00:34.735,137] <inf> zmk: Sending midi bytes 90 37 3f
[00:00:34.735,168] <inf> zmk: Sending midi packet 09 90 37 3f to endpoint 81
[00:00:34.735,168] <inf> zmk: doing midi usb_write
[00:00:34.735,229] <inf> zmk: completed midi usb write 0
[00:00:34.735,260] <dbg> zmk: behavior_queue_process_next: Processing next queued behavior in 2ms
[00:00:34.735,626] <dbg> zmk: midi_in_ep_cb: midi_in_ep_cb is not implemented
[00:00:34.737,365] <dbg> zmk: behavior_queue_process_next: Invoking midi_key_press: 0x3a 0x00
[00:00:34.737,396] <dbg> zmk: on_keymap_binding_pressed: position 0 keycode 0x3A
[00:00:34.737,396] <dbg> zmk: listener_midi_key_pressed: midi key: 0x003A
[00:00:34.737,426] <inf> zmk: zmk_midi_key_press received: 0x003a aka 58
[00:00:34.737,426] <inf> zmk: body cin = 144, key = 58, key_value = 63
[00:00:34.737,457] <inf> zmk: Sending midi bytes 90 3a 3f
[00:00:34.737,457] <inf> zmk: Sending midi packet 09 90 3a 3f to endpoint 81
[00:00:34.737,487] <inf> zmk: doing midi usb_write
[00:00:34.737,518] <inf> zmk: completed midi usb write 0
[00:00:34.737,548] <dbg> zmk: behavior_queue_process_next: Processing next queued behavior in 2ms
[00:00:34.737,640] <dbg> zmk: midi_in_ep_cb: midi_in_ep_cb is not implemented
[00:00:35.705,200] <dbg> zmk: kscan_matrix_read: Sending event at 0,0 state off
[00:00:35.705,383] <dbg> zmk: zmk_kscan_process_msgq: Row: 0, col: 0, position: 0, pressed: false
[00:00:35.705,383] <dbg> zmk: tap_dance_position_state_changed_listener: Ignore upstroke at position 0.
[00:00:35.705,444] <dbg> zmk: zmk_keymap_apply_position_state: layer: 11 position: 0, binding name: major_Eb
[00:00:35.705,505] <dbg> zmk: queue_macro: Iterating macro bindings - starting: 9, count: 8
[00:00:35.705,535] <dbg> zmk: handle_control_binding: macro mode set: release
[00:00:35.705,535] <err> zmk: MACRO MODE RELEASE wait_ms: 2
[00:00:35.705,596] <dbg> zmk: behavior_queue_process_next: Invoking momentary_layer: 0x07 0x00
[00:00:35.705,596] <dbg> zmk: mo_keymap_binding_released: position 0 layer 7
[00:00:35.705,627] <dbg> zmk: set_layer_state: layer_changed: layer 7 state 0
[00:00:35.705,657] <dbg> zmk: conditional_layer_activate: layer 12
[00:00:35.705,657] <dbg> zmk: behavior_queue_process_next: Processing next queued behavior in 2ms
[00:00:35.705,718] <dbg> zmk: handle_control_binding: macro mode set: release
[00:00:35.705,718] <err> zmk: MACRO MODE RELEASE wait_ms: 2
[00:00:35.705,749] <dbg> zmk: handle_control_binding: macro mode set: release
[00:00:35.705,780] <err> zmk: MACRO MODE RELEASE wait_ms: 2
[00:00:35.705,810] <dbg> zmk: handle_control_binding: macro mode set: release
[00:00:35.705,841] <err> zmk: MACRO MODE RELEASE wait_ms: 2
while messing around with midi support and macros, i noticed that
¯o_release
and¯o_press
handle thewait-ms
parameter differently.example macro:
i would expect that when this macro is pressed there is a
2ms
wait between each press, and then a2ms
wait between each release.but in midisnoop i observed the presses each has a
2ms
wait, the releases do not. in the following example we can see that one of the releases akaNote Off
events gets missed entirely.i put some debug prints into
behavior_macro.c
and confirmed the key release events were being queued with await_ms
of0
and the presses were being queud with await_ms
of2
logs: