haptic: Feature to disable it when usb port is not configured or suspended. (#12692)
This also add support for specifying a LED pin to indicate haptic status, and also adds support for a haptic-enable pin, which is useful to turn off the boost converter on the solenoid driver.
This commit is contained in:
		
							parent
							
								
									85d94d0c4d
								
							
						
					
					
						commit
						76fb54403c
					
				
					 7 changed files with 115 additions and 11 deletions
				
			
		|  | @ -19,6 +19,7 @@ | |||
| #include "solenoid.h" | ||||
| #include "haptic.h" | ||||
| #include "gpio.h" | ||||
| #include "usb_device_state.h" | ||||
| 
 | ||||
| bool     solenoid_on      = false; | ||||
| bool     solenoid_buzzing = false; | ||||
|  | @ -36,7 +37,7 @@ void solenoid_set_buzz(int buzz) { haptic_set_buzz(buzz); } | |||
| void solenoid_set_dwell(uint8_t dwell) { solenoid_dwell = dwell; } | ||||
| 
 | ||||
| void solenoid_stop(void) { | ||||
|     writePinLow(SOLENOID_PIN); | ||||
|     SOLENOID_PIN_WRITE_INACTIVE(); | ||||
|     solenoid_on      = false; | ||||
|     solenoid_buzzing = false; | ||||
| } | ||||
|  | @ -48,7 +49,7 @@ void solenoid_fire(void) { | |||
|     solenoid_on      = true; | ||||
|     solenoid_buzzing = true; | ||||
|     solenoid_start   = timer_read(); | ||||
|     writePinHigh(SOLENOID_PIN); | ||||
|     SOLENOID_PIN_WRITE_ACTIVE(); | ||||
| } | ||||
| 
 | ||||
| void solenoid_check(void) { | ||||
|  | @ -69,20 +70,23 @@ void solenoid_check(void) { | |||
|         if ((elapsed % (SOLENOID_BUZZ_ACTUATED + SOLENOID_BUZZ_NONACTUATED)) < SOLENOID_BUZZ_ACTUATED) { | ||||
|             if (!solenoid_buzzing) { | ||||
|                 solenoid_buzzing = true; | ||||
|                 writePinHigh(SOLENOID_PIN); | ||||
|                 SOLENOID_PIN_WRITE_ACTIVE(); | ||||
|             } | ||||
|         } else { | ||||
|             if (solenoid_buzzing) { | ||||
|                 solenoid_buzzing = false; | ||||
|                 writePinLow(SOLENOID_PIN); | ||||
|                 SOLENOID_PIN_WRITE_INACTIVE(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void solenoid_setup(void) { | ||||
|     SOLENOID_PIN_WRITE_INACTIVE(); | ||||
|     setPinOutput(SOLENOID_PIN); | ||||
|     solenoid_fire(); | ||||
|     if ((!HAPTIC_OFF_IN_LOW_POWER) || (usb_device_state == USB_DEVICE_STATE_CONFIGURED)) { | ||||
|         solenoid_fire(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void solenoid_shutdown(void) { writePinLow(SOLENOID_PIN); } | ||||
| void solenoid_shutdown(void) { SOLENOID_PIN_WRITE_INACTIVE(); } | ||||
|  |  | |||
|  | @ -49,6 +49,14 @@ | |||
| #    error SOLENOID_PIN not defined | ||||
| #endif | ||||
| 
 | ||||
| #ifdef SOLENOID_PIN_ACTIVE_LOW | ||||
| #    define SOLENOID_PIN_WRITE_ACTIVE() writePinLow(SOLENOID_PIN) | ||||
| #    define SOLENOID_PIN_WRITE_INACTIVE() writePinHigh(SOLENOID_PIN) | ||||
| #else | ||||
| #    define SOLENOID_PIN_WRITE_ACTIVE() writePinHigh(SOLENOID_PIN) | ||||
| #    define SOLENOID_PIN_WRITE_INACTIVE() writePinLow(SOLENOID_PIN) | ||||
| #endif | ||||
| 
 | ||||
| void solenoid_buzz_on(void); | ||||
| void solenoid_buzz_off(void); | ||||
| void solenoid_set_buzz(int buzz); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Purdea Andrei
						Purdea Andrei