Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add full solenoid support on split keyboards #21583

Merged
merged 6 commits into from
Sep 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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();
}