aboutsummaryrefslogtreecommitdiff
path: root/quantum/debounce/eager_pr.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/debounce/eager_pr.c')
-rw-r--r--quantum/debounce/eager_pr.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/quantum/debounce/eager_pr.c b/quantum/debounce/eager_pr.c
index 26b17ed29..8dbfa3fcf 100644
--- a/quantum/debounce/eager_pr.c
+++ b/quantum/debounce/eager_pr.c
@@ -28,6 +28,7 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred.
28#endif 28#endif
29 29
30#define debounce_counter_t uint8_t 30#define debounce_counter_t uint8_t
31static bool matrix_need_update;
31 32
32static debounce_counter_t *debounce_counters; 33static debounce_counter_t *debounce_counters;
33static bool counters_need_update; 34static bool counters_need_update;
@@ -53,7 +54,7 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool
53 update_debounce_counters(num_rows, current_time); 54 update_debounce_counters(num_rows, current_time);
54 } 55 }
55 56
56 if (changed || (needed_update && !counters_need_update)) { 57 if (changed || (needed_update && !counters_need_update) || matrix_need_update) {
57 transfer_matrix_values(raw, cooked, num_rows, current_time); 58 transfer_matrix_values(raw, cooked, num_rows, current_time);
58 } 59 }
59} 60}
@@ -76,18 +77,22 @@ void update_debounce_counters(uint8_t num_rows, uint8_t current_time) {
76 77
77// upload from raw_matrix to final matrix; 78// upload from raw_matrix to final matrix;
78void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) { 79void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) {
80 matrix_need_update = false;
79 debounce_counter_t *debounce_pointer = debounce_counters; 81 debounce_counter_t *debounce_pointer = debounce_counters;
80 for (uint8_t row = 0; row < num_rows; row++) { 82 for (uint8_t row = 0; row < num_rows; row++) {
81 matrix_row_t existing_row = cooked[row]; 83 matrix_row_t existing_row = cooked[row];
82 matrix_row_t raw_row = raw[row]; 84 matrix_row_t raw_row = raw[row];
83 85
84 // determine new value basd on debounce pointer + raw value 86 // determine new value basd on debounce pointer + raw value
85 if (*debounce_pointer == DEBOUNCE_ELAPSED && (existing_row != raw_row)) { 87 if (existing_row != raw_row) {
86 *debounce_pointer = current_time; 88 if (*debounce_pointer == DEBOUNCE_ELAPSED) {
87 cooked[row] = raw_row; 89 *debounce_pointer = current_time;
88 counters_need_update = true; 90 cooked[row] = raw_row;
91 counters_need_update = true;
92 } else {
93 matrix_need_update = true;
94 }
89 } 95 }
90
91 debounce_pointer++; 96 debounce_pointer++;
92 } 97 }
93} 98}