QMK supports multiple debounce algorithms through its debounce API.
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
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
endif
DEBOUNCE_TYPE | Description | What else is needed |
---|---|---|
Not defined | Use the default algorithm, currently sym_g | Nothing |
custom | Use your own debounce code | SRC += debounce.c add your own debounce.c and implement necessary functions |
anything_else | Use another algorithm from quantum/debounce/* | Nothing |
Regarding split keyboards: The debounce code is compatible with split keyboards.
DEBOUNCE_TYPE = custom
.SRC += debounce.c
debounce.c
. Look at current implementations in quantum/debounce
for examples.You can either use your own code, by including your own debounce.c, or switch to another included one. Included debounce methods are:
DEBOUNCE
milliseconds of no further input for that row.
For use in keyboards where refreshing NUM_KEYS
8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.DEBOUNCE
milliseconds of no further input for that keyDEBOUNCE
milliseconds of no changes has occured, all input changes are pushed.DEBOUNCE
milliseconds of no changes have occured on that key, the key status change is pushed.