summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorishtob <ishtob@gmail.com>2019-02-16 21:39:30 -0500
committerMechMerlin <30334081+mechmerlin@users.noreply.github.com>2019-02-16 18:39:30 -0800
commit2cee371bf125a6ec541dd7c5a809573facc7c456 (patch)
tree7bb6c074b759843d531eee67d65d91618bd79732 /quantum
parenta7a647b7f6d707e9c952461beeca1f3637039d36 (diff)
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.c16
-rw-r--r--quantum/quantum.h4
-rw-r--r--quantum/quantum_keycodes.h49
3 files changed, 50 insertions, 19 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 376578ade4..cb4d5ee806 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -47,6 +47,9 @@ extern backlight_config_t backlight_config;
 #include "process_midi.h"
 #endif
 
+#ifdef HAPTIC_ENABLE
+    #include "haptic.h"
+#endif
 
 #ifdef ENCODER_ENABLE
 #include "encoder.h"
@@ -179,6 +182,9 @@ void reset_keyboard(void) {
   shutdown_user();
   wait_ms(250);
 #endif
+#ifdef HAPTIC_ENABLE
+  haptic_shutdown();
+#endif
 // this is also done later in bootloader.c - not sure if it's neccesary here
 #ifdef BOOTLOADER_CATERINA
   *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific
@@ -257,6 +263,9 @@ bool process_record_quantum(keyrecord_t *record) {
   #if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY)
     process_clicky(keycode, record) &&
   #endif //AUDIO_CLICKY
+  #ifdef HAPTIC_ENABLE
+    process_haptic(keycode, record) &&
+  #endif //HAPTIC_ENABLE
     process_record_kb(keycode, record) &&
   #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_KEYPRESSES)
     process_rgb_matrix(keycode, record) &&
@@ -1049,6 +1058,9 @@ void matrix_init_quantum() {
   #if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
     unicode_input_mode_init();
   #endif
+  #ifdef HAPTIC_ENABLE
+    haptic_init();
+  #endif
   matrix_init_kb();
 }
 
@@ -1091,6 +1103,10 @@ void matrix_scan_quantum() {
     encoder_read();
   #endif
 
+  #ifdef HAPTIC_ENABLE
+    haptic_task();
+  #endif
+
   matrix_scan_kb();
 }
 #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
diff --git a/quantum/quantum.h b/quantum/quantum.h
index c6acf83e5a..d2c5862f88 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -139,6 +139,10 @@ extern uint32_t default_layer_state;
     #include "hd44780.h"
 #endif
 
+#ifdef HAPTIC_ENABLE
+    #include "haptic.h"
+#endif
+
 //Function substitutions to ease GPIO manipulation
 #ifdef __AVR__
     #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 0462291c2b..00c84cbf53 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -446,25 +446,36 @@ enum quantum_keycodes {
     KC_LOCK,
 #endif
 
-#ifdef TERMINAL_ENABLE
-    TERM_ON,
-    TERM_OFF,
-#endif
-
-    EEPROM_RESET,
-
-    UNICODE_MODE_FORWARD,
-    UNICODE_MODE_REVERSE,
-
-    UNICODE_MODE_OSX,
-    UNICODE_MODE_LNX,
-    UNICODE_MODE_WIN,
-    UNICODE_MODE_BSD,
-    UNICODE_MODE_WINC,
-
-    // always leave at the end
-    SAFE_RANGE
-};
+    #ifdef TERMINAL_ENABLE
+        TERM_ON,
+        TERM_OFF,
+    #endif
+
+        EEPROM_RESET,
+
+        UNICODE_MODE_FORWARD,
+        UNICODE_MODE_REVERSE,
+
+        UNICODE_MODE_OSX,
+        UNICODE_MODE_LNX,
+        UNICODE_MODE_WIN,
+        UNICODE_MODE_BSD,
+        UNICODE_MODE_WINC,
+
+        HPT_ON,
+        HPT_OFF,
+        HPT_TOG,
+        HPT_RST,
+        HPT_FBK,
+        HPT_BUZ,
+        HPT_MODI,
+        HPT_MODD,
+        HPT_DWLI,
+        HPT_DWLD,
+
+        // always leave at the end
+        SAFE_RANGE
+    };
 
 // Ability to use mods in layouts
 #define LCTL(kc) (QK_LCTL | (kc))