阅读:1421回复:0
USB取接口描述符的奇怪问题!!!!
在USB发送GETDEVICEDESCRIPTOR,GETCONFIGDESCRIPTOR时成功取到了描述符,但在下一步setconfigure时,得不到正确的接口描述符,以下是所用历程:
********************************** 取配置描述符,这是正确的: ************************************ get_config_descriptor_retry: configurationDescriptor = USBCAMD_ExAllocatePool(NonPagedPool, siz); if (configurationDescriptor) { UsbBuildGetDescriptorRequest(urb, (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), USB_CONFIGURATION_DESCRIPTOR_TYPE, 0, 0, configurationDescriptor, NULL, siz, NULL); ntStatus = USBCAMD_CallUSBD(DeviceExtension, urb); USBCAMD_KdPrint (MAX_TRACE, ("'Configuration Descriptor = %x, len %x\n", configurationDescriptor, urb->UrbControlDescriptorRequest.TransferBufferLength)); } else { ntStatus = STATUS_INSUFFICIENT_RESOURCES; } // // if we got some data see if it was enough. // // NOTE: we may get an error in URB because of buffer overrun // if (urb->UrbControlDescriptorRequest.TransferBufferLength>0 && configurationDescriptor->wTotalLength > siz) { //siz = configurationDescriptor->wTotalLength + 16; siz = configurationDescriptor->wTotalLength; USBCAMD_ExFreePool(configurationDescriptor); configurationDescriptor = NULL; goto get_config_descriptor_retry; } USBCAMD_ExFreePool(urb); } else { ntStatus = STATUS_INSUFFICIENT_RESOURCES; } if (configurationDescriptor) { // // Get our pipes // if (NT_SUCCESS(ntStatus)) { ntStatus = USBCAMD_SelectConfiguration(DeviceExtension, configurationDescriptor); ************************************** 接下来应该设置配置,但得不到正确的接口描述符: *************************************************** tmp = interfaceList = USBCAMD_ExAllocatePool(PagedPool, sizeof(USBD_INTERFACE_LIST_ENTRY) * (numberOfInterfaces+1)); if (tmp) { for ( i = 0; i < numberOfInterfaces; i++ ) { interfaceDescriptor = USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, ConfigurationDescriptor, i, // Interface - don't care -1, // Alternate Setting - don't care -1, // Class - don't care -1, // SubClass - don't care -1); // Protocol - don't care interfaceList->InterfaceDescriptor = interfaceDescriptor; interfaceList++; } interfaceList.InterfaceDescriptor = NULL; // interfaceList->InterfaceDescriptor = NULL; // // Allocate a URB big enough for this request // urb = USBD_CreateConfigurationRequestEx(ConfigurationDescriptor, tmp); 上面我看不出有何不对,ConfigurationDescriptor取的是正确的.请指教,谢谢!!!!!!!!!!!!!!! |
|