USB Device Interface not showing up in Device Manager

We are developing a device with a composite USB interface. Right now, we have one interface. We are using Windows 8.1. On our desktop systems, in device manger, the HW ID is showing &MI_00 on the end.

When we plugged the device into a laptop, it didn’t have the &MI_00. Since we had the &MI_00 in the inf file, device manager did not load the driver.

Does anyone know why they are different? Thanks.

xxxxx@ddc-web.com wrote:

We are developing a device with a composite USB interface. Right now, we have one interface. We are using Windows 8.1. On our desktop systems, in device manger, the HW ID is showing &MI_00 on the end.

When we plugged the device into a laptop, it didn’t have the &MI_00. Since we had the &MI_00 in the inf file, device manager did not load the driver.

Does anyone know why they are different?

If your device only has one interface, then it’s not a composite
device. The MI_00 should not be involved.

When you’re developing a new device, it is possible to get yourself in
trouble if you switch between a composite and a non-composite device.
When you have a composite device, the root (VID_xxxx&PID_xxxx) has to be
claimed by usbccgp. If you had a driver that previous claimed the
non-composite root, it will continue to be loaded even after you switch
to composite, which means no one is around to expose the MI_xx device
objects.


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

“If your device only has one interface” …
But I wonder what actually happens if the device meets the class
specification for usbccgp:

The device class field of the device descriptor (*bDeviceClass*) must
contain a value of zero, or the class (*bDeviceClass*), subclass (
*bDeviceSubClass*), and protocol (*bDeviceProtocol*) fields of the device
descriptor must have the values 0xEF, 0x02 and 0x01 respectively, as
explained in USB Interface Association Descriptor
http:
.

While only having one interface. I’ll guess that in some versions of
windows it gets enumerated as USB\COMPOSITE and in some it doesn’t. In the
ones it does usbccgp would be the function driver and would create a
single MI_*
device.

So is the laptop running a version of windows that is not 8.1?

Mark Roddy

On Thu, Oct 30, 2014 at 4:55 PM, Tim Roberts wrote:

> xxxxx@ddc-web.com wrote:
> > We are developing a device with a composite USB interface. Right now, we
> have one interface. We are using Windows 8.1. On our desktop systems, in
> device manger, the HW ID is showing &MI_00 on the end.
> >
> > When we plugged the device into a laptop, it didn’t have the &MI_00.
> Since we had the &MI_00 in the inf file, device manager did not load the
> driver.
> >
> > Does anyone know why they are different?
>
> If your device only has one interface, then it’s not a composite
> device. The MI_00 should not be involved.
>
> When you’re developing a new device, it is possible to get yourself in
> trouble if you switch between a composite and a non-composite device.
> When you have a composite device, the root (VID_xxxx&PID_xxxx) has to be
> claimed by usbccgp. If you had a driver that previous claimed the
> non-composite root, it will continue to be loaded even after you switch
> to composite, which means no one is around to expose the MI_xx device
> objects.
>
> –
> Tim Roberts, xxxxx@probo.com
> Providenza & Boekelheide, Inc.
>
>
> —
> NTDEV is sponsored by OSR
>
> Visit the list at: http://www.osronline.com/showlists.cfm?list=ntdev
>
> OSR is HIRING!! See http://www.osr.com/careers
>
> For our schedule of WDF, WDM, debugging and other seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at
> http://www.osronline.com/page.cfm?name=ListServer
></http:>

Mark Roddy wrote:

“If your device only has one interface” …
But I wonder what actually happens if the device meets the class
specification for usbccgp:

The device class field of the device descriptor (*bDeviceClass*) must
contain a value of zero, or the class (*bDeviceClass*), subclass
(*bDeviceSubClass*), and protocol (*bDeviceProtocol*) fields of the
device descriptor must have the values 0xEF, 0x02 and 0x01
respectively, as explained in USB Interface Association Descriptor
http:.

Actually, that’s the opposite case. An IAD groups multiple interfaces
together so they are treated as one and handled by one driver. If you
have an Audio Class or Video Class device, for example, it has two
interfaces, but the hub driver only creates one PDO, without MI_xx.
Usbccgp is not involved.

> While only having one interface. I’ll guess that in some versions of
> windows it gets enumerated as USB\COMPOSITE and in some it doesn’t. In
> the ones it does usbccgp would be the function driver and would
> create a single MI_* device.

I don’t think so. As far as I know, the decision on whether to expose
USB\COMPOSITE is based entirely on counting the interfaces.

Now, it’s easy enough to see how one could get into this state. Say
that version one of the device has two interfaces. In that case, PnP
will assign usbccgp.sys as the driver for the composite device, and it
will create additional PDOs.

Now, let’s say you remove all but one interface. If you plug it in to
that same system, the registry is already configured to hand the base
device to usbccgp.sys, and usbccgp.sys will dutifully create MI_00.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.</http:>