Background
I am interested in sending/receiving large HID reports. Here is a working descriptor that has been verified in another application on another processor:
Item Tag (Value) Raw Data
Usage Page (Generic Desktop) 05 01
Usage (Undefined) 09 00
Collection (Application) A1 01
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (63) 95 3F
Usage (Undefined) 09 00
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Report Size (8) 75 08
Report Count (63) 95 3F
Usage (Undefined) 09 00
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02
End Collection C0
Originally report count was 64 but just to be safe I have reduced it. My endpoints look like this:
I will be communicating on the PC side using ReadFile and WriteFile which (according to Jan Axelson's book) use Interrupt IN to transfer data as opposed to "Control with Get Report request"
Microsoft warns against using HidD_GetInputReport because that bypasses some buffering or whatever.
The Issue
I can send output reports just fine as far as I can tell. I send input reports via button press.
if (keys & HAL_KEY_SW_1) { while (!hidSendHidInReport(h, USB_HID_KBD_EP, 63)); }
where h is a pointer. I seem to have developed a partial solution to this problem while writing this post, so hopefully if someone else runs into a similar issue they will be helped by this post.