Author: janderwald
Date: Fri Jan 27 18:33:41 2012
New Revision: 55255
URL:
http://svn.reactos.org/svn/reactos?rev=55255&view=rev
Log:
[USBCCGP]
- Use Function index than interface number. Fixes invalid hardware ids
- Fix construction of compatible id
- USB Audio device now installs on XP when usbccgp is used
- Now asserts in sb-bringup-trunk\drivers\usb\usbccgp\pdo.c:343) PDO_Dispatch Function f
not implemented, which is implemented next
Modified:
branches/usb-bringup-trunk/drivers/usb/usbccgp/function.c
Modified: branches/usb-bringup-trunk/drivers/usb/usbccgp/function.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/u…
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbccgp/function.c [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbccgp/function.c [iso-8859-1] Fri Jan 27
18:33:41 2012
@@ -514,6 +514,7 @@
USBCCG_InitIdsWithInterfaceDescriptor(
IN PFDO_DEVICE_EXTENSION FDODeviceExtension,
IN PUSB_INTERFACE_DESCRIPTOR Descriptor,
+ IN ULONG FunctionIndex,
OUT PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor)
{
ULONG Index;
@@ -553,17 +554,16 @@
}
-
//
// now init hardware id
//
Index = swprintf(Buffer,
L"USB\\VID_%04x&PID_%04x&Rev_%04x&MI_%02x",
FDODeviceExtension->DeviceDescriptor->idVendor,
FDODeviceExtension->DeviceDescriptor->idProduct,
FDODeviceExtension->DeviceDescriptor->bcdDevice,
-
Descriptor->bInterfaceNumber) + 1;
+ FunctionIndex) +
1;
Index += swprintf(&Buffer[Index],
L"USB\\VID_%04x&PID_%04x&MI_%02x",
FDODeviceExtension->DeviceDescriptor->idVendor,
FDODeviceExtension->DeviceDescriptor->idProduct,
-
Descriptor->bInterfaceNumber) + 1;
+ FunctionIndex) +
1;
// allocate result buffer
DescriptionBuffer = AllocateItem(NonPagedPool, (Index + 1) * sizeof(WCHAR));
@@ -581,13 +581,12 @@
FunctionDescriptor->HardwareId.Length = Index * sizeof(WCHAR);
FunctionDescriptor->HardwareId.MaximumLength = (Index + 1) * sizeof(WCHAR);
-
//
// now init the compatible id
//
Index = swprintf(Buffer,
L"USB\\Class_%02x&SubClass_%02x&Prot_%02x",
Descriptor->bInterfaceClass, Descriptor->bInterfaceSubClass,
Descriptor->bInterfaceProtocol) + 1;
- Index += swprintf(&Buffer[Index], L"USB\\Class_%04x&SubClass_%04x",
Descriptor->bInterfaceClass, Descriptor->bInterfaceSubClass) + 1;
- Index += swprintf(&Buffer[Index], L"USB\\Class_%04x",
Descriptor->bInterfaceClass) + 1;
+ Index += swprintf(&Buffer[Index], L"USB\\Class_%02x&SubClass_%02x",
Descriptor->bInterfaceClass, Descriptor->bInterfaceSubClass) + 1;
+ Index += swprintf(&Buffer[Index], L"USB\\Class_%02x",
Descriptor->bInterfaceClass) + 1;
// allocate result buffer
DescriptionBuffer = AllocateItem(NonPagedPool, (Index + 1) * sizeof(WCHAR));
@@ -604,6 +603,11 @@
FunctionDescriptor->CompatibleId.Buffer = DescriptionBuffer;
FunctionDescriptor->CompatibleId.Length = Index * sizeof(WCHAR);
FunctionDescriptor->CompatibleId.MaximumLength = (Index + 1) * sizeof(WCHAR);
+
+ //
+ // done
+ //
+ return STATUS_SUCCESS;
}
@@ -678,7 +682,7 @@
//
// now init the device ids
//
- Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension,
InterfaceDescriptor, &FDODeviceExtension->FunctionDescriptor[Index]);
+ Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension,
InterfaceDescriptor, Index, &FDODeviceExtension->FunctionDescriptor[Index]);
if (!NT_SUCCESS(Status))
{
//
@@ -803,7 +807,7 @@
//
// now init the device ids
//
- Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension,
InterfaceDescriptor, &FDODeviceExtension->FunctionDescriptor[0]);
+ Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension, FirstDescriptor,
0, &FDODeviceExtension->FunctionDescriptor[0]);
if (!NT_SUCCESS(Status))
{
//