diff options
author | Marek Wyborski <9861955+mwyborski@users.noreply.github.com> | 2022-07-02 14:12:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-02 22:12:41 +1000 |
commit | b8e8a20ca64327d0c5276f87a9dddc8e83cee0de (patch) | |
tree | 8a80d0be0a94b0db21f2cebc80b76ec2dad87cf0 /quantum | |
parent | 3ecb0a80af9e4ce4194a34032642933641730706 (diff) | |
download | qmk_firmware-b8e8a20ca64327d0c5276f87a9dddc8e83cee0de.tar.gz qmk_firmware-b8e8a20ca64327d0c5276f87a9dddc8e83cee0de.zip |
Improve ENCODER_DEFAULT_POS to recognize lost ticks (#16932)
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/encoder.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/quantum/encoder.c b/quantum/encoder.c index 105bed0147..5f8a7ce080 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -163,27 +163,38 @@ static bool encoder_update(uint8_t index, uint8_t state) { index += thisHand; #endif encoder_pulses[i] += encoder_LUT[state & 0xF]; + +#ifdef ENCODER_DEFAULT_POS + if ((encoder_pulses[i] >= resolution) || (encoder_pulses[i] <= -resolution) || ((state & 0x3) == ENCODER_DEFAULT_POS)) { + if (encoder_pulses[i] >= 1) { +#else if (encoder_pulses[i] >= resolution) { - encoder_value[index]++; - changed = true; +#endif + + encoder_value[index]++; + changed = true; #ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(index, ENCODER_COUNTER_CLOCKWISE); + encoder_exec_mapping(index, ENCODER_COUNTER_CLOCKWISE); #else // ENCODER_MAP_ENABLE encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE); #endif // ENCODER_MAP_ENABLE - } + } + +#ifdef ENCODER_DEFAULT_POS + if (encoder_pulses[i] <= -1) { +#else if (encoder_pulses[i] <= -resolution) { // direction is arbitrary here, but this clockwise - encoder_value[index]--; - changed = true; +#endif + encoder_value[index]--; + changed = true; #ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(index, ENCODER_CLOCKWISE); + encoder_exec_mapping(index, ENCODER_CLOCKWISE); #else // ENCODER_MAP_ENABLE encoder_update_kb(index, ENCODER_CLOCKWISE); #endif // ENCODER_MAP_ENABLE - } - encoder_pulses[i] %= resolution; + } + encoder_pulses[i] %= resolution; #ifdef ENCODER_DEFAULT_POS - if ((state & 0x3) == ENCODER_DEFAULT_POS) { encoder_pulses[i] = 0; } #endif |