From 3cf7f7322c24e3cab21d402f1a859b60df857603 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Wed, 29 Aug 2018 10:19:36 +1000 Subject: Removed "debounce_algo = manual" in all keyboards with CUSTOM_MATRIX = yes. --- quantum/matrix.c | 79 +++----------------------------------------------------- 1 file changed, 3 insertions(+), 76 deletions(-) (limited to 'quantum') diff --git a/quantum/matrix.c b/quantum/matrix.c index 3600d4e7b..bc7eb6b58 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -27,17 +27,6 @@ along with this program. If not, see . #include "timer.h" -/* Set 0 if debouncing isn't needed */ - -#ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 -#endif - -#if (DEBOUNCING_DELAY > 0) - static uint16_t debouncing_time; - static bool debouncing = false; -#endif - #if (MATRIX_COLS <= 8) # define print_matrix_header() print("\nr/c 01234567\n") # define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) @@ -67,8 +56,6 @@ static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - #if (DIODE_DIRECTION == COL2ROW) static void init_cols(void); @@ -122,30 +109,6 @@ uint8_t matrix_cols(void) { return MATRIX_COLS; } -// void matrix_power_up(void) { -// #if (DIODE_DIRECTION == COL2ROW) -// for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { -// /* DDRxn */ -// _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF); -// toggle_row(r); -// } -// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { -// /* PORTxn */ -// _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF); -// } -// #elif (DIODE_DIRECTION == ROW2COL) -// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { -// /* DDRxn */ -// _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF); -// toggle_col(c); -// } -// for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { -// /* PORTxn */ -// _SFR_IO8((row_pins[r] >> 4) + 2) |= _BV(row_pins[r] & 0xF); -// } -// #endif -// } - void matrix_init(void) { // initialize row and col @@ -160,7 +123,6 @@ void matrix_init(void) { // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - matrix_debouncing[i] = 0; } matrix_init_quantum(); @@ -170,59 +132,24 @@ uint8_t matrix_scan(void) { #if (DIODE_DIRECTION == COL2ROW) - // Set row, read cols for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row); - - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } - -# else - read_cols_on_row(matrix, current_row); -# endif - + read_cols_on_row(matrix, current_row); } - #elif (DIODE_DIRECTION == ROW2COL) - // Set col, read rows for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col); - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } -# else - read_rows_on_col(matrix, current_col); -# endif - + read_rows_on_col(matrix, current_col); } - #endif -# if (DEBOUNCING_DELAY > 0) - if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - debouncing = false; - } -# endif - matrix_scan_quantum(); return 1; } +//Deprecated. bool matrix_is_modified(void) { -#if (DEBOUNCING_DELAY > 0) - if (debouncing) return false; -#endif return true; } -- cgit v1.2.3-24-g4f1b From d0b691df0ee74863ca54ca697aa4d4212cf401a7 Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sat, 26 Jan 2019 17:03:46 +1100 Subject: DO NOT USE - debounce successfully compiled. --- quantum/debounce.c | 52 --------------- quantum/debounce.h | 25 +++++-- quantum/debounce/debounce_eager_pk.c | 123 +++++++++++++++++++++++++++++++++++ quantum/debounce/debounce_sym_g.c | 58 +++++++++++++++++ quantum/debounce/readme.md | 28 ++++++++ quantum/matrix.c | 9 ++- 6 files changed, 233 insertions(+), 62 deletions(-) delete mode 100644 quantum/debounce.c create mode 100644 quantum/debounce/debounce_eager_pk.c create mode 100644 quantum/debounce/debounce_sym_g.c create mode 100644 quantum/debounce/readme.md (limited to 'quantum') diff --git a/quantum/debounce.c b/quantum/debounce.c deleted file mode 100644 index 929023ab2..000000000 --- a/quantum/debounce.c +++ /dev/null @@ -1,52 +0,0 @@ - -#include "matrix.h" -#include "timer.h" -#include "quantum.h" - -#ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 -#endif - -void debounce_init(uint8_t num_rows) { -} - -#if DEBOUNCING_DELAY > 0 - -static bool debouncing = false; - -void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - static uint16_t debouncing_time; - - if (changed) { - debouncing = true; - debouncing_time = timer_read(); - } - - if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { - for (uint8_t i = 0; i < num_rows; i++) { - cooked[i] = raw[i]; - } - debouncing = false; - } -} - -bool debounce_active(void) { - return debouncing; -} - -#else - -// no debounce -void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - if (changed) - { - for (uint8_t i = 0; i < num_rows; i++) { - cooked[i] = raw[i]; - } - } -} - -bool debounce_active(void) { - return false; -} -#endif diff --git a/quantum/debounce.h b/quantum/debounce.h index 360af77e7..7fe2d693d 100644 --- a/quantum/debounce.h +++ b/quantum/debounce.h @@ -1,11 +1,26 @@ #pragma once +/* +Copyright 2017 Alex Ong +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + + +#include "matrix.h" + +void debounce_init(void); //every debounce algorithm will have unique storage needs. // raw is the current key state -// on entry cooked is the previous debounced state -// on exit cooked is the current debounced state +// cooked is the debounced input/output key state // changed is true if raw has changed since the last call -void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); +void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed); bool debounce_active(void); - -void debounce_init(uint8_t num_rows); \ No newline at end of file diff --git a/quantum/debounce/debounce_eager_pk.c b/quantum/debounce/debounce_eager_pk.c new file mode 100644 index 000000000..e6e8bfd31 --- /dev/null +++ b/quantum/debounce/debounce_eager_pk.c @@ -0,0 +1,123 @@ +/* +Copyright 2017 Alex Ong +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +/* +Basic per-key algorithm. Uses an 8-bit counter per key. +After pressing a key, it immediately changes state, and sets a counter. +No further inputs are accepted until DEBOUNCE milliseconds have occurred. +*/ + +#include "debounce.h" +#include "matrix.h" +#include "timer.h" + +#ifndef DEBOUNCE + #define DEBOUNCE 5 +#endif + + +#if (MATRIX_COLS <= 8) +# define ROW_SHIFTER ((uint8_t)1) +#elif (MATRIX_COLS <= 16) +# define ROW_SHIFTER ((uint16_t)1) +#elif (MATRIX_COLS <= 32) +# define ROW_SHIFTER ((uint32_t)1) +#endif + + + +#define debounce_counter_t uint8_t + +static matrix_row_t matrix_debounced[MATRIX_ROWS]; +static debounce_counter_t debounce_counters[MATRIX_ROWS*MATRIX_COLS]; + +#define DEBOUNCE_ELAPSED 251 +#define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) + +void update_debounce_counters(uint8_t current_time); +void transfer_matrix_values(uint8_t current_time); + +void matrix_debounce_init(void) +{ + for (uint8_t r = 0; r < MATRIX_ROWS; r++) + { + matrix_debounced[r] = 0; + } + + int i = 0; + for (uint8_t r = 0; r < MATRIX_ROWS; r++) + { + for (uint8_t c = 0; c < MATRIX_COLS; c++) + { + debounce_counters[i++] = DEBOUNCE_ELAPSED; + } + } +} + +void matrix_debounce(void) +{ + uint8_t current_time = timer_read() % MAX_DEBOUNCE; + update_debounce_counters(current_time); + transfer_matrix_values(current_time); +} + +//If the current time is > debounce counter, set the counter to enable input. +void update_debounce_counters(uint8_t current_time) +{ + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < MATRIX_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) >= + DEBOUNCING_DELAY) { + *debounce_pointer = DEBOUNCE_ELAPSED; + } + } + debounce_pointer++; + } + } +} + +// upload from raw_matrix to final matrix; +void transfer_matrix_values(uint8_t current_time) +{ + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < MATRIX_ROWS; row++) + { + matrix_row_t existing_row = matrix_debounced[row]; + matrix_row_t raw_row = matrix_get_row(row); + + for (uint8_t col = 0; col < MATRIX_COLS; col++) + { + matrix_row_t col_mask = (ROW_SHIFTER << col); + bool final_value = raw_row & col_mask; + bool existing_value = existing_row & col_mask; + if (*debounce_pointer == DEBOUNCE_ELAPSED && + (existing_value != final_value)) + { + *debounce_pointer = current_time; + existing_row ^= col_mask; //flip the bit. + } + debounce_pointer++; + } + matrix_debounced[row] = existing_row; + } +} + + + +//Implementation of no debounce. diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/debounce_sym_g.c new file mode 100644 index 000000000..c206f2864 --- /dev/null +++ b/quantum/debounce/debounce_sym_g.c @@ -0,0 +1,58 @@ +/* +Copyright 2017 Alex Ong +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +/* +Basic global debounce algorithm. Used in 99% of keyboards at time of implementation +When no state changes have occured for DEBOUNCE milliseconds, we push the state. +*/ +#include "debounce.h" +#include "matrix.h" +#include "timer.h" +#ifndef DEBOUNCE + #define DEBOUNCE 5 +#endif + +static bool debouncing = false; +static uint16_t debouncing_time; + +void debounce_init(void) {} + +#if DEBOUNCE > 0 +void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed) +{ + if (changed) { + debouncing = true; + debouncing_time = timer_read(); + } + + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + for (int i = 0; i < MATRIX_ROWS; i++) { + cooked[i] = raw[i]; + } + debouncing = false; + } +} +#else //no debouncing. +void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed) +{ + for (int i = 0; i < MATRIX_ROWS; i++) { + cooked[i] = raw[i]; + } +} +#endif + +bool debounce_active() { + return debouncing; +} + diff --git a/quantum/debounce/readme.md b/quantum/debounce/readme.md new file mode 100644 index 000000000..1a77d44df --- /dev/null +++ b/quantum/debounce/readme.md @@ -0,0 +1,28 @@ +Debounce algorithms belong in this folder. +Here are a few ideas + +1) Global vs Per-Key vs Per-Row + * Global - one timer for all keys. Any key change state affects global timer + * Per key - one timer per key + * Per row - one timer per row + +2) Eager vs symmetric vs assymetric + * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored. + * Symmetric - wait for no changes for DEBOUNCE ms before reporting change + * Assymetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up. + +3) Timestamp vs cycles + * old old old code waits n cycles, decreasing count by one each matrix_scan + * newer code stores the millisecond the change occurred, and does subraction to figure out time elapsed. + * Timestamps are superior, i don't think cycles will ever be used again once upgraded. + +The default algorithm is symmetric and global. +Here are a few that could be implemented: + +debounce_sym_g.c +debounce_sym_pk.c +debounce_sym_pr.c +debounce_sym_pr_cycles.c //currently used in ergo-dox +debounce_eager_g.c +debounce_eager_pk.c +debounce_eager_pr.c //could be used in ergo-dox! diff --git a/quantum/matrix.c b/quantum/matrix.c index 71292db51..8fc4175bd 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -51,9 +51,8 @@ static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; #endif /* matrix state(1:on, 0:off) */ -static matrix_row_t raw_matrix[MATRIX_ROWS]; - -static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values +static matrix_row_t matrix[MATRIX_ROWS]; //debounced values #if (DIODE_DIRECTION == COL2ROW) static void init_cols(void); @@ -123,7 +122,7 @@ void matrix_init(void) { raw_matrix[i] = 0; matrix[i] = 0; } - debounce_init(MATRIX_ROWS); + debounce_init(); matrix_init_quantum(); } @@ -144,7 +143,7 @@ uint8_t matrix_scan(void) } #endif - debounce(raw_matrix, matrix, MATRIX_ROWS, changed); + debounce(raw_matrix, matrix, changed); matrix_scan_quantum(); return 1; -- cgit v1.2.3-24-g4f1b From 123608fb318a42500d64d29aa46c7d08140033fd Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sat, 26 Jan 2019 17:10:27 +1100 Subject: DO NOT USE Revert back to original API to support split_keyboards. --- quantum/debounce.h | 4 ++-- quantum/debounce/debounce_sym_g.c | 8 ++++---- quantum/matrix.c | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce.h b/quantum/debounce.h index 7fe2d693d..34b952ee7 100644 --- a/quantum/debounce.h +++ b/quantum/debounce.h @@ -16,11 +16,11 @@ along with this program. If not, see . #include "matrix.h" -void debounce_init(void); //every debounce algorithm will have unique storage needs. +void debounce_init(uint8_t num_rows); //every debounce algorithm will have unique storage needs. // raw is the current key state // cooked is the debounced input/output key state // changed is true if raw has changed since the last call -void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed); +void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); bool debounce_active(void); diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/debounce_sym_g.c index c206f2864..4a6996c73 100644 --- a/quantum/debounce/debounce_sym_g.c +++ b/quantum/debounce/debounce_sym_g.c @@ -26,10 +26,10 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. static bool debouncing = false; static uint16_t debouncing_time; -void debounce_init(void) {} +void debounce_init(uint8_t num_rows) {} #if DEBOUNCE > 0 -void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed) +void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { if (changed) { debouncing = true; @@ -37,14 +37,14 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed) } if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { - for (int i = 0; i < MATRIX_ROWS; i++) { + for (int i = 0; i < num_rows; i++) { cooked[i] = raw[i]; } debouncing = false; } } #else //no debouncing. -void debounce(matrix_row_t raw[], matrix_row_t cooked[], bool changed) +void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { for (int i = 0; i < MATRIX_ROWS; i++) { cooked[i] = raw[i]; diff --git a/quantum/matrix.c b/quantum/matrix.c index 8fc4175bd..5b7a0e03b 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -122,7 +122,7 @@ void matrix_init(void) { raw_matrix[i] = 0; matrix[i] = 0; } - debounce_init(); + debounce_init(MATRIX_ROWS); matrix_init_quantum(); } @@ -143,7 +143,7 @@ uint8_t matrix_scan(void) } #endif - debounce(raw_matrix, matrix, changed); + debounce(raw_matrix, matrix, MATRIX_ROWS, changed); matrix_scan_quantum(); return 1; -- cgit v1.2.3-24-g4f1b From 4d8733591f30a299d6ac99165c834162d2c08fd1 Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sat, 26 Jan 2019 17:29:02 +1100 Subject: Working eager_pk --- quantum/debounce/debounce_eager_pk.c | 41 ++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 23 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce/debounce_eager_pk.c b/quantum/debounce/debounce_eager_pk.c index e6e8bfd31..f1457496e 100644 --- a/quantum/debounce/debounce_eager_pk.c +++ b/quantum/debounce/debounce_eager_pk.c @@ -39,22 +39,16 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. #define debounce_counter_t uint8_t -static matrix_row_t matrix_debounced[MATRIX_ROWS]; static debounce_counter_t debounce_counters[MATRIX_ROWS*MATRIX_COLS]; #define DEBOUNCE_ELAPSED 251 #define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) -void update_debounce_counters(uint8_t current_time); -void transfer_matrix_values(uint8_t current_time); +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); -void matrix_debounce_init(void) +void debounce_init(uint8_t num_rows) { - for (uint8_t r = 0; r < MATRIX_ROWS; r++) - { - matrix_debounced[r] = 0; - } - int i = 0; for (uint8_t r = 0; r < MATRIX_ROWS; r++) { @@ -65,25 +59,24 @@ void matrix_debounce_init(void) } } -void matrix_debounce(void) +void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { uint8_t current_time = timer_read() % MAX_DEBOUNCE; - update_debounce_counters(current_time); - transfer_matrix_values(current_time); + update_debounce_counters(num_rows, current_time); + 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 current_time) +void update_debounce_counters(uint8_t num_rows, uint8_t current_time) { debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < MATRIX_ROWS; row++) + 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) >= - DEBOUNCING_DELAY) { + if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) { *debounce_pointer = DEBOUNCE_ELAPSED; } } @@ -93,13 +86,13 @@ void update_debounce_counters(uint8_t current_time) } // upload from raw_matrix to final matrix; -void transfer_matrix_values(uint8_t current_time) +void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) { debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < MATRIX_ROWS; row++) + for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t existing_row = matrix_debounced[row]; - matrix_row_t raw_row = matrix_get_row(row); + matrix_row_t existing_row = cooked[row]; + matrix_row_t raw_row = raw[row]; for (uint8_t col = 0; col < MATRIX_COLS; col++) { @@ -114,10 +107,12 @@ void transfer_matrix_values(uint8_t current_time) } debounce_pointer++; } - matrix_debounced[row] = existing_row; + cooked[row] = existing_row; } } +bool debounce_active() +{ + return true; +} - -//Implementation of no debounce. -- cgit v1.2.3-24-g4f1b From 5b7fc758d7b0d0ef24bc2861c4b2ba6708fbd367 Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sat, 26 Jan 2019 17:46:27 +1100 Subject: Restored debounce.h since there wasnt any real change. --- quantum/debounce.h | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce.h b/quantum/debounce.h index 34b952ee7..8397823eb 100644 --- a/quantum/debounce.h +++ b/quantum/debounce.h @@ -1,26 +1,13 @@ #pragma once -/* -Copyright 2017 Alex Ong -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - #include "matrix.h" -void debounce_init(uint8_t num_rows); //every debounce algorithm will have unique storage needs. - // raw is the current key state -// cooked is the debounced input/output key state +// on entry cooked is the previous debounced state +// on exit cooked is the current debounced state // changed is true if raw has changed since the last call void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); bool debounce_active(void); + +void debounce_init(uint8_t num_rows); -- cgit v1.2.3-24-g4f1b From 14ed96aa064323acb0f8ceecaee3516fb372a56c Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sat, 26 Jan 2019 18:26:49 +1100 Subject: Moved debouncing_time variable to inside #if debounce --- quantum/debounce/debounce_sym_g.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/debounce_sym_g.c index 4a6996c73..e365cdf03 100644 --- a/quantum/debounce/debounce_sym_g.c +++ b/quantum/debounce/debounce_sym_g.c @@ -23,12 +23,11 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. #define DEBOUNCE 5 #endif -static bool debouncing = false; -static uint16_t debouncing_time; - 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) { -- cgit v1.2.3-24-g4f1b From b5b119544a4e943b3eb56f6a32f350c428f532f7 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Sat, 26 Jan 2019 22:44:33 +1100 Subject: Removed #include "matrix.h" from debounce.h --- quantum/debounce.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce.h b/quantum/debounce.h index 8397823eb..9ca05c682 100644 --- a/quantum/debounce.h +++ b/quantum/debounce.h @@ -1,7 +1,5 @@ #pragma once -#include "matrix.h" - // raw is the current key state // on entry cooked is the previous debounced state // on exit cooked is the current debounced state -- cgit v1.2.3-24-g4f1b From 7cb8d3c7a7fe4de4629af21a92f5415cdfdffa0c Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Sat, 26 Jan 2019 22:45:25 +1100 Subject: Bug fix - was using MATRIX_ROWS instead of num_rows --- quantum/debounce/debounce_sym_g.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'quantum') diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/debounce_sym_g.c index e365cdf03..63bf2a64b 100644 --- a/quantum/debounce/debounce_sym_g.c +++ b/quantum/debounce/debounce_sym_g.c @@ -45,7 +45,7 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool #else //no debouncing. void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - for (int i = 0; i < MATRIX_ROWS; i++) { + for (int i = 0; i < num_rows; i++) { cooked[i] = raw[i]; } } -- cgit v1.2.3-24-g4f1b From 039dde3a519d0626b9dbb2c79373f28b36d29af7 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Sat, 26 Jan 2019 22:57:39 +1100 Subject: Fixed compilation error with debounce_sym_g --- quantum/debounce/debounce_sym_g.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/debounce_sym_g.c index 63bf2a64b..c8ab34e1a 100644 --- a/quantum/debounce/debounce_sym_g.c +++ b/quantum/debounce/debounce_sym_g.c @@ -16,9 +16,9 @@ along with this program. If not, see . Basic global debounce algorithm. Used in 99% of keyboards at time of implementation When no state changes have occured for DEBOUNCE milliseconds, we push the state. */ -#include "debounce.h" #include "matrix.h" #include "timer.h" +#include "quantum.h" #ifndef DEBOUNCE #define DEBOUNCE 5 #endif @@ -51,7 +51,7 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool } #endif -bool debounce_active() { +bool debounce_active(void) { return debouncing; } -- cgit v1.2.3-24-g4f1b From 10cc4235155d0a039faf2dc5c2b1ebe513952c3c Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sat, 26 Jan 2019 23:18:24 +1100 Subject: Malloc array in debounce_eager_pk, since split keyboards only use MATRIX_ROWS/2. --- quantum/debounce/debounce_eager_pk.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce/debounce_eager_pk.c b/quantum/debounce/debounce_eager_pk.c index f1457496e..af11362ef 100644 --- a/quantum/debounce/debounce_eager_pk.c +++ b/quantum/debounce/debounce_eager_pk.c @@ -21,6 +21,7 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. #include "debounce.h" #include "matrix.h" #include "timer.h" +#include #ifndef DEBOUNCE #define DEBOUNCE 5 @@ -39,7 +40,7 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. #define debounce_counter_t uint8_t -static debounce_counter_t debounce_counters[MATRIX_ROWS*MATRIX_COLS]; +static debounce_counter_t *debounce_counters; #define DEBOUNCE_ELAPSED 251 #define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) @@ -47,10 +48,12 @@ static debounce_counter_t debounce_counters[MATRIX_ROWS*MATRIX_COLS]; 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); +//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 < MATRIX_ROWS; r++) + for (uint8_t r = 0; r < num_rows; r++) { for (uint8_t c = 0; c < MATRIX_COLS; c++) { -- cgit v1.2.3-24-g4f1b From 562c0d702a326488d79963969ef71f2a52664cdc Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sun, 27 Jan 2019 00:10:14 +1100 Subject: Fix compile error in debounce_eager_pk --- quantum/debounce/debounce_eager_pk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'quantum') diff --git a/quantum/debounce/debounce_eager_pk.c b/quantum/debounce/debounce_eager_pk.c index af11362ef..b8ad09cee 100644 --- a/quantum/debounce/debounce_eager_pk.c +++ b/quantum/debounce/debounce_eager_pk.c @@ -18,9 +18,9 @@ After pressing a key, it immediately changes state, and sets a counter. No further inputs are accepted until DEBOUNCE milliseconds have occurred. */ -#include "debounce.h" #include "matrix.h" #include "timer.h" +#include "quantum.h" #include #ifndef DEBOUNCE @@ -114,7 +114,7 @@ void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t n } } -bool debounce_active() +bool debounce_active(void) { return true; } -- cgit v1.2.3-24-g4f1b