qmk/qmk_firmware
View on GitHubDouble tapping an OSM mod can cause another OSM mod to get stuck
Open
#3,963 opened on Sep 23, 2018
bughelp wantedquestion
Description
Setup
I have two OSM modifiers:
#define OSMLSFT OSM(MOD_LSFT)
#define OSMLALT OSM(MOD_LALT)
Actions
I perform the following sequence, quickly:
- Tap
OSMLSFT - Tap
OSMLALT - Tap
OSMLALT
Result
OSMLSFT is now stuck, all taps to alphanumeric part of keyboard output capital letters.
To clear I have to hold down OSMLSFT and hit another key.
Cause
Unclear. Double tapping a one shot mod should clear all mods, as this part of the code presumably does: https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L290-L293
Debug
This is debug output of the actions mentioned above:
>
---- action_exec: start -----
EVENT: 0301d(6277)
Tapping: Start(Press tap key).
TAPPING_KEY=0301d(6277):0
processed: 0301d(6277):0
>
---- action_exec: start -----
EVENT: 0301u(6373)
Tapping: First tap(0->1).
TAPPING_KEY=0301d(6277):1
ACTION: ACT_LMODS_TAP[2:00] layer_state: 00000000(0) default_layer_state: 00000001(0)
MODS_TAP: Oneshot: start
waiting_buffer_enq: { [0]=0301u(6373):1 }
---- action_exec: process waiting_buffer -----
Tapping: Tap release(1)
ACTION: ACT_LMODS_TAP[2:00] layer_state: 00000000(0) default_layer_state: 00000001(0)
TAPPING_KEY=0301u(6373):1
processed: waiting_buffer[0] = 0301u(6373):1
>
---- action_exec: start -----
EVENT: 0302d(6453)
Tapping: Start with interfering other tap.
TAPPING_KEY=0302d(6453):0
processed: 0302d(6453):0
>
---- action_exec: start -----
EVENT: 0302u(6529)
Tapping: First tap(0->1).
TAPPING_KEY=0302d(6453):1
ACTION: ACT_LMODS_TAP[4:00] layer_state: 00000000(0) default_layer_state: 00000001(0)
MODS_TAP: Oneshot: start
waiting_buffer_enq: { [1]=0302u(6529):1 }
---- action_exec: process waiting_buffer -----
Tapping: Tap release(1)
ACTION: ACT_LMODS_TAP[4:00] layer_state: 00000000(0) default_layer_state: 00000001(0)
TAPPING_KEY=0302u(6529):1
processed: waiting_buffer[1] = 0302u(6529):1
>
---- action_exec: start -----
EVENT: 0302d(6605)
Tapping: Tap press(2)
ACTION: ACT_LMODS_TAP[4:00] layer_state: 00000000(0) default_layer_state: 00000001(0)
> TAPPING_KEY=0302d(6605):2
processed: 0302d(6605):2
>
---- action_exec: start -----
EVENT: 0302u(6699)
Tapping: Tap release(2)
ACTION: ACT_LMODS_TAP[4:00] layer_state: 00000000(0) default_layer_state: 00000001(0)
TAPPING_KEY=0302u(6699):2
processed: 0302u(6699):2
> Tapping: End(Timeout after releasing last tap): FFFFu(6899)
TAPPING_KEY=0000u(0):0