|
|
@ -16,7 +16,6 @@ |
|
|
|
*/ |
|
|
|
#include "haptic.h" |
|
|
|
#include "eeconfig.h" |
|
|
|
#include "progmem.h" |
|
|
|
#include "debug.h" |
|
|
|
#ifdef DRV2605L |
|
|
|
# include "DRV2605L.h" |
|
|
@ -28,7 +27,6 @@ |
|
|
|
haptic_config_t haptic_config; |
|
|
|
|
|
|
|
void haptic_init(void) { |
|
|
|
debug_enable = 1; // Debug is ON! |
|
|
|
if (!eeconfig_is_enabled()) { |
|
|
|
eeconfig_init(); |
|
|
|
} |
|
|
@ -65,7 +63,7 @@ void haptic_task(void) { |
|
|
|
} |
|
|
|
|
|
|
|
void eeconfig_debug_haptic(void) { |
|
|
|
dprintf("haptic_config eprom\n"); |
|
|
|
dprintf("haptic_config eeprom\n"); |
|
|
|
dprintf("haptic_config.enable = %d\n", haptic_config.enable); |
|
|
|
dprintf("haptic_config.mode = %d\n", haptic_config.mode); |
|
|
|
} |
|
|
@ -214,6 +212,8 @@ void haptic_set_dwell(uint8_t dwell) { |
|
|
|
xprintf("haptic_config.dwell = %u\n", haptic_config.dwell); |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t haptic_get_enable(void) { return haptic_config.enable; } |
|
|
|
|
|
|
|
uint8_t haptic_get_mode(void) { |
|
|
|
if (!haptic_config.enable) { |
|
|
|
return false; |
|
|
@ -254,14 +254,11 @@ void haptic_disable_continuous(void) { |
|
|
|
} |
|
|
|
|
|
|
|
void haptic_toggle_continuous(void) { |
|
|
|
#ifdef DRV2605L |
|
|
|
if (haptic_config.cont) { |
|
|
|
haptic_disable_continuous(); |
|
|
|
} else { |
|
|
|
haptic_enable_continuous(); |
|
|
|
} |
|
|
|
eeconfig_update_haptic(haptic_config.raw); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
void haptic_cont_increase(void) { |
|
|
@ -291,130 +288,6 @@ 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(); |
|
|
|
} |
|
|
|
if (keycode == HPT_OFF && record->event.pressed) { |
|
|
|
haptic_disable(); |
|
|
|
} |
|
|
|
if (keycode == HPT_TOG && record->event.pressed) { |
|
|
|
haptic_toggle(); |
|
|
|
} |
|
|
|
if (keycode == HPT_RST && record->event.pressed) { |
|
|
|
haptic_reset(); |
|
|
|
} |
|
|
|
if (keycode == HPT_FBK && record->event.pressed) { |
|
|
|
haptic_feedback_toggle(); |
|
|
|
} |
|
|
|
if (keycode == HPT_BUZ && record->event.pressed) { |
|
|
|
haptic_buzz_toggle(); |
|
|
|
} |
|
|
|
if (keycode == HPT_MODI && record->event.pressed) { |
|
|
|
haptic_mode_increase(); |
|
|
|
} |
|
|
|
if (keycode == HPT_MODD && record->event.pressed) { |
|
|
|
haptic_mode_decrease(); |
|
|
|
} |
|
|
|
if (keycode == HPT_DWLI && record->event.pressed) { |
|
|
|
haptic_dwell_increase(); |
|
|
|
} |
|
|
|
if (keycode == HPT_DWLD && record->event.pressed) { |
|
|
|
haptic_dwell_decrease(); |
|
|
|
} |
|
|
|
if (keycode == HPT_CONT && record->event.pressed) { |
|
|
|
haptic_toggle_continuous(); |
|
|
|
} |
|
|
|
if (keycode == HPT_CONI && record->event.pressed) { |
|
|
|
haptic_cont_increase(); |
|
|
|
} |
|
|
|
if (keycode == HPT_COND && record->event.pressed) { |
|
|
|
haptic_cont_decrease(); |
|
|
|
} |
|
|
|
|
|
|
|
if (haptic_config.enable) { |
|
|
|
if (record->event.pressed) { |
|
|
|
// keypress |
|
|
|
if (haptic_config.feedback < 2 && get_haptic_enabled_key(keycode, record)) { |
|
|
|
haptic_play(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// keyrelease |
|
|
|
if (haptic_config.feedback > 0 && get_haptic_enabled_key(keycode, record)) { |
|
|
|
haptic_play(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
void haptic_shutdown(void) { |
|
|
|
#ifdef SOLENOID_ENABLE |
|
|
|
solenoid_shutdown(); |