diff options
-rw-r--r-- | drivers/bluetooth/bluetooth.c | 4 | ||||
-rw-r--r-- | drivers/bluetooth/bluetooth.h | 5 | ||||
-rw-r--r-- | quantum/action_util.c | 9 | ||||
-rw-r--r-- | tmk_core/protocol.mk | 8 | ||||
-rw-r--r-- | tmk_core/protocol/host.c | 18 | ||||
-rw-r--r-- | tmk_core/protocol/host.h | 1 |
6 files changed, 33 insertions, 12 deletions
diff --git a/drivers/bluetooth/bluetooth.c b/drivers/bluetooth/bluetooth.c index 3d41d8b11c..61a3f0f32a 100644 --- a/drivers/bluetooth/bluetooth.c +++ b/drivers/bluetooth/bluetooth.c @@ -11,6 +11,10 @@ __attribute__((weak)) bool bluetooth_is_connected(void) { return true; } +__attribute__((weak)) bool bluetooth_can_send_nkro(void) { + return false; +} + __attribute__((weak)) uint8_t bluetooth_keyboard_leds(void) { return 0; } diff --git a/drivers/bluetooth/bluetooth.h b/drivers/bluetooth/bluetooth.h index fe67c0c968..e50b588db2 100644 --- a/drivers/bluetooth/bluetooth.h +++ b/drivers/bluetooth/bluetooth.h @@ -38,6 +38,11 @@ void bluetooth_task(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. */ uint8_t bluetooth_keyboard_leds(void); diff --git a/quantum/action_util.c b/quantum/action_util.c index 9fe17f2124..e821e113ef 100644 --- a/quantum/action_util.c +++ b/quantum/action_util.c @@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "action_layer.h" #include "timer.h" #include "keycode_config.h" -#include "usb_device_state.h" #include <string.h> extern keymap_config_t keymap_config; @@ -319,14 +318,12 @@ void send_nkro_report(void) { */ void send_keyboard_report(void) { #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(); - } else { - send_6kro_report(); + return; } -#else - send_6kro_report(); #endif + send_6kro_report(); } /** \brief Get mods diff --git a/tmk_core/protocol.mk b/tmk_core/protocol.mk index 8f01976548..2930efc283 100644 --- a/tmk_core/protocol.mk +++ b/tmk_core/protocol.mk @@ -46,12 +46,8 @@ else endif 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 - SHARED_EP_ENABLE = yes - endif + OPT_DEFS += -DNKRO_ENABLE + SHARED_EP_ENABLE = yes endif ifeq ($(strip $(NO_SUSPEND_POWER_DOWN)), yes) diff --git a/tmk_core/protocol/host.c b/tmk_core/protocol/host.c index 4f3867df08..e785cb24cc 100644 --- a/tmk_core/protocol/host.c +++ b/tmk_core/protocol/host.c @@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "host.h" #include "util.h" #include "debug.h" +#include "usb_device_state.h" #ifdef DIGITIZER_ENABLE # include "digitizer.h" @@ -90,6 +91,23 @@ static host_driver_t *host_get_active_driver(void) { 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 uint8_t split_led_state = 0; void set_split_host_keyboard_leds(uint8_t led_state) { diff --git a/tmk_core/protocol/host.h b/tmk_core/protocol/host.h index d824fca077..8e8a18e2ed 100644 --- a/tmk_core/protocol/host.h +++ b/tmk_core/protocol/host.h @@ -32,6 +32,7 @@ void host_set_driver(host_driver_t *driver); host_driver_t *host_get_driver(void); /* host driver interface */ +bool host_can_send_nkro(void); uint8_t host_keyboard_leds(void); led_t host_keyboard_led_state(void); void host_keyboard_send(report_keyboard_t *report); |