diff options
| author | ishtob <ishtob@gmail.com> | 2019-02-16 21:39:30 -0500 |
|---|---|---|
| committer | MechMerlin <30334081+mechmerlin@users.noreply.github.com> | 2019-02-16 18:39:30 -0800 |
| commit | 2cee371bf125a6ec541dd7c5a809573facc7c456 (patch) | |
| tree | 7bb6c074b759843d531eee67d65d91618bd79732 /quantum | |
| parent | a7a647b7f6d707e9c952461beeca1f3637039d36 (diff) | |
| download | qmk_firmware-2cee371bf125a6ec541dd7c5a809573facc7c456.tar.gz qmk_firmware-2cee371bf125a6ec541dd7c5a809573facc7c456.zip | |
Haptic feedback generalized - DRV2605 and solenoids (#4939)
* initial work to add eeprom to haptic feedback and decouple the feedback process from keyboards
* Haptic feedback enhancements: on/off toggle working, feedback order working
todo:
-work on modes switching
-get modes switching to save to eeprom
* haptic enhancement - eeprom and modes added
* Added set and get functions for haptic feedback
* initial implementation of solenoids under haptic feedback
* changed eeprom to 32 bits to reserve blocks for future features
* start documentation of haptic feedback
* change keycode per comment from reviewers
* typo fixes
* added eeprom for solenoid configs
* added solenoid and docs
* Add/fix default parameters configs, improve docs
* more doc cleanup
* add in solenoid buzz toggle, clean up doc
* some fixes for error in compiling solenoid
* fix a chibios specific i2c read function and added one for AVR controllers in DRV2605L.c
* fixes for avr side issues
* update keymap
* fix keymap compile error
* fix bugs found during solenoid testing
* set pin that is not powered during bootloader
* added warning about certain pins on the MCU may trip solenoid during DFU/bootloader
Diffstat (limited to 'quantum')
| -rw-r--r-- | quantum/quantum.c | 16 | ||||
| -rw-r--r-- | quantum/quantum.h | 4 | ||||
| -rw-r--r-- | quantum/quantum_keycodes.h | 49 |
3 files changed, 50 insertions, 19 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c index 376578ade..cb4d5ee80 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -47,6 +47,9 @@ extern backlight_config_t backlight_config; | |||
| 47 | #include "process_midi.h" | 47 | #include "process_midi.h" |
| 48 | #endif | 48 | #endif |
| 49 | 49 | ||
| 50 | #ifdef HAPTIC_ENABLE | ||
| 51 | #include "haptic.h" | ||
| 52 | #endif | ||
| 50 | 53 | ||
| 51 | #ifdef ENCODER_ENABLE | 54 | #ifdef ENCODER_ENABLE |
| 52 | #include "encoder.h" | 55 | #include "encoder.h" |
| @@ -179,6 +182,9 @@ void reset_keyboard(void) { | |||
| 179 | shutdown_user(); | 182 | shutdown_user(); |
| 180 | wait_ms(250); | 183 | wait_ms(250); |
| 181 | #endif | 184 | #endif |
| 185 | #ifdef HAPTIC_ENABLE | ||
| 186 | haptic_shutdown(); | ||
| 187 | #endif | ||
| 182 | // this is also done later in bootloader.c - not sure if it's neccesary here | 188 | // this is also done later in bootloader.c - not sure if it's neccesary here |
| 183 | #ifdef BOOTLOADER_CATERINA | 189 | #ifdef BOOTLOADER_CATERINA |
| 184 | *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific | 190 | *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific |
| @@ -257,6 +263,9 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 257 | #if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY) | 263 | #if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY) |
| 258 | process_clicky(keycode, record) && | 264 | process_clicky(keycode, record) && |
| 259 | #endif //AUDIO_CLICKY | 265 | #endif //AUDIO_CLICKY |
| 266 | #ifdef HAPTIC_ENABLE | ||
| 267 | process_haptic(keycode, record) && | ||
| 268 | #endif //HAPTIC_ENABLE | ||
| 260 | process_record_kb(keycode, record) && | 269 | process_record_kb(keycode, record) && |
| 261 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_KEYPRESSES) | 270 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_KEYPRESSES) |
| 262 | process_rgb_matrix(keycode, record) && | 271 | process_rgb_matrix(keycode, record) && |
| @@ -1049,6 +1058,9 @@ void matrix_init_quantum() { | |||
| 1049 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) | 1058 | #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) |
| 1050 | unicode_input_mode_init(); | 1059 | unicode_input_mode_init(); |
| 1051 | #endif | 1060 | #endif |
| 1061 | #ifdef HAPTIC_ENABLE | ||
| 1062 | haptic_init(); | ||
| 1063 | #endif | ||
| 1052 | matrix_init_kb(); | 1064 | matrix_init_kb(); |
| 1053 | } | 1065 | } |
| 1054 | 1066 | ||
| @@ -1091,6 +1103,10 @@ void matrix_scan_quantum() { | |||
| 1091 | encoder_read(); | 1103 | encoder_read(); |
| 1092 | #endif | 1104 | #endif |
| 1093 | 1105 | ||
| 1106 | #ifdef HAPTIC_ENABLE | ||
| 1107 | haptic_task(); | ||
| 1108 | #endif | ||
| 1109 | |||
| 1094 | matrix_scan_kb(); | 1110 | matrix_scan_kb(); |
| 1095 | } | 1111 | } |
| 1096 | #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN) | 1112 | #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN) |
diff --git a/quantum/quantum.h b/quantum/quantum.h index c6acf83e5..d2c5862f8 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
| @@ -139,6 +139,10 @@ extern uint32_t default_layer_state; | |||
| 139 | #include "hd44780.h" | 139 | #include "hd44780.h" |
| 140 | #endif | 140 | #endif |
| 141 | 141 | ||
| 142 | #ifdef HAPTIC_ENABLE | ||
| 143 | #include "haptic.h" | ||
| 144 | #endif | ||
| 145 | |||
| 142 | //Function substitutions to ease GPIO manipulation | 146 | //Function substitutions to ease GPIO manipulation |
| 143 | #ifdef __AVR__ | 147 | #ifdef __AVR__ |
| 144 | #define PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + (p >> PORT_SHIFTER) + offset) | 148 | #define PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + (p >> PORT_SHIFTER) + offset) |
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 0462291c2..00c84cbf5 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h | |||
| @@ -446,25 +446,36 @@ enum quantum_keycodes { | |||
| 446 | KC_LOCK, | 446 | KC_LOCK, |
| 447 | #endif | 447 | #endif |
| 448 | 448 | ||
| 449 | #ifdef TERMINAL_ENABLE | 449 | #ifdef TERMINAL_ENABLE |
| 450 | TERM_ON, | 450 | TERM_ON, |
| 451 | TERM_OFF, | 451 | TERM_OFF, |
| 452 | #endif | 452 | #endif |
| 453 | 453 | ||
| 454 | EEPROM_RESET, | 454 | EEPROM_RESET, |
| 455 | 455 | ||
| 456 | UNICODE_MODE_FORWARD, | 456 | UNICODE_MODE_FORWARD, |
| 457 | UNICODE_MODE_REVERSE, | 457 | UNICODE_MODE_REVERSE, |
| 458 | 458 | ||
| 459 | UNICODE_MODE_OSX, | 459 | UNICODE_MODE_OSX, |
| 460 | UNICODE_MODE_LNX, | 460 | UNICODE_MODE_LNX, |
| 461 | UNICODE_MODE_WIN, | 461 | UNICODE_MODE_WIN, |
| 462 | UNICODE_MODE_BSD, | 462 | UNICODE_MODE_BSD, |
| 463 | UNICODE_MODE_WINC, | 463 | UNICODE_MODE_WINC, |
| 464 | 464 | ||
| 465 | // always leave at the end | 465 | HPT_ON, |
| 466 | SAFE_RANGE | 466 | HPT_OFF, |
| 467 | }; | 467 | HPT_TOG, |
| 468 | HPT_RST, | ||
| 469 | HPT_FBK, | ||
| 470 | HPT_BUZ, | ||
| 471 | HPT_MODI, | ||
| 472 | HPT_MODD, | ||
| 473 | HPT_DWLI, | ||
| 474 | HPT_DWLD, | ||
| 475 | |||
| 476 | // always leave at the end | ||
| 477 | SAFE_RANGE | ||
| 478 | }; | ||
| 468 | 479 | ||
| 469 | // Ability to use mods in layouts | 480 | // Ability to use mods in layouts |
| 470 | #define LCTL(kc) (QK_LCTL | (kc)) | 481 | #define LCTL(kc) (QK_LCTL | (kc)) |
