diff options
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();              }          } | 
