阅读:1924回复:0
Interface =0 与 Alternatesetting =0 /1 有什么区别
大家好,我用DriverStudio 2.0开发的EZUSB2131QC的驱动程序。在调试时候发现有如下问题:
1 程序代码: (1) 构造函数 EzusbDevice::EzusbDevice(PDEVICE_OBJECT Pdo, ULONG Unit) :KPnpDevice(Pdo, KUnitizedName(L"Ezusb-", Unit), FILE_DEVICE_UNKNOWN, KUnitizedName(L"Ezusb-", Unit), 0, DO_DIRECT_IO | DO_POWER_PAGABLE ) { ... m_Interface.Initialize( m_Lower, //KUsbLowerDevice 0, //InterfaceNumber 1, //ConfigurationValue 0 //Initial Interface Alternate Setting ); // Initialize each Pipe object ... m_Endpoint2IN.Initialize(m_Lower, 0x82, 4096); m_Endpoint2OUT.Initialize(m_Lower, 0x02, 4096); ... } (2)OnStartDevice()函数 NTSTATUS EzusbDevice::OnStartDevice(KIrp I) { ... acStatus = m_Lower.ActivateConfiguration(1); ... } 3问题与现象: A---------------------------------------------------------- 如果我在(1)中把 Alternatesetting =0,则在(2)中 acStatus 返回STATUS_SUCCESS;但这是的驱动程序的Debug版,用SoftICE调试使会发现在KUSB.cpp中:NTSTATUS KUsbLowerDevice::Configure( KArray<KUsbPipe*>& PipeArray, PUSB_ENDPOINT_DESCRIPTOR pFirstEndptDesc)函数的 “else { ASSERT( pFirstEndptDesc ); ASSERT( PipeArray.IsValid() ); }”过不了关。但是Release版本不会出现这个问题(这也许与VC60对ASSERT的处理有关)。就这样子,我加载这个驱动程序,一般情况下都运行的很好。即使我下载一个特殊固件(该固件实现了软拔插),这该设备载能正常运转。 -------------------------------------------------------------------- B------------------------------------------------------- 如果我在(1)中把 Alternatesetting =1,则在(2)中 acStatus 返回AC_COULD_NOT_LOCATE_INTERFACE. 就这样子,我加载这个驱动程序,下载一般固件,设备和驱动都运行的很好。如果我还download那个特殊固件(该固件实现了软拔插),则该设备载没法访问了(旁边出一个“!”)。 请各位高手帮帮忙,分析一下上面的现象,多谢多谢! [fyshe 编辑于 2001-10-31 14:02] |
|