From 7d8c62993921383a35f9cd172fe0a1d2e893b2f3 Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sun, 27 Jan 2019 07:23:15 +1100 Subject: Stricter, leaner DEBOUNCE_TYPE section in common_features.mk. Cleanup debounce_type.mk --- common_features.mk | 11 ++++++----- docs/feature_debounce_algo.md | 44 ----------------------------------------- docs/feature_debounce_type.md | 46 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 49 deletions(-) delete mode 100644 docs/feature_debounce_algo.md create mode 100644 docs/feature_debounce_type.md diff --git a/common_features.mk b/common_features.mk index 8e2747d5a..d03dbed09 100644 --- a/common_features.mk +++ b/common_features.mk @@ -265,14 +265,15 @@ endif DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce # Debounce Modules. If implemented in matrix.c, don't use these. -ifeq ($(strip $(DEBOUNCE_TYPE)), custom) - # Do nothing. do your debouncing in matrix.c -else ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g) +DEBOUNCE_TYPE?= sym_g +VALID_DEBOUNCE_TYPES := sym_g eager_pk custom +ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),) + $(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 -else # default algorithm. Won't be used if we have a custom_matrix that doesn't utilize it - QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c endif diff --git a/docs/feature_debounce_algo.md b/docs/feature_debounce_algo.md deleted file mode 100644 index c4ef86fc7..000000000 --- a/docs/feature_debounce_algo.md +++ /dev/null @@ -1,44 +0,0 @@ -# Debounce algorithm - -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 - -``` -ifeq ($(strip $(DEBOUNCE_ALGO)), manual) - # Do nothing. do your debouncing in matrix.c -else ifeq ($(strip $(DEBOUNCE_ALGO)), sym_g) - QUANTUM_SRC += $(DEBOUNCE)/debounce_sym_g.c -else ifeq ($(strip $(DEBOUNCE_ALGO)), eager_pk) - QUANTUM_SRC += $(DEBOUNCE)/debounce_eager_pk.c -else # default algorithm - QUANTUM_SRC += $(DEBOUNCE)/debounce_sym_g.c -endif -``` - -# Debounce selection - -| DEBOUNCE_ALGO | Description | What to do | -| ------------- | --------------------------------------------------- | ----------------------------- | -| Not defined | You are using the included matrix.c and debounce.c | Nothing. Debounce_sym_g will be compiled, and used if necessary | -| manual | 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 | - -**Regarding split keyboards**: -The debounce code is compatible with split keyboards. - -# Use your own debouncing code -* Set ```DEBOUNCE_ALGO = manual```. -* Add ```SRC += debounce.c``` -* Add your own ```debounce.c```. Look at included ```debounce_sym_g.c```s for sample implementations. -* Debouncing occurs after every raw matrix scan. - -# Changing between included debouncing methods -You can either use your own code, by including your own debounce.c, or switch to another included one. -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 -* 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. - - diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md new file mode 100644 index 000000000..82b3d7de1 --- /dev/null +++ b/docs/feature_debounce_type.md @@ -0,0 +1,46 @@ +# Debounce algorithm + +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 + +``` +DEBOUNCE_TYPE?= sym_g +VALID_DEBOUNCE_TYPES := sym_g eager_pk custom +ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),) + $(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 +``` + +# Debounce selection + +| DEBOUNCE_ALGO | Description | What to do | +| ------------- | --------------------------------------------------- | ----------------------------- | +| Not defined | You are using the included matrix.c and debounce.c | Nothing. Debounce_sym_g will be compiled, and used if necessary | +| 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 | + +**Regarding split keyboards**: +The debounce code is compatible with split keyboards. + +# Use your own debouncing code +* Set ```DEBOUNCE_TYPE = custom ```. +* Add ```SRC += debounce.c``` +* Add your own ```debounce.c```. Look at included ```debounce_sym_g.c```s for sample implementations. +* Debouncing occurs after every raw matrix scan. +* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly. + +# Changing between included debouncing methods +You can either use your own code, by including your own debounce.c, or switch to another included one. +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 +* 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. + + -- cgit v1.2.3-24-g4f1b