forked from mirrors/qmk_userspace
		
	Clean up debounce a bit (#5255)
This commit is contained in:
		
					parent
					
						
							
								cdfcbfc92d
							
						
					
				
			
			
				commit
				
					
						c7c4937eef
					
				
			
		
					 8 changed files with 29 additions and 44 deletions
				
			
		| 
						 | 
					@ -298,19 +298,11 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
 | 
					DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
 | 
				
			||||||
# Debounce Modules. If implemented in matrix.c, don't use these.
 | 
					# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
 | 
				
			||||||
DEBOUNCE_TYPE?= sym_g
 | 
					DEBOUNCE_TYPE?= sym_g
 | 
				
			||||||
VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
 | 
					ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
 | 
				
			||||||
ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
 | 
					    QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
 | 
				
			||||||
    $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
 | 
					 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
 | 
					 | 
				
			||||||
    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
 | 
					 | 
				
			||||||
else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
 | 
					 | 
				
			||||||
    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
 | 
					ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
 | 
				
			||||||
    OPT_DEFS += -DSPLIT_KEYBOARD
 | 
					    OPT_DEFS += -DSPLIT_KEYBOARD
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -307,8 +307,8 @@ Use these to enable or disable building certain features. The more you have enab
 | 
				
			||||||
  * 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
 | 
					  * 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
 | 
				
			||||||
* `CUSTOM_MATRIX`
 | 
					* `CUSTOM_MATRIX`
 | 
				
			||||||
  * Allows replacing the standard matrix scanning routine with a custom one.
 | 
					  * Allows replacing the standard matrix scanning routine with a custom one.
 | 
				
			||||||
* `CUSTOM_DEBOUNCE`
 | 
					* `DEBOUNCE_TYPE`
 | 
				
			||||||
  * Allows replacing the standard key debouncing routine with a custom one.
 | 
					  * Allows replacing the standard key debouncing routine with an alternative or custom one.
 | 
				
			||||||
* `WAIT_FOR_USB`
 | 
					* `WAIT_FOR_USB`
 | 
				
			||||||
  * Forces the keyboard to wait for a USB connection to be established before it starts up
 | 
					  * Forces the keyboard to wait for a USB connection to be established before it starts up
 | 
				
			||||||
* `NO_USB_STARTUP_CHECK`
 | 
					* `NO_USB_STARTUP_CHECK`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,30 +2,23 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QMK supports multiple debounce algorithms through its debounce API.
 | 
					QMK supports multiple debounce algorithms through its debounce API.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The underlying debounce algorithm is determined by which matrix.c file you are using.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
 | 
					The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
 | 
				
			||||||
DEBOUNCE_TYPE?= sym_g
 | 
					DEBOUNCE_TYPE?= sym_g
 | 
				
			||||||
VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
 | 
					ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
 | 
				
			||||||
ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
 | 
					    QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
 | 
				
			||||||
    $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
 | 
					 | 
				
			||||||
    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
 | 
					 | 
				
			||||||
else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
 | 
					 | 
				
			||||||
    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
 | 
					 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Debounce selection
 | 
					# Debounce selection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| DEBOUNCE_ALGO    | Description                                                 | What to do                    |
 | 
					| DEBOUNCE_TYPE    | Description                                          | What else is needed           |
 | 
				
			||||||
| -------------    | ---------------------------------------------------         | ----------------------------- |
 | 
					| -------------    | ---------------------------------------------------  | ----------------------------- |
 | 
				
			||||||
| Not defined      | You are using the included matrix.c and debounce.c          | Nothing. Debounce_sym_g will be compiled, and used if necessary |
 | 
					| Not defined      | Use the default algorithm, currently sym_g           | Nothing                       |
 | 
				
			||||||
| custom           | Use your own debounce.c                                     | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
 | 
					| custom           | Use your own debounce.c                              | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
 | 
				
			||||||
| sym_g / eager_pk | You are using the included matrix.c and debounce.c          | Use an alternative debounce algorithm |
 | 
					| anything_else    | Use another algorithm from quantum/debounce/*        | Nothing                       |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Regarding split keyboards**:
 | 
					**Regarding split keyboards**:
 | 
				
			||||||
The debounce code is compatible with split keyboards.
 | 
					The debounce code is compatible with split keyboards.
 | 
				
			||||||
| 
						 | 
					@ -33,14 +26,14 @@ The debounce code is compatible with split keyboards.
 | 
				
			||||||
# Use your own debouncing code
 | 
					# Use your own debouncing code
 | 
				
			||||||
* Set ```DEBOUNCE_TYPE = custom ```.
 | 
					* Set ```DEBOUNCE_TYPE = custom ```.
 | 
				
			||||||
* Add ```SRC += debounce.c```
 | 
					* Add ```SRC += debounce.c```
 | 
				
			||||||
* Add your own ```debounce.c```. Look at included ```debounce_sym_g.c```s for sample implementations.
 | 
					* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
 | 
				
			||||||
* Debouncing occurs after every raw matrix scan.
 | 
					* Debouncing occurs after every raw matrix scan.
 | 
				
			||||||
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
 | 
					* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Changing between included debouncing methods
 | 
					# Changing between included debouncing methods
 | 
				
			||||||
You can either use your own code, by including your own debounce.c, or switch to another included one.
 | 
					You can either use your own code, by including your own debounce.c, or switch to another included one.
 | 
				
			||||||
Included debounce methods are:
 | 
					Included debounce methods are:
 | 
				
			||||||
* 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
 | 
					* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key
 | 
				
			||||||
* 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.
 | 
					* 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -143,9 +143,9 @@ As there is no standard split communication driver for ARM-based split keyboards
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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().
 | 
					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().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`CUSTOM_DEBOUNCE`
 | 
					`DEBOUNCE_TYPE`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Lets you replace the default key debouncing routine with your own code. You will need to provide your own implementation of debounce().
 | 
					Lets you replace the default key debouncing routine with an alternative one. If `custom` you will need to provide your own implementation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Customizing Makefile Options on a Per-Keymap Basis
 | 
					## Customizing Makefile Options on a Per-Keymap Basis
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,10 +6,10 @@ Here are a few ideas
 | 
				
			||||||
 * Per key - one timer per key
 | 
					 * Per key - one timer per key
 | 
				
			||||||
 * Per row - one timer per row
 | 
					 * Per row - one timer per row
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2) Eager vs symmetric vs assymetric
 | 
					2) Eager vs symmetric vs asymmetric
 | 
				
			||||||
 * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
 | 
					 * 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
 | 
					 * 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.
 | 
					 * Asymmetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
3) Timestamp vs cycles
 | 
					3) Timestamp vs cycles
 | 
				
			||||||
 * old old old code waits n cycles, decreasing count by one each matrix_scan
 | 
					 * old old old code waits n cycles, decreasing count by one each matrix_scan
 | 
				
			||||||
| 
						 | 
					@ -19,10 +19,10 @@ Here are a few ideas
 | 
				
			||||||
The default algorithm is symmetric and global.
 | 
					The default algorithm is symmetric and global.
 | 
				
			||||||
Here are a few that could be implemented:
 | 
					Here are a few that could be implemented:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
debounce_sym_g.c
 | 
					sym_g.c
 | 
				
			||||||
debounce_sym_pk.c 
 | 
					sym_pk.c
 | 
				
			||||||
debounce_sym_pr.c 
 | 
					sym_pr.c
 | 
				
			||||||
debounce_sym_pr_cycles.c //currently used in ergo-dox
 | 
					sym_pr_cycles.c //currently used in ergo-dox
 | 
				
			||||||
debounce_eager_g.c
 | 
					eager_g.c
 | 
				
			||||||
debounce_eager_pk.c
 | 
					eager_pk.c
 | 
				
			||||||
debounce_eager_pr.c //could be used in ergo-dox!
 | 
					eager_pr.c //could be used in ergo-dox!
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ BUILD_OPTION_NAMES = \
 | 
				
			||||||
  NKRO_ENABLE \
 | 
					  NKRO_ENABLE \
 | 
				
			||||||
  TERMINAL_ENABLE \
 | 
					  TERMINAL_ENABLE \
 | 
				
			||||||
  CUSTOM_MATRIX \
 | 
					  CUSTOM_MATRIX \
 | 
				
			||||||
  CUSTOM_DEBOUNCE \
 | 
					  DEBOUNCE_TYPE \
 | 
				
			||||||
  SPLIT_KEYBOARD \
 | 
					  SPLIT_KEYBOARD \
 | 
				
			||||||
  DYNAMIC_KEYMAP_ENABLE \
 | 
					  DYNAMIC_KEYMAP_ENABLE \
 | 
				
			||||||
  USB_HID_ENABLE
 | 
					  USB_HID_ENABLE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue