diff options
Diffstat (limited to 'quantum/debounce')
-rw-r--r-- | quantum/debounce/eager_pk.c | 12 | ||||
-rw-r--r-- | quantum/debounce/eager_pr.c | 12 |
2 files changed, 22 insertions, 2 deletions
diff --git a/quantum/debounce/eager_pk.c b/quantum/debounce/eager_pk.c index 76b978d059..4676892243 100644 --- a/quantum/debounce/eager_pk.c +++ b/quantum/debounce/eager_pk.c @@ -44,6 +44,16 @@ static bool matrix_need_update; #define DEBOUNCE_ELAPSED 251 #define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) +static uint8_t wrapping_timer_read(void) { + static uint16_t time = 0; + static uint8_t last_result = 0; + uint16_t new_time = timer_read(); + uint16_t diff = new_time - time; + time = new_time; + last_result = (last_result + diff) % (MAX_DEBOUNCE + 1); + return last_result; +} + void update_debounce_counters(uint8_t num_rows, uint8_t current_time); void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time); @@ -59,7 +69,7 @@ void debounce_init(uint8_t num_rows) { } void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - uint8_t current_time = timer_read() % MAX_DEBOUNCE; + uint8_t current_time = wrapping_timer_read(); if (counters_need_update) { update_debounce_counters(num_rows, current_time); } diff --git a/quantum/debounce/eager_pr.c b/quantum/debounce/eager_pr.c index 173ad15ee9..41843aedbc 100644 --- a/quantum/debounce/eager_pr.c +++ b/quantum/debounce/eager_pr.c @@ -36,6 +36,16 @@ static bool counters_need_update; #define DEBOUNCE_ELAPSED 251 #define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) +static uint8_t wrapping_timer_read(void) { + static uint16_t time = 0; + static uint8_t last_result = 0; + uint16_t new_time = timer_read(); + uint16_t diff = new_time - time; + time = new_time; + last_result = (last_result + diff) % (MAX_DEBOUNCE + 1); + return last_result; +} + void update_debounce_counters(uint8_t num_rows, uint8_t current_time); void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time); @@ -48,7 +58,7 @@ void debounce_init(uint8_t num_rows) { } void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - uint8_t current_time = timer_read() % MAX_DEBOUNCE; + uint8_t current_time = wrapping_timer_read(); bool needed_update = counters_need_update; if (counters_need_update) { update_debounce_counters(num_rows, current_time); |