diff options
author | Roland Huber <36362570+darkcruix@users.noreply.github.com> | 2021-06-20 04:28:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-19 19:28:54 -0700 |
commit | e4c5b1bbbb3d76a7632c8a9d5c19c5eb8a9a4e1f (patch) | |
tree | e94137d55f583c5dae90e6826acce0d613eef9a7 /drivers/haptic | |
parent | f6ac5abd95f5689542b0240a8e333ab9b3f591af (diff) | |
download | qmk_firmware-e4c5b1bbbb3d76a7632c8a9d5c19c5eb8a9a4e1f.tar.gz qmk_firmware-e4c5b1bbbb3d76a7632c8a9d5c19c5eb8a9a4e1f.zip |
Add Per Key exclusions for Haptic Feedback (#12386)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'drivers/haptic')
-rw-r--r-- | drivers/haptic/haptic.c | 71 |
1 files changed, 69 insertions, 2 deletions
diff --git a/drivers/haptic/haptic.c b/drivers/haptic/haptic.c index de3f400527..3fab1be1ae 100644 --- a/drivers/haptic/haptic.c +++ b/drivers/haptic/haptic.c @@ -291,6 +291,73 @@ void haptic_play(void) { #endif } +__attribute__((weak)) bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { +# ifdef NO_HAPTIC_MOD + case QK_MOD_TAP ... QK_MOD_TAP_MAX: + if (record->tap.count == 0) return false; + break; + case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX: + if (record->tap.count != TAPPING_TOGGLE) return false; + break; + case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: + if (record->tap.count == 0) return false; + break; + case KC_LCTRL ... KC_RGUI: + case QK_MOMENTARY ... QK_MOMENTARY_MAX: +# endif +# ifdef NO_HAPTIC_FN + case KC_FN0 ... KC_FN31: +# endif +# ifdef NO_HAPTIC_ALPHA + case KC_A ... KC_Z: +# endif +# ifdef NO_HAPTIC_PUNCTUATION + case KC_ENTER: + case KC_ESCAPE: + case KC_BSPACE: + case KC_SPACE: + case KC_MINUS: + case KC_EQUAL: + case KC_LBRACKET: + case KC_RBRACKET: + case KC_BSLASH: + case KC_NONUS_HASH: + case KC_SCOLON: + case KC_QUOTE: + case KC_GRAVE: + case KC_COMMA: + case KC_SLASH: + case KC_DOT: + case KC_NONUS_BSLASH: +# endif +# ifdef NO_HAPTIC_LOCKKEYS + case KC_CAPSLOCK: + case KC_SCROLLLOCK: + case KC_NUMLOCK: +# endif +# ifdef NO_HAPTIC_NAV + case KC_PSCREEN: + case KC_PAUSE: + case KC_INSERT: + case KC_DELETE: + case KC_PGDOWN: + case KC_PGUP: + case KC_LEFT: + case KC_UP: + case KC_RIGHT: + case KC_DOWN: + case KC_END: + case KC_HOME: +# endif +# ifdef NO_HAPTIC_NUMERIC + case KC_1 ... KC_0: +# endif + return false; + } + return true; +} + bool process_haptic(uint16_t keycode, keyrecord_t *record) { if (keycode == HPT_ON && record->event.pressed) { haptic_enable(); @@ -335,12 +402,12 @@ bool process_haptic(uint16_t keycode, keyrecord_t *record) { if (haptic_config.enable) { if (record->event.pressed) { // keypress - if (haptic_config.feedback < 2) { + if (haptic_config.feedback < 2 && get_haptic_enabled_key(keycode, record)) { haptic_play(); } } else { // keyrelease - if (haptic_config.feedback > 0) { + if (haptic_config.feedback > 0 && get_haptic_enabled_key(keycode, record)) { haptic_play(); } } |