From e4c5b1bbbb3d76a7632c8a9d5c19c5eb8a9a4e1f Mon Sep 17 00:00:00 2001 From: Roland Huber <36362570+darkcruix@users.noreply.github.com> Date: Sun, 20 Jun 2021 04:28:54 +0200 Subject: Add Per Key exclusions for Haptic Feedback (#12386) Co-authored-by: Drashna Jaelre --- drivers/haptic/haptic.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) (limited to 'drivers/haptic') 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(); } } -- cgit v1.2.3