]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - tmk_core/common/host.c
Configure Vagrant to use qmk_base_container (#6194)
[qmk_firmware.git] / tmk_core / common / host.c
index 11a05c2ddd74bba6f1af7db8e6550939f463a44b..f5d0416996b10b23959f8dcc862011a95d6ec31c 100644 (file)
@@ -22,9 +22,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "util.h"
 #include "debug.h"
 
-
 #ifdef NKRO_ENABLE
-bool keyboard_nkro = true;
+  #include "keycode_config.h"
+  extern keymap_config_t keymap_config;
 #endif
 
 static host_driver_t *driver;
@@ -51,6 +51,20 @@ uint8_t host_keyboard_leds(void)
 void host_keyboard_send(report_keyboard_t *report)
 {
     if (!driver) return;
+#if defined(NKRO_ENABLE) && defined(NKRO_SHARED_EP)
+    if (keyboard_protocol && keymap_config.nkro) {
+        /* The callers of this function assume that report->mods is where mods go in.
+         * But report->nkro.mods can be at a different offset if core keyboard does not have a report ID.
+         */
+        report->nkro.mods = report->mods;
+        report->nkro.report_id = REPORT_ID_NKRO;
+    } else
+#endif
+    {
+#ifdef KEYBOARD_SHARED_EP
+        report->report_id = REPORT_ID_KEYBOARD;
+#endif
+    }
     (*driver->send_keyboard)(report);
 
     if (debug_keyboard) {
@@ -65,6 +79,9 @@ void host_keyboard_send(report_keyboard_t *report)
 void host_mouse_send(report_mouse_t *report)
 {
     if (!driver) return;
+#ifdef MOUSE_SHARED_EP
+    report->report_id = REPORT_ID_MOUSE;
+#endif
     (*driver->send_mouse)(report);
 }