Haptic: driver-> feature (#13713)
parent
4bb595f94b
commit
f945c352e7
@ -0,0 +1,147 @@ |
|||||||
|
/* Copyright 2021 QMK
|
||||||
|
* |
||||||
|
* This program is free software: you can redistribute it and/or modify |
||||||
|
* it under the terms of the GNU General Public License as published by |
||||||
|
* the Free Software Foundation, either version 2 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
#include "haptic.h" |
||||||
|
#include "process_haptic.h" |
||||||
|
#include "quantum_keycodes.h" |
||||||
|
|
||||||
|
__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 (record->event.pressed) { |
||||||
|
switch (keycode) { |
||||||
|
case HPT_ON: |
||||||
|
haptic_enable(); |
||||||
|
break; |
||||||
|
case HPT_OFF: |
||||||
|
haptic_disable(); |
||||||
|
break; |
||||||
|
case HPT_TOG: |
||||||
|
haptic_toggle(); |
||||||
|
break; |
||||||
|
case HPT_RST: |
||||||
|
haptic_reset(); |
||||||
|
break; |
||||||
|
case HPT_FBK: |
||||||
|
haptic_feedback_toggle(); |
||||||
|
break; |
||||||
|
case HPT_BUZ: |
||||||
|
haptic_buzz_toggle(); |
||||||
|
break; |
||||||
|
case HPT_MODI: |
||||||
|
haptic_mode_increase(); |
||||||
|
break; |
||||||
|
case HPT_MODD: |
||||||
|
haptic_mode_decrease(); |
||||||
|
break; |
||||||
|
case HPT_DWLI: |
||||||
|
haptic_dwell_increase(); |
||||||
|
break; |
||||||
|
case HPT_DWLD: |
||||||
|
haptic_dwell_decrease(); |
||||||
|
break; |
||||||
|
case HPT_CONT: |
||||||
|
haptic_toggle_continuous(); |
||||||
|
break; |
||||||
|
case HPT_CONI: |
||||||
|
haptic_cont_increase(); |
||||||
|
break; |
||||||
|
case HPT_COND: |
||||||
|
haptic_cont_decrease(); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (haptic_get_enable()) { |
||||||
|
if (record->event.pressed) { |
||||||
|
// keypress
|
||||||
|
if (haptic_get_feedback() < 2 && get_haptic_enabled_key(keycode, record)) { |
||||||
|
haptic_play(); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// keyrelease
|
||||||
|
if (haptic_get_feedback() > 0 && get_haptic_enabled_key(keycode, record)) { |
||||||
|
haptic_play(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
/* Copyright 2021 QMK
|
||||||
|
* |
||||||
|
* This program is free software: you can redistribute it and/or modify |
||||||
|
* it under the terms of the GNU General Public License as published by |
||||||
|
* the Free Software Foundation, either version 2 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <stdbool.h> |
||||||
|
#include "action.h" |
||||||
|
|
||||||
|
bool process_haptic(uint16_t keycode, keyrecord_t *record); |
Loading…
Reference in new issue