diff options
| author | MechMerlin <30334081+mechmerlin@users.noreply.github.com> | 2019-09-19 09:42:33 -0700 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2019-09-19 09:42:33 -0700 |
| commit | 911b8915cc89c040db3c6075a1a547003b0ab37f (patch) | |
| tree | fe7afcae351fd3a5e9bce4ea25ef406f6382f1d7 /drivers/haptic/haptic.c | |
| parent | 7a5a2591ebc797d9670366a45396afed48c5fc6f (diff) | |
| download | qmk_firmware-911b8915cc89c040db3c6075a1a547003b0ab37f.tar.gz qmk_firmware-911b8915cc89c040db3c6075a1a547003b0ab37f.zip | |
DRV2605L Continuous Haptic Feedback Support (#6461)
* provide means to turn on RTP mode and set the amplitude
* new keycode HPT_CONT to turn RTP off/on
* introduce new keycodes HPT_CONI, and HPT_COND for Haptic Continuous Increase and Decrease
* support for continuous mode amplitude increase and decrease
* code cleanup
* update docs to reference new keycodes and functionality
* don't touch the keymaps
* add function prototypes
* add proper guards
* cleanup guards
* remove extra reserved
Diffstat (limited to 'drivers/haptic/haptic.c')
| -rw-r--r-- | drivers/haptic/haptic.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/drivers/haptic/haptic.c b/drivers/haptic/haptic.c index ded6d8a44..989970bee 100644 --- a/drivers/haptic/haptic.c +++ b/drivers/haptic/haptic.c | |||
| @@ -168,6 +168,15 @@ void haptic_set_mode(uint8_t mode) { | |||
| 168 | xprintf("haptic_config.mode = %u\n", haptic_config.mode); | 168 | xprintf("haptic_config.mode = %u\n", haptic_config.mode); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | void haptic_set_amplitude(uint8_t amp) { | ||
| 172 | haptic_config.amplitude = amp; | ||
| 173 | eeconfig_update_haptic(haptic_config.raw); | ||
| 174 | xprintf("haptic_config.amplitude = %u\n", haptic_config.amplitude); | ||
| 175 | #ifdef DRV2605L | ||
| 176 | DRV_amplitude(amp); | ||
| 177 | #endif | ||
| 178 | } | ||
| 179 | |||
| 171 | void haptic_set_buzz(uint8_t buzz) { | 180 | void haptic_set_buzz(uint8_t buzz) { |
| 172 | haptic_config.buzz = buzz; | 181 | haptic_config.buzz = buzz; |
| 173 | eeconfig_update_haptic(haptic_config.raw); | 182 | eeconfig_update_haptic(haptic_config.raw); |
| @@ -201,6 +210,53 @@ uint8_t haptic_get_dwell(void) { | |||
| 201 | return haptic_config.dwell; | 210 | return haptic_config.dwell; |
| 202 | } | 211 | } |
| 203 | 212 | ||
| 213 | void haptic_enable_continuous(void) { | ||
| 214 | haptic_config.cont = 1; | ||
| 215 | xprintf("haptic_config.cont = %u\n", haptic_config.cont); | ||
| 216 | eeconfig_update_haptic(haptic_config.raw); | ||
| 217 | #ifdef DRV2605L | ||
| 218 | DRV_rtp_init(); | ||
| 219 | #endif | ||
| 220 | } | ||
| 221 | |||
| 222 | void haptic_disable_continuous(void) { | ||
| 223 | haptic_config.cont = 0; | ||
| 224 | xprintf("haptic_config.cont = %u\n", haptic_config.cont); | ||
| 225 | eeconfig_update_haptic(haptic_config.raw); | ||
| 226 | #ifdef DRV2605L | ||
| 227 | DRV_write(DRV_MODE,0x00); | ||
| 228 | #endif | ||
| 229 | } | ||
| 230 | |||
| 231 | void haptic_toggle_continuous(void) { | ||
| 232 | #ifdef DRV2605L | ||
| 233 | if (haptic_config.cont) { | ||
| 234 | haptic_disable_continuous(); | ||
| 235 | } else { | ||
| 236 | haptic_enable_continuous(); | ||
| 237 | } | ||
| 238 | eeconfig_update_haptic(haptic_config.raw); | ||
| 239 | #endif | ||
| 240 | } | ||
| 241 | |||
| 242 | |||
| 243 | void haptic_cont_increase(void) { | ||
| 244 | uint8_t amp = haptic_config.amplitude + 10; | ||
| 245 | if (haptic_config.amplitude >= 120) { | ||
| 246 | amp = 120; | ||
| 247 | } | ||
| 248 | haptic_set_amplitude(amp); | ||
| 249 | } | ||
| 250 | |||
| 251 | void haptic_cont_decrease(void) { | ||
| 252 | uint8_t amp = haptic_config.amplitude - 10; | ||
| 253 | if (haptic_config.amplitude < 20) { | ||
| 254 | amp = 20; | ||
| 255 | } | ||
| 256 | haptic_set_amplitude(amp); | ||
| 257 | } | ||
| 258 | |||
| 259 | |||
| 204 | void haptic_play(void) { | 260 | void haptic_play(void) { |
| 205 | #ifdef DRV2605L | 261 | #ifdef DRV2605L |
| 206 | uint8_t play_eff = 0; | 262 | uint8_t play_eff = 0; |
| @@ -213,6 +269,7 @@ void haptic_play(void) { | |||
| 213 | } | 269 | } |
| 214 | 270 | ||
| 215 | bool process_haptic(uint16_t keycode, keyrecord_t *record) { | 271 | bool process_haptic(uint16_t keycode, keyrecord_t *record) { |
| 272 | |||
| 216 | if (keycode == HPT_ON && record->event.pressed) { | 273 | if (keycode == HPT_ON && record->event.pressed) { |
| 217 | haptic_enable(); | 274 | haptic_enable(); |
| 218 | } | 275 | } |
| @@ -243,6 +300,16 @@ bool process_haptic(uint16_t keycode, keyrecord_t *record) { | |||
| 243 | if (keycode == HPT_DWLD && record->event.pressed) { | 300 | if (keycode == HPT_DWLD && record->event.pressed) { |
| 244 | haptic_dwell_decrease(); | 301 | haptic_dwell_decrease(); |
| 245 | } | 302 | } |
| 303 | if (keycode == HPT_CONT && record->event.pressed) { | ||
| 304 | haptic_toggle_continuous(); | ||
| 305 | } | ||
| 306 | if (keycode == HPT_CONI && record->event.pressed) { | ||
| 307 | haptic_cont_increase(); | ||
| 308 | } | ||
| 309 | if (keycode == HPT_COND && record->event.pressed) { | ||
| 310 | haptic_cont_decrease(); | ||
| 311 | } | ||
| 312 | |||
| 246 | if (haptic_config.enable) { | 313 | if (haptic_config.enable) { |
| 247 | if (record->event.pressed) { | 314 | if (record->event.pressed) { |
| 248 | // keypress | 315 | // keypress |
