aboutsummaryrefslogtreecommitdiff
path: root/drivers/haptic/haptic.c
diff options
context:
space:
mode:
authorJames Young <18669334+noroadsleft@users.noreply.github.com>2020-11-28 12:02:18 -0800
committerGitHub <noreply@github.com>2020-11-28 12:02:18 -0800
commitc66df1664497546f32662409778731143e45a552 (patch)
treeda73a2d532a27685a31d932b3a44a707d4a3af81 /drivers/haptic/haptic.c
parent15385d4113414d42bd062c60c9de5df797d3157f (diff)
downloadqmk_firmware-c66df1664497546f32662409778731143e45a552.tar.gz
qmk_firmware-c66df1664497546f32662409778731143e45a552.zip
2020 November 28 Breaking Changes Update (#11053)
* Branch point for 2020 November 28 Breaking Change * Remove matrix_col_t to allow MATRIX_ROWS > 32 (#10183) * Add support for soft serial to ATmega32U2 (#10204) * Change MIDI velocity implementation to allow direct control of velocity value (#9940) * Add ability to build a subset of all keyboards based on platform. * Actually use eeprom_driver_init(). * Make bootloader_jump weak for ChibiOS. (#10417) * Joystick 16-bit support (#10439) * Per-encoder resolutions (#10259) * Share button state from mousekey to pointing_device (#10179) * Add hotfix for chibios keyboards not wake (#10088) * Add advanced/efficient RGB Matrix Indicators (#8564) * Naming change. * Support for STM32 GPIOF,G,H,I,J,K (#10206) * Add milc as a dependency and remove the installed milc (#10563) * ChibiOS upgrade: early init conversions (#10214) * ChibiOS upgrade: configuration file migrator (#9952) * Haptic and solenoid cleanup (#9700) * XD75 cleanup (#10524) * OLED display update interval support (#10388) * Add definition based on currently-selected serial driver. (#10716) * New feature: Retro Tapping per key (#10622) * Allow for modification of output RGB values when using rgblight/rgb_matrix. (#10638) * Add housekeeping task callbacks so that keyboards/keymaps are capable of executing code for each main loop iteration. (#10530) * Rescale both ChibiOS and AVR backlighting. * Reduce Helix keyboard build variation (#8669) * Minor change to behavior allowing display updates to continue between task ticks (#10750) * Some GPIO manipulations in matrix.c change to atomic. (#10491) * qmk cformat (#10767) * [Keyboard] Update the Speedo firmware for v3.0 (#10657) * Maartenwut/Maarten namechange to evyd13/Evy (#10274) * [quantum] combine repeated lines of code (#10837) * Add step sequencer feature (#9703) * aeboards/ext65 refactor (#10820) * Refactor xelus/dawn60 for Rev2 later (#10584) * add DEBUG_MATRIX_SCAN_RATE_ENABLE to common_features.mk (#10824) * [Core] Added `add_oneshot_mods` & `del_oneshot_mods` (#10549) * update chibios os usb for the otg driver (#8893) * Remove HD44780 References, Part 4 (#10735) * [Keyboard] Add Valor FRL TKL (+refactor) (#10512) * Fix cursor position bug in oled_write_raw functions (#10800) * Fixup version.h writing when using SKIP_VERSION=yes (#10972) * Allow for certain code in the codebase assuming length of string. (#10974) * Add AT90USB support for serial.c (#10706) * Auto shift: support repeats and early registration (#9826) * Rename ledmatrix.h to match .c file (#7949) * Split RGB_MATRIX_ENABLE into _ENABLE and _DRIVER (#10231) * Split LED_MATRIX_ENABLE into _ENABLE and _DRIVER (#10840) * Merge point for 2020 Nov 28 Breaking Change
Diffstat (limited to 'drivers/haptic/haptic.c')
-rw-r--r--drivers/haptic/haptic.c53
1 files changed, 39 insertions, 14 deletions
diff --git a/drivers/haptic/haptic.c b/drivers/haptic/haptic.c
index 2ce279b75..de3f40052 100644
--- a/drivers/haptic/haptic.c
+++ b/drivers/haptic/haptic.c
@@ -33,11 +33,18 @@ void haptic_init(void) {
33 eeconfig_init(); 33 eeconfig_init();
34 } 34 }
35 haptic_config.raw = eeconfig_read_haptic(); 35 haptic_config.raw = eeconfig_read_haptic();
36 if (haptic_config.mode < 1) { 36#ifdef SOLENOID_ENABLE
37 haptic_config.mode = 1; 37 solenoid_set_dwell(haptic_config.dwell);
38 } 38#endif
39 if (!haptic_config.mode) { 39 if ((haptic_config.raw == 0)
40 dprintf("No haptic config found in eeprom, setting default configs\n"); 40#ifdef SOLENOID_ENABLE
41 || (haptic_config.dwell == 0)
42#endif
43 ) {
44 // this will be called, if the eeprom is not corrupt,
45 // but the previous firmware didn't have haptic enabled,
46 // or the previous firmware didn't have solenoid enabled,
47 // and the current one has solenoid enabled.
41 haptic_reset(); 48 haptic_reset();
42 } 49 }
43#ifdef SOLENOID_ENABLE 50#ifdef SOLENOID_ENABLE
@@ -118,25 +125,37 @@ void haptic_mode_decrease(void) {
118} 125}
119 126
120void haptic_dwell_increase(void) { 127void haptic_dwell_increase(void) {
121 uint8_t dwell = haptic_config.dwell + 1;
122#ifdef SOLENOID_ENABLE 128#ifdef SOLENOID_ENABLE
129 int16_t next_dwell = ((int16_t)haptic_config.dwell) + SOLENOID_DWELL_STEP_SIZE;
123 if (haptic_config.dwell >= SOLENOID_MAX_DWELL) { 130 if (haptic_config.dwell >= SOLENOID_MAX_DWELL) {
124 dwell = 1; 131 // if it's already at max, we wrap back to min
132 next_dwell = SOLENOID_MIN_DWELL;
133 } else if (next_dwell > SOLENOID_MAX_DWELL) {
134 // if we overshoot the max, then cap at max
135 next_dwell = SOLENOID_MAX_DWELL;
125 } 136 }
126 solenoid_set_dwell(dwell); 137 solenoid_set_dwell(next_dwell);
138#else
139 int16_t next_dwell = ((int16_t)haptic_config.dwell) + 1;
127#endif 140#endif
128 haptic_set_dwell(dwell); 141 haptic_set_dwell(next_dwell);
129} 142}
130 143
131void haptic_dwell_decrease(void) { 144void haptic_dwell_decrease(void) {
132 uint8_t dwell = haptic_config.dwell - 1;
133#ifdef SOLENOID_ENABLE 145#ifdef SOLENOID_ENABLE
134 if (haptic_config.dwell < SOLENOID_MIN_DWELL) { 146 int16_t next_dwell = ((int16_t)haptic_config.dwell) - SOLENOID_DWELL_STEP_SIZE;
135 dwell = SOLENOID_MAX_DWELL; 147 if (haptic_config.dwell <= SOLENOID_MIN_DWELL) {
148 // if it's already at min, we wrap to max
149 next_dwell = SOLENOID_MAX_DWELL;
150 } else if (next_dwell < SOLENOID_MIN_DWELL) {
151 // if we go below min, then we cap to min
152 next_dwell = SOLENOID_MIN_DWELL;
136 } 153 }
137 solenoid_set_dwell(dwell); 154 solenoid_set_dwell(next_dwell);
155#else
156 int16_t next_dwell = ((int16_t)haptic_config.dwell) - 1;
138#endif 157#endif
139 haptic_set_dwell(dwell); 158 haptic_set_dwell(next_dwell);
140} 159}
141 160
142void haptic_reset(void) { 161void haptic_reset(void) {
@@ -150,6 +169,12 @@ void haptic_reset(void) {
150#ifdef SOLENOID_ENABLE 169#ifdef SOLENOID_ENABLE
151 uint8_t dwell = SOLENOID_DEFAULT_DWELL; 170 uint8_t dwell = SOLENOID_DEFAULT_DWELL;
152 haptic_config.dwell = dwell; 171 haptic_config.dwell = dwell;
172 haptic_config.buzz = SOLENOID_DEFAULT_BUZZ;
173 solenoid_set_dwell(dwell);
174#else
175 // This is to trigger haptic_reset again, if solenoid is enabled in the future.
176 haptic_config.dwell = 0;
177 haptic_config.buzz = 0;
153#endif 178#endif
154 eeconfig_update_haptic(haptic_config.raw); 179 eeconfig_update_haptic(haptic_config.raw);
155 xprintf("haptic_config.feedback = %u\n", haptic_config.feedback); 180 xprintf("haptic_config.feedback = %u\n", haptic_config.feedback);