fineamy
驱动牛犊
驱动牛犊
  • 注册日期2004-06-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望32点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
阅读:1421回复:0

USB取接口描述符的奇怪问题!!!!

楼主#
更多 发布于:2004-08-04 22:38
在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取的是正确的.请指教,谢谢!!!!!!!!!!!!!!!
游客

返回顶部