mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
Report correctly USB device class and subclass when the device reports only one interface and the class is not defined in the device descriptor
svn path=/trunk/; revision=18006
This commit is contained in:
parent
0c7bb23c18
commit
b7a7ffcfcd
1 changed files with 29 additions and 13 deletions
|
@ -110,13 +110,11 @@ UsbhubFdoQueryBusRelations(
|
|||
if (!NT_SUCCESS(Status))
|
||||
goto ByeBye;
|
||||
|
||||
DPRINT1("child #%lu: USB\\Vid_%04x&Pid_%04x&Rev_%04x (class %x:%x)\n",
|
||||
DPRINT1("child #%lu: USB\\Vid_%04x&Pid_%04x&Rev_%04x\n",
|
||||
i,
|
||||
PdoExtension->dev->descriptor.idVendor,
|
||||
PdoExtension->dev->descriptor.idProduct,
|
||||
PdoExtension->dev->descriptor.bcdDevice,
|
||||
PdoExtension->dev->descriptor.bDeviceClass,
|
||||
PdoExtension->dev->descriptor.bDeviceSubClass);
|
||||
PdoExtension->dev->descriptor.bcdDevice);
|
||||
sprintf(Buffer[0], "USB\\Vid_%04x&Pid_%04x&Rev_%04x",
|
||||
PdoExtension->dev->descriptor.idVendor,
|
||||
PdoExtension->dev->descriptor.idProduct,
|
||||
|
@ -139,15 +137,33 @@ UsbhubFdoQueryBusRelations(
|
|||
if (PdoExtension->dev->actconfig->desc.bNumInterfaces == 1)
|
||||
{
|
||||
/* Single-interface USB device */
|
||||
sprintf(Buffer[0], "USB\\Class_%02x&SubClass_%02x&Prot_%02x",
|
||||
PdoExtension->dev->descriptor.bDeviceClass,
|
||||
PdoExtension->dev->descriptor.bDeviceSubClass,
|
||||
PdoExtension->dev->descriptor.bDeviceProtocol);
|
||||
sprintf(Buffer[1], "USB\\Class_%02x&SubClass_%02x",
|
||||
PdoExtension->dev->descriptor.bDeviceClass,
|
||||
PdoExtension->dev->descriptor.bDeviceSubClass);
|
||||
sprintf(Buffer[2], "USB\\Class_%02x",
|
||||
PdoExtension->dev->descriptor.bDeviceClass);
|
||||
if (PdoExtension->dev->descriptor.bDeviceClass != 0)
|
||||
{
|
||||
/* Use these values for device class/sub class/protocol */
|
||||
sprintf(Buffer[0], "USB\\Class_%02x&SubClass_%02x&Prot_%02x",
|
||||
PdoExtension->dev->descriptor.bDeviceClass,
|
||||
PdoExtension->dev->descriptor.bDeviceSubClass,
|
||||
PdoExtension->dev->descriptor.bDeviceProtocol);
|
||||
sprintf(Buffer[1], "USB\\Class_%02x&SubClass_%02x",
|
||||
PdoExtension->dev->descriptor.bDeviceClass,
|
||||
PdoExtension->dev->descriptor.bDeviceSubClass);
|
||||
sprintf(Buffer[2], "USB\\Class_%02x",
|
||||
PdoExtension->dev->descriptor.bDeviceClass);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Use values specified in the interface descriptor */
|
||||
struct usb_host_interface *itf = PdoExtension->dev->actconfig->interface->altsetting;
|
||||
sprintf(Buffer[0], "USB\\Class_%02x&SubClass_%02x&Prot_%02x",
|
||||
itf->desc.bInterfaceClass,
|
||||
itf->desc.bInterfaceSubClass,
|
||||
itf->desc.bInterfaceProtocol);
|
||||
sprintf(Buffer[1], "USB\\Class_%02x&SubClass_%02x",
|
||||
itf->desc.bInterfaceClass,
|
||||
itf->desc.bInterfaceSubClass);
|
||||
sprintf(Buffer[2], "USB\\Class_%02x",
|
||||
itf->desc.bInterfaceClass);
|
||||
}
|
||||
Status = UsbhubInitMultiSzString(
|
||||
&PdoExtension->CompatibleIds,
|
||||
Buffer[0], Buffer[1], Buffer[2], NULL);
|
||||
|
|
Loading…
Reference in a new issue