diff options
-rw-r--r-- | common_features.mk | 14 | ||||
-rw-r--r-- | docs/config_options.md | 4 | ||||
-rw-r--r-- | docs/feature_debounce_type.md | 31 | ||||
-rw-r--r-- | docs/getting_started_make_guide.md | 4 | ||||
-rw-r--r-- | quantum/debounce/eager_pk.c (renamed from quantum/debounce/debounce_eager_pk.c) | 0 | ||||
-rw-r--r-- | quantum/debounce/readme.md | 18 | ||||
-rw-r--r-- | quantum/debounce/sym_g.c (renamed from quantum/debounce/debounce_sym_g.c) | 0 | ||||
-rw-r--r-- | show_options.mk | 2 |
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) | |||
298 | endif | 298 | endif |
299 | 299 | ||
300 | DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce | 300 | DEBOUNCE_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. |
302 | DEBOUNCE_TYPE?= sym_g | 302 | DEBOUNCE_TYPE?= sym_g |
303 | VALID_DEBOUNCE_TYPES := sym_g eager_pk custom | 303 | ifneq ($(strip $(DEBOUNCE_TYPE)), custom) |
304 | ifeq ($(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) | ||
306 | endif | 305 | endif |
307 | ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g) | ||
308 | QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c | ||
309 | else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk) | ||
310 | QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c | ||
311 | endif | ||
312 | |||
313 | |||
314 | 306 | ||
315 | ifeq ($(strip $(SPLIT_KEYBOARD)), yes) | 307 | ifeq ($(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 | ||
3 | QMK supports multiple debounce algorithms through its debounce API. | 3 | QMK supports multiple debounce algorithms through its debounce API. |
4 | 4 | ||
5 | The underlying debounce algorithm is determined by which matrix.c file you are using. | ||
6 | |||
7 | The logic for which debounce method called is below. It checks various defines that you have set in rules.mk | 5 | The logic for which debounce method called is below. It checks various defines that you have set in rules.mk |
8 | 6 | ||
9 | ``` | 7 | ``` |
8 | DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce | ||
10 | DEBOUNCE_TYPE?= sym_g | 9 | DEBOUNCE_TYPE?= sym_g |
11 | VALID_DEBOUNCE_TYPES := sym_g eager_pk custom | 10 | ifneq ($(strip $(DEBOUNCE_TYPE)), custom) |
12 | ifeq ($(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) | ||
14 | endif | ||
15 | ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g) | ||
16 | QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c | ||
17 | else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk) | ||
18 | QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c | ||
19 | endif | 12 | endif |
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**: |
31 | The debounce code is compatible with split keyboards. | 24 | The 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 |
41 | You can either use your own code, by including your own debounce.c, or switch to another included one. | 34 | You can either use your own code, by including your own debounce.c, or switch to another included one. |
42 | Included debounce methods are: | 35 | Included 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 | ||
144 | Lets 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(). | 144 | Lets 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 | ||
148 | Lets you replace the default key debouncing routine with your own code. You will need to provide your own implementation of debounce(). | 148 | Lets 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 | ||
9 | 2) Eager vs symmetric vs assymetric | 9 | 2) 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 | ||
14 | 3) Timestamp vs cycles | 14 | 3) 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 | |||
19 | The default algorithm is symmetric and global. | 19 | The default algorithm is symmetric and global. |
20 | Here are a few that could be implemented: | 20 | Here are a few that could be implemented: |
21 | 21 | ||
22 | debounce_sym_g.c | 22 | sym_g.c |
23 | debounce_sym_pk.c | 23 | sym_pk.c |
24 | debounce_sym_pr.c | 24 | sym_pr.c |
25 | debounce_sym_pr_cycles.c //currently used in ergo-dox | 25 | sym_pr_cycles.c //currently used in ergo-dox |
26 | debounce_eager_g.c | 26 | eager_g.c |
27 | debounce_eager_pk.c | 27 | eager_pk.c |
28 | debounce_eager_pr.c //could be used in ergo-dox! | 28 | eager_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 |