USB 3.0 camera streaming issue

Hi,

I have and xHCI(host controller driver) windows 7 OS on which USB 2.0 camera works properly i.e i am able to stream using camera.But USB 3.0 camera is not working properly(it is enumerating but streaming is not happening).
I tried debugging, the difference i found is

  1. for USB 2.0 camera case when camera application is opened, the client camera driver is sending URB_SELECT_INTERFACEto the xHCI driver(which is working case).
  2. for USB3.0 camera case, when camera application is opened , the client camera driver is not sending URB_SELECT_INTERFACE to the xHCI driver(not working case).

In both cases enumeration is happening correctly.
what may the cause for not getting URB_SELECT_INTERFACE request?

Note: I am the owner of xHCI driver (it is not windows ITB driver).

Reddy wrote:

I have and xHCI(host controller driver) windows 7 OS on which USB 2.0 camera works properly i.e i am able to stream using camera.But USB 3.0 camera is not working properly(it is enumerating but streaming is not happening).

Microsoft’s USB 3 support was not introduced until Windows 8. The USB 3
host controller driver you are using in Windows 7 was developed by the
hardware vendor, and many vendors did not care enough to learn or follow
the rules.

  1. for USB 2.0 camera case when camera application is opened, the camera driver is sending URB_SELECT_INTERFACEto the xHCI driver(which is working case).

Well, it will send URB_SELECT_INTERFACE to the EHCI driver.  The USB 2
ports on a USB 3 host controller are handled by the EHCI driver.

  1. for USB3.0 camera case, when camera application is opened , the client camera driver is not sending URB_SELECT_INTERFACE to the xHCI driver(not working case).

Does this USB 3 camera work correctly in a Windows 10 system? Are you
using a bulk pipe or an isochronous pipe?  If you are using a bulk pipe,
then the SELECT_INTERFACE request is not strictly necessary.  Have you
triple-checked the super-speed configuration descriptor to make sure
they’re all valid?  The descriptors are one of the trickier parts of
getting a UVC camera alive.  If the descriptors are inconsistent,
usbvideo.sys will refuse to use the device.

Tim_Roberts said:

Microsoft’s USB 3 support was not introduced until Windows 8. The USB 3
host controller driver you are using in Windows 7 was developed by the
hardware vendor, and many vendors did not care enough to learn or follow
the rules.
The host controller provided by vendor supports USB3.0 mass storage and all other USB3.0 devices(tested), the issue is only with USB3.0 camera.

Well, it will send URB_SELECT_INTERFACE to the EHCI driver. The USB 2
ports on a USB 3 host controller are handled by the EHCI driver.

Vendor has provided single xHCI driver which supports both USB2.0 and USB3.0 devices.

Does this USB 3 camera work correctly in a Windows 10 system? Are you
using a bulk pipe or an isochronous pipe? If you are using a bulk pipe,
then the SELECT_INTERFACE request is not strictly necessary. Have you
triple-checked the super-speed configuration descriptor to make sure
they’re all valid? The descriptors are one of the trickier parts of
getting a UVC camera alive. If the descriptors are inconsistent,
usbvideo.sys will refuse to use the device.

Yes, USB 3 camera works properly with windows 10 ITB driver.
And camera is using isochronous pipe only .

My guess is their host controller driver isn’t doing USB 3.0 isochronous correctly. Do USB Audio devices work?

Unfortunately, you have very little chance of getting this to work. Vendor-supplied host controller drivers became obsolete as soon as Windows 8 came out, and with the impending end of support for WIndows 7, the vendor is not likely to offer their own support.

The spec calls for EHCI and xHCI paths to be completely separate.

Thanks Tim Roberts for the reply.

Does the usbvideo.sys client driver on windows 7 support USB 3.0 camera?

Yes, as of Windows 8.

@Tim_Roberts said:
Yes, as of Windows 8.

Hi Tim,
I’m trying to parse this statement but it seems ambiguous.
Did you mean:
No, usbvideo.sys support for USB 3 cameras was added in Win 8
or
Yes, usbvideo.sys for Win 7 was updated to support USB3 cameras when Win 8 came out
??

Thanks,
Eric

On Feb 13, 2019, at 6:38 PM, Eric_Wittmayer wrote:
>
>
>> @Tim_Roberts said:
>>
>> Yes, as of Windows 8.
>
> I’m trying to parse this statement but it seems ambiguous.

Sorry, I was being too clever with my response.

> Did you mean:
>
> No, usbvideo.sys support for USB 3 cameras was added in Win 8
> or
> Yes, usbvideo.sys for Win 7 was updated to support USB3 cameras when Win 8 came out
> ??

There are no Microsoft components in Windows 7 that support USB 3, and there never will be. Manufacturers that released xHCI drivers in the Windows 7 timeframe released their own USB driver stacks, but that means host controller, hub and port. The manufacturers did not release drivers like usbaudio and usbvideo. So, those drivers can handle some USB 3 devices, but not those that utilize USB 3-specific features.

In Windows 8, Microsoft added their own USB 3 drivers, including USB 3 support in the function drivers, like usbaudio and usbvideo.

Tim Roberts, timr@probo.com
Providenza & Boekelheide, Inc.