Skip to content

Commit

Permalink
Add full solenoid support on split keyboards (qmk#21583)
Browse files Browse the repository at this point in the history
Co-authored-by: Jacob Gable <jacob.gable@statheros.tech>
  • Loading branch information
2 people authored and zgagnon committed Dec 15, 2023
1 parent fb0516a commit 0fce7e0
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 12 deletions.
2 changes: 1 addition & 1 deletion docs/feature_split_keyboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ This enables transmitting the pointing device status to the master side of the s
#define SPLIT_HAPTIC_ENABLE
```
This enables triggering of haptic feedback on the slave side of the split keyboard. For DRV2605L this will send the mode, but for solenoids it is expected that the desired mode is already set up on the slave.
This enables the triggering of haptic feedback on the slave side of the split keyboard. This will send information to the slave side such as the mode, dwell, and whether buzz is enabled.
```c
#define SPLIT_ACTIVITY_ENABLE
Expand Down
5 changes: 2 additions & 3 deletions drivers/haptic/solenoid.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "util.h"
#include <stdlib.h>

uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
static pin_t solenoid_pads[] = SOLENOID_PINS;
#define NUMBER_OF_SOLENOIDS ARRAY_SIZE(solenoid_pads)
bool solenoid_on[NUMBER_OF_SOLENOIDS] = {false};
Expand Down Expand Up @@ -53,7 +52,7 @@ void solenoid_set_buzz(uint8_t buzz) {
}

void solenoid_set_dwell(uint8_t dwell) {
solenoid_dwell = dwell;
haptic_set_dwell(dwell);
}

/**
Expand Down Expand Up @@ -119,7 +118,7 @@ void solenoid_check(void) {
elapsed[i] = timer_elapsed(solenoid_start[i]);

// Check if it's time to finish this solenoid click cycle
if (elapsed[i] > solenoid_dwell) {
if (elapsed[i] > haptic_config.dwell) {
solenoid_stop(i);
continue;
}
Expand Down
12 changes: 11 additions & 1 deletion quantum/haptic.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "debug.h"
#include "usb_device_state.h"
#include "gpio.h"
#include "keyboard.h"

#ifdef HAPTIC_DRV2605L
# include "drv2605l.h"
Expand Down Expand Up @@ -58,6 +59,11 @@ static void set_haptic_config_enable(bool enabled) {
}

void haptic_init(void) {
// only initialize on secondary boards if the user desires
#if defined(SPLIT_KEYBOARD) && !defined(SPLIT_HAPTIC_ENABLE)
if (!is_keyboard_master()) return;
#endif

if (!eeconfig_is_enabled()) {
eeconfig_init();
}
Expand Down Expand Up @@ -99,8 +105,12 @@ void haptic_init(void) {

void haptic_task(void) {
#ifdef HAPTIC_SOLENOID
// Only run task on seconary boards if the user desires
# if defined(SPLIT_KEYBOARD) && !defined(SPLIT_HAPTIC_ENABLE)
if (!is_keyboard_master()) return;
# endif
solenoid_check();
#endif
#endif // HAPTIC_SOLENOID
}

void eeconfig_debug_haptic(void) {
Expand Down
14 changes: 7 additions & 7 deletions quantum/keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,9 +395,6 @@ void quantum_init(void) {
#if defined(UNICODE_COMMON_ENABLE)
unicode_input_mode_init();
#endif
#ifdef HAPTIC_ENABLE
haptic_init();
#endif
}

/** \brief keyboard_init
Expand Down Expand Up @@ -462,6 +459,9 @@ void keyboard_init(void) {
#ifdef BLUETOOTH_ENABLE
bluetooth_init();
#endif
#ifdef HAPTIC_ENABLE
haptic_init();
#endif

#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE)
debug_enable = true;
Expand Down Expand Up @@ -617,10 +617,6 @@ void quantum_task(void) {
decay_wpm();
#endif

#ifdef HAPTIC_ENABLE
haptic_task();
#endif

#ifdef DIP_SWITCH_ENABLE
dip_switch_read(false);
#endif
Expand Down Expand Up @@ -726,5 +722,9 @@ void keyboard_task(void) {
bluetooth_task();
#endif

#ifdef HAPTIC_ENABLE
haptic_task();
#endif

led_task();
}

0 comments on commit 0fce7e0

Please sign in to comment.