aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common_features.mk14
-rw-r--r--docs/config_options.md4
-rw-r--r--docs/feature_debounce_type.md31
-rw-r--r--docs/getting_started_make_guide.md4
-rw-r--r--quantum/debounce/eager_pk.c (renamed from quantum/debounce/debounce_eager_pk.c)0
-rw-r--r--quantum/debounce/readme.md18
-rw-r--r--quantum/debounce/sym_g.c (renamed from quantum/debounce/debounce_sym_g.c)0
-rw-r--r--show_options.mk2
8 files changed, 29 insertions, 44 deletions
diff --git a/common_features.mk b/common_features.mk
index f5bef3d5d..20c38ae82 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -298,19 +298,11 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
298endif 298endif
299 299
300DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce 300DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
301# Debounce Modules. If implemented in matrix.c, don't use these. 301# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
302DEBOUNCE_TYPE?= sym_g 302DEBOUNCE_TYPE?= sym_g
303VALID_DEBOUNCE_TYPES := sym_g eager_pk custom 303ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
304ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),) 304 QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
305 $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
306endif 305endif
307ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
308 QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
309else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
310 QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
311endif
312
313
314 306
315ifeq ($(strip $(SPLIT_KEYBOARD)), yes) 307ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
316 OPT_DEFS += -DSPLIT_KEYBOARD 308 OPT_DEFS += -DSPLIT_KEYBOARD
diff --git a/docs/config_options.md b/docs/config_options.md
index 8fa6e944f..336feee8f 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -307,8 +307,8 @@ Use these to enable or disable building certain features. The more you have enab
307 * Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common 307 * Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
308* `CUSTOM_MATRIX` 308* `CUSTOM_MATRIX`
309 * Allows replacing the standard matrix scanning routine with a custom one. 309 * Allows replacing the standard matrix scanning routine with a custom one.
310* `CUSTOM_DEBOUNCE` 310* `DEBOUNCE_TYPE`
311 * Allows replacing the standard key debouncing routine with a custom one. 311 * Allows replacing the standard key debouncing routine with an alternative or custom one.
312* `WAIT_FOR_USB` 312* `WAIT_FOR_USB`
313 * Forces the keyboard to wait for a USB connection to be established before it starts up 313 * Forces the keyboard to wait for a USB connection to be established before it starts up
314* `NO_USB_STARTUP_CHECK` 314* `NO_USB_STARTUP_CHECK`
diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md
index 82b3d7de1..5d4343f08 100644
--- a/docs/feature_debounce_type.md
+++ b/docs/feature_debounce_type.md
@@ -2,45 +2,38 @@
2 2
3QMK supports multiple debounce algorithms through its debounce API. 3QMK supports multiple debounce algorithms through its debounce API.
4 4
5The underlying debounce algorithm is determined by which matrix.c file you are using.
6
7The logic for which debounce method called is below. It checks various defines that you have set in rules.mk 5The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
8 6
9``` 7```
8DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
10DEBOUNCE_TYPE?= sym_g 9DEBOUNCE_TYPE?= sym_g
11VALID_DEBOUNCE_TYPES := sym_g eager_pk custom 10ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
12ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),) 11 QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
13 $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
14endif
15ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
16 QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
17else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
18 QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
19endif 12endif
20``` 13```
21 14
22# Debounce selection 15# Debounce selection
23 16
24| DEBOUNCE_ALGO | Description | What to do | 17| DEBOUNCE_TYPE | Description | What else is needed |
25| ------------- | --------------------------------------------------- | ----------------------------- | 18| ------------- | --------------------------------------------------- | ----------------------------- |
26| Not defined | You are using the included matrix.c and debounce.c | Nothing. Debounce_sym_g will be compiled, and used if necessary | 19| Not defined | Use the default algorithm, currently sym_g | Nothing |
27| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions | 20| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
28| sym_g / eager_pk | You are using the included matrix.c and debounce.c | Use an alternative debounce algorithm | 21| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
29 22
30**Regarding split keyboards**: 23**Regarding split keyboards**:
31The debounce code is compatible with split keyboards. 24The debounce code is compatible with split keyboards.
32 25
33# Use your own debouncing code 26# Use your own debouncing code
34* Set ```DEBOUNCE_TYPE = custom ```. 27* Set ```DEBOUNCE_TYPE = custom ```.
35* Add ```SRC += debounce.c``` 28* Add ```SRC += debounce.c```
36* Add your own ```debounce.c```. Look at included ```debounce_sym_g.c```s for sample implementations. 29* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
37* Debouncing occurs after every raw matrix scan. 30* Debouncing occurs after every raw matrix scan.
38* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly. 31* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
39 32
40# Changing between included debouncing methods 33# Changing between included debouncing methods
41You can either use your own code, by including your own debounce.c, or switch to another included one. 34You can either use your own code, by including your own debounce.c, or switch to another included one.
42Included debounce methods are: 35Included debounce methods are:
43* debounce_eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key 36* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key
44* debounce_sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed. 37* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.
45 38
46 39
diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md
index bb7e1e7e3..75eafd42c 100644
--- a/docs/getting_started_make_guide.md
+++ b/docs/getting_started_make_guide.md
@@ -143,9 +143,9 @@ As there is no standard split communication driver for ARM-based split keyboards
143 143
144Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan(). 144Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan().
145 145
146`CUSTOM_DEBOUNCE` 146`DEBOUNCE_TYPE`
147 147
148Lets you replace the default key debouncing routine with your own code. You will need to provide your own implementation of debounce(). 148Lets you replace the default key debouncing routine with an alternative one. If `custom` you will need to provide your own implementation.
149 149
150## Customizing Makefile Options on a Per-Keymap Basis 150## Customizing Makefile Options on a Per-Keymap Basis
151 151
diff --git a/quantum/debounce/debounce_eager_pk.c b/quantum/debounce/eager_pk.c
index b8ad09cee..b8ad09cee 100644
--- a/quantum/debounce/debounce_eager_pk.c
+++ b/quantum/debounce/eager_pk.c
diff --git a/quantum/debounce/readme.md b/quantum/debounce/readme.md
index 1a77d44df..5b318d845 100644
--- a/quantum/debounce/readme.md
+++ b/quantum/debounce/readme.md
@@ -6,10 +6,10 @@ Here are a few ideas
6 * Per key - one timer per key 6 * Per key - one timer per key
7 * Per row - one timer per row 7 * Per row - one timer per row
8 8
92) Eager vs symmetric vs assymetric 92) Eager vs symmetric vs asymmetric
10 * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored. 10 * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
11 * Symmetric - wait for no changes for DEBOUNCE ms before reporting change 11 * Symmetric - wait for no changes for DEBOUNCE ms before reporting change
12 * Assymetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up. 12 * Asymmetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up.
13 13
143) Timestamp vs cycles 143) Timestamp vs cycles
15 * old old old code waits n cycles, decreasing count by one each matrix_scan 15 * old old old code waits n cycles, decreasing count by one each matrix_scan
@@ -19,10 +19,10 @@ Here are a few ideas
19The default algorithm is symmetric and global. 19The default algorithm is symmetric and global.
20Here are a few that could be implemented: 20Here are a few that could be implemented:
21 21
22debounce_sym_g.c 22sym_g.c
23debounce_sym_pk.c 23sym_pk.c
24debounce_sym_pr.c 24sym_pr.c
25debounce_sym_pr_cycles.c //currently used in ergo-dox 25sym_pr_cycles.c //currently used in ergo-dox
26debounce_eager_g.c 26eager_g.c
27debounce_eager_pk.c 27eager_pk.c
28debounce_eager_pr.c //could be used in ergo-dox! 28eager_pr.c //could be used in ergo-dox!
diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/sym_g.c
index c8ab34e1a..c8ab34e1a 100644
--- a/quantum/debounce/debounce_sym_g.c
+++ b/quantum/debounce/sym_g.c
diff --git a/show_options.mk b/show_options.mk
index e72dd75cf..c72059118 100644
--- a/show_options.mk
+++ b/show_options.mk
@@ -7,7 +7,7 @@ BUILD_OPTION_NAMES = \
7 NKRO_ENABLE \ 7 NKRO_ENABLE \
8 TERMINAL_ENABLE \ 8 TERMINAL_ENABLE \
9 CUSTOM_MATRIX \ 9 CUSTOM_MATRIX \
10 CUSTOM_DEBOUNCE \ 10 DEBOUNCE_TYPE \
11 SPLIT_KEYBOARD \ 11 SPLIT_KEYBOARD \
12 DYNAMIC_KEYMAP_ENABLE \ 12 DYNAMIC_KEYMAP_ENABLE \
13 USB_HID_ENABLE 13 USB_HID_ENABLE