forked from mirrors/qmk_userspace
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