Browse Source

Clean up debounce a bit (#5255)

pjones-keymap
James Churchill 3 months ago
parent
commit
c7c4937eef

+ 3
- 11
common_features.mk View File

@@ -298,19 +298,11 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
298 298
 endif
299 299
 
300 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 302
 DEBOUNCE_TYPE?= sym_g
303
-VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
304
-ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
305
-    $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
303
+ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
304
+    QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
306 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 307
 ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
316 308
     OPT_DEFS += -DSPLIT_KEYBOARD

+ 2
- 2
docs/config_options.md View File

@@ -307,8 +307,8 @@ Use these to enable or disable building certain features. The more you have enab
307 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 308
 * `CUSTOM_MATRIX`
309 309
   * Allows replacing the standard matrix scanning routine with a custom one.
310
-* `CUSTOM_DEBOUNCE`
311
-  * Allows replacing the standard key debouncing routine with a custom one.
310
+* `DEBOUNCE_TYPE`
311
+  * Allows replacing the standard key debouncing routine with an alternative or custom one.
312 312
 * `WAIT_FOR_USB`
313 313
   * Forces the keyboard to wait for a USB connection to be established before it starts up
314 314
 * `NO_USB_STARTUP_CHECK`

+ 12
- 19
docs/feature_debounce_type.md View File

@@ -2,45 +2,38 @@
2 2
 
3 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 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 9
 DEBOUNCE_TYPE?= sym_g
11
-VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
12
-ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
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
10
+ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
11
+    QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
19 12
 endif
20 13
 ```
21 14
 
22 15
 # Debounce selection
23 16
 
24
-| DEBOUNCE_ALGO    | Description                                                 | What to do                    |
25
-| -------------    | ---------------------------------------------------         | ----------------------------- |
26
-| Not defined      | You are using the included matrix.c and debounce.c          | Nothing. Debounce_sym_g will be compiled, and used if necessary |
27
-| 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 |
17
+| DEBOUNCE_TYPE    | Description                                          | What else is needed           |
18
+| -------------    | ---------------------------------------------------  | ----------------------------- |
19
+| Not defined      | Use the default algorithm, currently sym_g           | Nothing                       |
20
+| custom           | Use your own debounce.c                              | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
21
+| anything_else    | Use another algorithm from quantum/debounce/*        | Nothing                       |
29 22
 
30
-**Regarding split keyboards**: 
23
+**Regarding split keyboards**:
31 24
 The debounce code is compatible with split keyboards.
32 25
 
33 26
 # Use your own debouncing code
34 27
 * Set ```DEBOUNCE_TYPE = custom ```.
35 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 30
 * Debouncing occurs after every raw matrix scan.
38 31
 * Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
39 32
 
40 33
 # Changing between included debouncing methods
41 34
 You can either use your own code, by including your own debounce.c, or switch to another included one.
42 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
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.
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
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
 

+ 2
- 2
docs/getting_started_make_guide.md View File

@@ -143,9 +143,9 @@ As there is no standard split communication driver for ARM-based split keyboards
143 143
 
144 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 150
 ## Customizing Makefile Options on a Per-Keymap Basis
151 151
 

quantum/debounce/debounce_eager_pk.c → quantum/debounce/eager_pk.c View File


+ 9
- 9
quantum/debounce/readme.md View File

@@ -6,10 +6,10 @@ Here are a few ideas
6 6
  * Per key - one timer per key
7 7
  * Per row - one timer per row
8 8
 
9
-2) Eager vs symmetric vs assymetric
9
+2) Eager vs symmetric vs asymmetric
10 10
  * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
11 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 14
 3) Timestamp vs cycles
15 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 19
 The default algorithm is symmetric and global.
20 20
 Here are a few that could be implemented:
21 21
 
22
-debounce_sym_g.c
23
-debounce_sym_pk.c 
24
-debounce_sym_pr.c 
25
-debounce_sym_pr_cycles.c //currently used in ergo-dox
26
-debounce_eager_g.c
27
-debounce_eager_pk.c
28
-debounce_eager_pr.c //could be used in ergo-dox!
22
+sym_g.c
23
+sym_pk.c
24
+sym_pr.c
25
+sym_pr_cycles.c //currently used in ergo-dox
26
+eager_g.c
27
+eager_pk.c
28
+eager_pr.c //could be used in ergo-dox!

quantum/debounce/debounce_sym_g.c → quantum/debounce/sym_g.c View File


+ 1
- 1
show_options.mk View File

@@ -7,7 +7,7 @@ BUILD_OPTION_NAMES = \
7 7
   NKRO_ENABLE \
8 8
   TERMINAL_ENABLE \
9 9
   CUSTOM_MATRIX \
10
-  CUSTOM_DEBOUNCE \
10
+  DEBOUNCE_TYPE \
11 11
   SPLIT_KEYBOARD \
12 12
   DYNAMIC_KEYMAP_ENABLE \
13 13
   USB_HID_ENABLE

Loading…
Cancel
Save