metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:898回复:0

请教UsbInterruptIn传输的问题

楼主#
更多 发布于:2004-08-01 18:43
我仿照EZUsb驱动程序自己写了一个ISP1581板的InterruptIn传输的驱动程序。想实现驱动程序对USB的InterruptIn的循环读取。程序部分如下:
在头文件中声明:
MEMBER_COMPLETEIRPWITHCONTEXT( INT_COMPLETION_INFO, InterruptTransferComplete )


#ifdef _COMMENT_ONLY

// The following member functions are actually defined by the
// a DEVMEMBER_xxx or MEMBER_xxx macro (such as DEVMEMBER_DISPATCHERS).
// The macro __COMMENT_ONLY never gets defined.  These comment-only
// definitions simply allow easy navigation to the functions within
// the Developer Studio using the class browser.

NTSTATUS __stdcall InterruptTransferComplete(KIrp I, PINT_COMPLETION_INFO pContext); // COMMENT_ONLY
#endif
在.cpp文件中有代码:
NTSTATUS KUsbInterruptTransfer::StartPolling(
PVOID Buffer,
ULONG Length,
USB_INTERRUPT_CALLBACK pfnOnInterrupt,
PVOID pClientContext
)
{
ASSERT( m_InterruptPipe->IsOpen() );

if( ! m_InterruptPipe->IsOpen() )
{
return STATUS_INVALID_DEVICE_STATE;
}

// allocate a new context structure
PINT_COMPLETION_INFO pCompInfo = new (NonPagedPool) INT_COMPLETION_INFO;

// make sure it succeeded
if( NULL == pCompInfo )
{
return STATUS_INSUFFICIENT_RESOURCES;
}

// initialize the context structure
pCompInfo->m_pClass = this;
pCompInfo->m_pfnOnInterrupt = pfnOnInterrupt;
pCompInfo->m_pClientContext = pClientContext;

m_InterruptPipe->BuildInterruptTransfer(
Buffer,
Length,
m_bShortOk,
NULL,
m_pIntUrb
);

pCompInfo->m_pUrb = m_pIntUrb;

NTSTATUS status;
status = m_InterruptPipe->SubmitUrb(
m_KIrp,
m_pIntUrb,
LinkTo(InterruptTransferComplete),
pCompInfo,
300
);
return status;
}
也写了InterruptTransferComplete()函数(与EZUSB基本相同,是完成循环的循环体。只是在开始的地方加了个Pending判断)
问题是:用SoftICE跟踪,程序执行进入StartPolling,执行SubmitUrb后(结果为0x103,我记得好像是Pending)它直接就返回了,而不是进入到InterruptTransferComplete函数。不知什么原因。
另外,当拔下USB连接线时,会进入到InterruptTransferComplete()函数,好像是在开始的时候InterruptIn请求并未结束,所以未能进入到InterruptTransferComplete()。但我已设了超时了呀(EZUSB原来的程序中是没有的)?
希望哪位大侠能告诉我。谢谢。

[编辑 -  8/1/04 by  metalwing]
新手上路,请多关照.
游客

返回顶部