Here is my configuration first.
PIC32MX470 Curiosity Board
Background: I have been using a HID interface with PIC18F for many years and have fine tuned PC interface and the PIC interface to achieve a robust control interface, including firmware upgrades and have tested on Ubuntu. Because of the complexity of what I need to do next (MSD Storage, MP3 player, BLE, motor and multiple LED control), i decided to move to a PIC32.
I was able to get the HID Basic to work right away. I then moved on to the HID_MSD app. Issues with getting a SST26 device to work ( see https://www.microchip.com...=1086747&mpage=1),
but solved that. I had done a simple test to see if the device manager in Win10 recognized i, it did. I also have a HidTest program I found a long time ago that verifies all the low level functionality, and it worked. So i had moved off to other tasks. When I cam back to use the PC program, it all failed. Going back to the HID Basic worked as expected, but this HID_MSD would not work.
The symptoms were the PC program would hang on sending the first HID command. The HID event handler would only fire once, with a set idle command on enumeration. I had compared the HID_Basic and HID_MSD app.c files to see what the differences were. Obviously my program is slightly different just because of what I am doing. After putting in the dbug console and printf statements everywhere, I was really no closer. Tracked through the USB event ISR looking for why this was not re-arming.
In the end it was this line of code.
USB_DEVICE_HID_ReportReceive (USB_DEVICE_HID_INDEX_0, &appData.rxTransferHandle, appData.receiveDataBuffer, 64 );
In both apps, this is in quite a few places. It just happened that the initialization path in my code did not cross this at the correct time. For now it is in the HID event handler, SetIdle case. Not sure that is where it will stay put at least the PC and the PIC32 are talking to each other now. Just thought I would pass along what happened to me.