qmk/qmk_firmware

Double tapping an OSM mod can cause another OSM mod to get stuck

Open

#3.963 aberto em 23 de set. de 2018

Ver no GitHub
 (27 comments) (11 reactions) (0 assignees)C (43.867 forks)batch import
bughelp wantedquestion

Métricas do repositório

Stars
 (20.368 stars)
Métricas de merge de PR
 (Mesclagem média 20d 9h) (27 fundiu PRs em 30d)

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 

Guia do colaborador