From b1de11c27575f9956d2f7dfd6bf0240d630e3ae1 Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Mon, 21 Feb 2022 23:13:06 +0900 Subject: [PATCH] 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. --- quantum/encoder.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/quantum/encoder.c b/quantum/encoder.c index 8fb87281c2..ecbc0c1615 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -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); }