Skip to content

Commit

Permalink
Fix a potential bug in encoder_init(). (#16372)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mtei authored Feb 21, 2022
1 parent ae5f430 commit b1de11c
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion quantum/encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -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); }
Expand All @@ -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);
}

Expand Down

0 comments on commit b1de11c

Please sign in to comment.