~ruther/qmk_firmware

b8e8a20ca64327d0c5276f87a9dddc8e83cee0de — Marek Wyborski 3 years ago 3ecb0a8
Improve ENCODER_DEFAULT_POS to recognize lost ticks (#16932)

1 files changed, 21 insertions(+), 10 deletions(-)

M quantum/encoder.c
M quantum/encoder.c => quantum/encoder.c +21 -10
@@ 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