@@ -60,27 +60,33 @@ void common_hal_usb_hid_device_send_report(usb_hid_device_obj_t *self, uint8_t*
60
60
}
61
61
}
62
62
63
+ static usb_hid_device_obj_t * get_hid_device (uint8_t report_id ) {
64
+ for (uint8_t i = 0 ; i < USB_HID_NUM_DEVICES ; i ++ ) {
65
+ if (usb_hid_devices [i ].report_id == report_id ) {
66
+ return & usb_hid_devices [i ];
67
+ }
68
+ }
69
+ return NULL ;
70
+ }
71
+
63
72
// Callbacks invoked when receive Get_Report request through control endpoint
64
73
uint16_t tud_hid_generic_get_report_cb (uint8_t report_id , hid_report_type_t report_type , uint8_t * buffer , uint16_t reqlen ) {
65
74
// only support Input Report
66
75
if ( report_type != HID_REPORT_TYPE_INPUT ) return 0 ;
67
76
68
- // index is ID-1
69
- uint8_t idx = ( report_id ? (report_id - 1 ) : 0 );
70
-
71
77
// fill buffer with current report
72
- memcpy (buffer , usb_hid_devices [ idx ]. report_buffer , reqlen );
78
+ memcpy (buffer , get_hid_device ( report_id ) -> report_buffer , reqlen );
73
79
return reqlen ;
74
80
}
75
81
76
82
// Callbacks invoked when receive Set_Report request through control endpoint
77
83
void tud_hid_generic_set_report_cb (uint8_t report_id , hid_report_type_t report_type , uint8_t const * buffer , uint16_t bufsize ) {
78
- // index is ID-1
79
- uint8_t idx = ( report_id ? (report_id - 1 ) : 0 );
84
+ usb_hid_device_obj_t * hid_device = get_hid_device (report_id );
80
85
81
86
if ( report_type == HID_REPORT_TYPE_OUTPUT ) {
82
87
// Check if it is Keyboard device
83
- if ( (usb_hid_devices [idx ].usage_page == HID_USAGE_PAGE_DESKTOP ) && (usb_hid_devices [idx ].usage == HID_USAGE_DESKTOP_KEYBOARD ) ) {
88
+ if (hid_device -> usage_page == HID_USAGE_PAGE_DESKTOP &&
89
+ hid_device -> usage == HID_USAGE_DESKTOP_KEYBOARD ) {
84
90
// This is LED indicator (CapsLock, NumLock)
85
91
// TODO Light up some LED here
86
92
}
0 commit comments