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.