fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1923回复:0

Interface =0 与 Alternatesetting =0 /1 有什么区别

楼主#
更多 发布于:2001-10-31 13:57
大家好,我用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]
游客

返回顶部