qmk/qmk_firmware

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

Open

#3 963 ouverte le 23 sept. 2018

Voir sur GitHub
 (27 commentaires) (11 réactions) (0 assignés)C (43 867 forks)batch import
bughelp wantedquestion

Métriques du dépôt

Stars
 (20 368 stars)
Métriques de merge PR
 (Merge moyen 20j 9h) (27 PRs mergées en 30 j)

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 

Guide contributeur