~ruther/qmk_firmware

b1de11c27575f9956d2f7dfd6bf0240d630e3ae1 — Takeshi ISHII 3 years ago ae5f430
Fix a potential bug in encoder_init(). (#16372)

After executing `setPinInputHigh(pin)`, it is necessary to wait for the charging time to read from the corresponding pin. This is the same as requiring `matrix_output_unselect_delay()` after doing `unselect_row()` in matrix.c.
1 files changed, 5 insertions(+), 1 deletions(-)

M quantum/encoder.c
M quantum/encoder.c => quantum/encoder.c +5 -1
@@ 59,6 59,8 @@ static uint8_t thisHand, thatHand;
static uint8_t encoder_value[NUMBER_OF_ENCODERS] = {0};
#endif

__attribute__((weak)) void encoder_wait_pullup_charge(void) { wait_us(100); }

__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; }

__attribute__((weak)) bool encoder_update_kb(uint8_t index, bool clockwise) { return encoder_update_user(index, clockwise); }


@@ 84,7 86,9 @@ void encoder_init(void) {
    for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
        setPinInputHigh(encoders_pad_a[i]);
        setPinInputHigh(encoders_pad_b[i]);

    }
    encoder_wait_pullup_charge();
    for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
        encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
    }