aboutsummaryrefslogtreecommitdiffstats
path: root/quantum/debounce
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/debounce')
-rw-r--r--quantum/debounce/eager_pk.c94
-rw-r--r--quantum/debounce/eager_pr.c82
-rw-r--r--quantum/debounce/sym_g.c41
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; }