Customer have a device that is not enumerating properly on the TX28 from Karo (SOM manufacturer) units with Windows CE 6.0. It contains an interface that lists zero as the number of endpoints. As far I know, this is a valid interface that uses only the control endpoint.
However, the enumeration fails when determining the number of interfaces.
Specifically, in BSP/common/src/soc/COMMON_FSL_V3/MS/USBH/USB2COM/cdevice.cpp, the CreateUsbConfigurationStructure() call fails in the "second step".
The buffer contains 18 bytes, which correspond to a configuration descriptor and an interface descriptor. The interface descriptor specifies bNumEndpoints == 0, and there are also no additional interfaces. Therefore, 18 is the complete length of the data for the two descriptors.
The code has a test:
while (offset + x + sizeof(USB_INTERFACE_DESCRIPTOR) < dataBufferLen)
where offset=9, x=0, and dataBufferLen=18.
Therefore, the test fails, preventing the number of interfaces from being incremented, and resulting in a failure of the entire enumeration.
Changing the '<' to '<=' seems to resolve the problem.
Can we confirm this is an issue?
It seems that both WinCE 6.0 & WinCE 7.0 use the same conditional statement, so presumably both will fail, but only WinCE6 was tested.