Browse Source

Fix NKRO and Mouse Emulation on arm_atsam (#23945)

Izumemori 2 years ago
parent
commit
40f2575b56
1 changed files with 17 additions and 1 deletions
  1. 17 1
      tmk_core/protocol/arm_atsam/main_arm_atsam.c

+ 17 - 1
tmk_core/protocol/arm_atsam/main_arm_atsam.c

@@ -88,7 +88,13 @@ void send_nkro(report_nkro_t *report) {
     __disable_irq();
     __DMB();
 
-    memcpy(udi_hid_nkro_report, report, UDI_HID_NKRO_REPORT_SIZE);
+    /*
+        Skipping ahead `sizeof(report->report_id)` bytes
+        since `report_id` is not used by this driver
+     */
+    void *report_no_report_id = (void *)((char *)report + sizeof(report->report_id));
+
+    memcpy(udi_hid_nkro_report, report_no_report_id, UDI_HID_NKRO_REPORT_SIZE);
     udi_hid_nkro_b_report_valid = 1;
     udi_hid_nkro_send_report();
 
@@ -105,7 +111,17 @@ void send_mouse(report_mouse_t *report) {
     __disable_irq();
     __DMB();
 
+#    ifdef MOUSE_SHARED_EP
+    /*
+        Skipping ahead `sizeof(report->report_id)` bytes
+        since `report_id` is not used by this driver
+     */
+    void *report_no_report_id = (void *)((char *)report + sizeof(report->report_id));
+
+    memcpy(udi_hid_mou_report, report_no_report_id, UDI_HID_MOU_REPORT_SIZE);
+#    else
     memcpy(udi_hid_mou_report, report, UDI_HID_MOU_REPORT_SIZE);
+#    endif
     udi_hid_mou_b_report_valid = 1;
     udi_hid_mou_send_report();