diff options
Diffstat (limited to 'quantum/debounce')
-rw-r--r-- | quantum/debounce/eager_pk.c | 94 | ||||
-rw-r--r-- | quantum/debounce/eager_pr.c | 82 | ||||
-rw-r--r-- | quantum/debounce/sym_g.c | 41 |
3 files changed, 106 insertions, 111 deletions
diff --git a/quantum/debounce/eager_pk.c b/quantum/debounce/eager_pk.c index c07be18f8..76b978d05 100644 --- a/quantum/debounce/eager_pk.c +++ b/quantum/debounce/eager_pk.c @@ -24,15 +24,15 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. #include <stdlib.h> #ifndef DEBOUNCE -# define DEBOUNCE 5 +# define DEBOUNCE 5 #endif #if (MATRIX_COLS <= 8) -# define ROW_SHIFTER ((uint8_t)1) +# define ROW_SHIFTER ((uint8_t)1) #elif (MATRIX_COLS <= 16) -# define ROW_SHIFTER ((uint16_t)1) +# define ROW_SHIFTER ((uint16_t)1) #elif (MATRIX_COLS <= 32) -# define ROW_SHIFTER ((uint32_t)1) +# define ROW_SHIFTER ((uint32_t)1) #endif #define debounce_counter_t uint8_t @@ -49,66 +49,66 @@ void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t n // we use num_rows rather than MATRIX_ROWS to support split keyboards void debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++] = DEBOUNCE_ELAPSED; + debounce_counters = (debounce_counter_t *)malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); + int i = 0; + for (uint8_t r = 0; r < num_rows; r++) { + for (uint8_t c = 0; c < MATRIX_COLS; c++) { + debounce_counters[i++] = DEBOUNCE_ELAPSED; + } } - } } void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - uint8_t current_time = timer_read() % MAX_DEBOUNCE; - if (counters_need_update) { - update_debounce_counters(num_rows, current_time); - } + uint8_t current_time = timer_read() % MAX_DEBOUNCE; + if (counters_need_update) { + update_debounce_counters(num_rows, current_time); + } - if (changed || matrix_need_update) { - transfer_matrix_values(raw, cooked, num_rows, current_time); - } + if (changed || matrix_need_update) { + transfer_matrix_values(raw, cooked, num_rows, current_time); + } } // If the current time is > debounce counter, set the counter to enable input. void update_debounce_counters(uint8_t num_rows, uint8_t current_time) { - counters_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) { - *debounce_pointer = DEBOUNCE_ELAPSED; - } else { - counters_need_update = true; + counters_need_update = false; + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < num_rows; row++) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + if (*debounce_pointer != DEBOUNCE_ELAPSED) { + if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) { + *debounce_pointer = DEBOUNCE_ELAPSED; + } else { + counters_need_update = true; + } + } + debounce_pointer++; } - } - debounce_pointer++; } - } } // upload from raw_matrix to final matrix; void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) { - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t delta = raw[row] ^ cooked[row]; - matrix_row_t existing_row = cooked[row]; - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); - if (delta & col_mask) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = current_time; - counters_need_update = true; - existing_row ^= col_mask; // flip the bit. - } else { - matrix_need_update = true; + matrix_need_update = false; + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < num_rows; row++) { + matrix_row_t delta = raw[row] ^ cooked[row]; + matrix_row_t existing_row = cooked[row]; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + matrix_row_t col_mask = (ROW_SHIFTER << col); + if (delta & col_mask) { + if (*debounce_pointer == DEBOUNCE_ELAPSED) { + *debounce_pointer = current_time; + counters_need_update = true; + existing_row ^= col_mask; // flip the bit. + } else { + matrix_need_update = true; + } + } + debounce_pointer++; } - } - debounce_pointer++; + cooked[row] = existing_row; } - cooked[row] = existing_row; - } } bool debounce_active(void) { return true; } diff --git a/quantum/debounce/eager_pr.c b/quantum/debounce/eager_pr.c index 8dbfa3fcf..173ad15ee 100644 --- a/quantum/debounce/eager_pr.c +++ b/quantum/debounce/eager_pr.c @@ -24,11 +24,11 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. #include <stdlib.h> #ifndef DEBOUNCE -# define DEBOUNCE 5 +# define DEBOUNCE 5 #endif #define debounce_counter_t uint8_t -static bool matrix_need_update; +static bool matrix_need_update; static debounce_counter_t *debounce_counters; static bool counters_need_update; @@ -41,60 +41,60 @@ void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t n // we use num_rows rather than MATRIX_ROWS to support split keyboards void debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * sizeof(debounce_counter_t)); - for (uint8_t r = 0; r < num_rows; r++) { - debounce_counters[r] = DEBOUNCE_ELAPSED; - } + debounce_counters = (debounce_counter_t *)malloc(num_rows * sizeof(debounce_counter_t)); + for (uint8_t r = 0; r < num_rows; r++) { + debounce_counters[r] = DEBOUNCE_ELAPSED; + } } void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - uint8_t current_time = timer_read() % MAX_DEBOUNCE; - bool needed_update = counters_need_update; - if (counters_need_update) { - update_debounce_counters(num_rows, current_time); - } + uint8_t current_time = timer_read() % MAX_DEBOUNCE; + bool needed_update = counters_need_update; + if (counters_need_update) { + update_debounce_counters(num_rows, current_time); + } - if (changed || (needed_update && !counters_need_update) || matrix_need_update) { - transfer_matrix_values(raw, cooked, num_rows, current_time); - } + if (changed || (needed_update && !counters_need_update) || matrix_need_update) { + transfer_matrix_values(raw, cooked, num_rows, current_time); + } } // If the current time is > debounce counter, set the counter to enable input. void update_debounce_counters(uint8_t num_rows, uint8_t current_time) { - counters_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) { - *debounce_pointer = DEBOUNCE_ELAPSED; - } else { - counters_need_update = true; - } + counters_need_update = false; + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < num_rows; row++) { + if (*debounce_pointer != DEBOUNCE_ELAPSED) { + if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) { + *debounce_pointer = DEBOUNCE_ELAPSED; + } else { + counters_need_update = true; + } + } + debounce_pointer++; } - debounce_pointer++; - } } // upload from raw_matrix to final matrix; void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) { - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t existing_row = cooked[row]; - matrix_row_t raw_row = raw[row]; + matrix_need_update = false; + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < num_rows; row++) { + matrix_row_t existing_row = cooked[row]; + matrix_row_t raw_row = raw[row]; - // determine new value basd on debounce pointer + raw value - if (existing_row != raw_row) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = current_time; - cooked[row] = raw_row; - counters_need_update = true; - } else { - matrix_need_update = true; - } + // determine new value basd on debounce pointer + raw value + if (existing_row != raw_row) { + if (*debounce_pointer == DEBOUNCE_ELAPSED) { + *debounce_pointer = current_time; + cooked[row] = raw_row; + counters_need_update = true; + } else { + matrix_need_update = true; + } + } + debounce_pointer++; } - debounce_pointer++; - } } bool debounce_active(void) { return true; } diff --git a/quantum/debounce/sym_g.c b/quantum/debounce/sym_g.c index c8ab34e1a..3ed9055d2 100644 --- a/quantum/debounce/sym_g.c +++ b/quantum/debounce/sym_g.c @@ -20,38 +20,33 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. #include "timer.h" #include "quantum.h" #ifndef DEBOUNCE - #define DEBOUNCE 5 +# define DEBOUNCE 5 #endif -void debounce_init(uint8_t num_rows) {} +void debounce_init(uint8_t num_rows) {} static bool debouncing = false; #if DEBOUNCE > 0 static uint16_t debouncing_time; -void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) -{ - if (changed) { - debouncing = true; - debouncing_time = timer_read(); - } +void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { + if (changed) { + debouncing = true; + debouncing_time = timer_read(); + } - if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { - for (int i = 0; i < num_rows; i++) { - cooked[i] = raw[i]; + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + for (int i = 0; i < num_rows; i++) { + cooked[i] = raw[i]; + } + debouncing = false; } - debouncing = false; - } } -#else //no debouncing. -void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) -{ - for (int i = 0; i < num_rows; i++) { - cooked[i] = raw[i]; - } +#else // no debouncing. +void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { + for (int i = 0; i < num_rows; i++) { + cooked[i] = raw[i]; + } } #endif -bool debounce_active(void) { - return debouncing; -} - +bool debounce_active(void) { return debouncing; } |