Remove force disable of NKRO when Bluetooth enabled (#25201)

This commit is contained in:
Joel Challis 2025-05-06 06:47:44 +01:00 committed by GitHub
parent ac991405d0
commit ab1332bb6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 33 additions and 12 deletions

View File

@ -11,6 +11,10 @@ __attribute__((weak)) bool bluetooth_is_connected(void) {
return true; return true;
} }
__attribute__((weak)) bool bluetooth_can_send_nkro(void) {
return false;
}
__attribute__((weak)) uint8_t bluetooth_keyboard_leds(void) { __attribute__((weak)) uint8_t bluetooth_keyboard_leds(void) {
return 0; return 0;
} }

View File

@ -37,6 +37,11 @@ void bluetooth_task(void);
*/ */
bool bluetooth_is_connected(void); bool bluetooth_is_connected(void);
/**
* \brief Detects if `bluetooth_send_nkro` should be used over `bluetooth_send_keyboard`.
*/
bool bluetooth_can_send_nkro(void);
/** /**
* \brief Get current LED state. * \brief Get current LED state.
*/ */

View File

@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "action_layer.h" #include "action_layer.h"
#include "timer.h" #include "timer.h"
#include "keycode_config.h" #include "keycode_config.h"
#include "usb_device_state.h"
#include <string.h> #include <string.h>
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;
@ -319,14 +318,12 @@ void send_nkro_report(void) {
*/ */
void send_keyboard_report(void) { void send_keyboard_report(void) {
#ifdef NKRO_ENABLE #ifdef NKRO_ENABLE
if (usb_device_state_get_protocol() == USB_PROTOCOL_REPORT && keymap_config.nkro) { if (host_can_send_nkro() && keymap_config.nkro) {
send_nkro_report(); send_nkro_report();
} else { return;
send_6kro_report();
} }
#else
send_6kro_report();
#endif #endif
send_6kro_report();
} }
/** \brief Get mods /** \brief Get mods

View File

@ -46,12 +46,8 @@ else
endif endif
ifeq ($(strip $(NKRO_ENABLE)), yes) ifeq ($(strip $(NKRO_ENABLE)), yes)
ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
$(info NKRO is not currently supported with Bluetooth, and has been disabled.)
else
OPT_DEFS += -DNKRO_ENABLE OPT_DEFS += -DNKRO_ENABLE
SHARED_EP_ENABLE = yes SHARED_EP_ENABLE = yes
endif
endif endif
ifeq ($(strip $(NO_SUSPEND_POWER_DOWN)), yes) ifeq ($(strip $(NO_SUSPEND_POWER_DOWN)), yes)

View File

@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "host.h" #include "host.h"
#include "util.h" #include "util.h"
#include "debug.h" #include "debug.h"
#include "usb_device_state.h"
#ifdef DIGITIZER_ENABLE #ifdef DIGITIZER_ENABLE
# include "digitizer.h" # include "digitizer.h"
@ -90,6 +91,23 @@ static host_driver_t *host_get_active_driver(void) {
return driver; return driver;
} }
bool host_can_send_nkro(void) {
#ifdef CONNECTION_ENABLE
switch (connection_get_host()) {
# ifdef BLUETOOTH_ENABLE
case CONNECTION_HOST_BLUETOOTH:
return bluetooth_can_send_nkro();
# endif
case CONNECTION_HOST_NONE:
return false;
default:
break;
}
#endif
return usb_device_state_get_protocol() == USB_PROTOCOL_REPORT;
}
#ifdef SPLIT_KEYBOARD #ifdef SPLIT_KEYBOARD
uint8_t split_led_state = 0; uint8_t split_led_state = 0;
void set_split_host_keyboard_leds(uint8_t led_state) { void set_split_host_keyboard_leds(uint8_t led_state) {

View File

@ -32,6 +32,7 @@ void host_set_driver(host_driver_t *driver);
host_driver_t *host_get_driver(void); host_driver_t *host_get_driver(void);
/* host driver interface */ /* host driver interface */
bool host_can_send_nkro(void);
uint8_t host_keyboard_leds(void); uint8_t host_keyboard_leds(void);
led_t host_keyboard_led_state(void); led_t host_keyboard_led_state(void);
void host_keyboard_send(report_keyboard_t *report); void host_keyboard_send(report_keyboard_t *report);