I have tried tracing this in the debugger, and the device is stuck in a sync_wait call. Below is the snippet of code:
// The first receive data request was initiated after enumeration.
// After that we wait until we are ready to read data before
// we request more. This mechanism prevents data loss
// by allowing the USB controller to hold off the host with NAKs
// on the interrupt out pipe until we are ready.
if (g_device_composite.hid_generic.hid_packet.isReceiveDataRequestRequired) {
// Initiate receive on interrupt out pipe.
USB_DeviceHidRecv(g_device_composite.hid_generic.hid_handle, USB_HID_GENERIC_ENDPOINT_OUT,
(uint8_t *)&g_device_composite.hid_generic.hid_packet.report.header, sizeof(g_device_composite.hid_generic.hid_packet.report));
}
g_device_composite.hid_generic.hid_packet.isReceiveDataRequestRequired = true; // Wait until we have received a report. sync_wait(&g_device_composite.hid_generic.hid_packet.receiveSync, kSyncWaitForever);