BenPengPeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-01
  • 最后登录2004-07-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1022回复:4

请版主给我一个用DS编写的中断读写的例子

楼主#
更多 发布于:2004-07-25 11:53
最近做USB驱动程序,都快郁闷死了,总是导致机器重启。
所以想请版主给我一个用DS编写的进行中断读写的例子,让我参考一下,我现在实在是摸不着北,谢谢!
BenPengPeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-01
  • 最后登录2004-07-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-25 13:44
请不吝赐教!
BenPengPeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-01
  • 最后登录2004-07-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-26 12:17
哪位大哥知道也请回复,不胜感激
mboma
驱动牛犊
驱动牛犊
  • 注册日期2003-02-21
  • 最后登录2010-03-11
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-29 21:10
DS 不是自带EzUSB的驱动么 好好找找 里边有啊
sunli425
驱动牛犊
驱动牛犊
  • 注册日期2004-06-19
  • 最后登录2004-12-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-30 11:59
我自己的板子用的中断读,1.1协议下没有中断写,供你参考
我也是刚开始写驱动,不对的地方请大家指正!

NTSTATUS MUSBDrvDevice::MUSBDRV_READ_Handler(KIrp I)
{
NTSTATUS resetPipeStatus;
NTSTATUS status = STATUS_SUCCESS;

// Always ok to write 0 elements.
if (I.ReadSize() == 0)
{
I.Information() = 0;
return I.PnpComplete(this, STATUS_SUCCESS);
}
ULONG dwTotalSize = I.ReadSize(CURRENT);
ULONG dwMaxSize = m_Endpoint1IN.MaximumTransferSize();

if (dwTotalSize > dwMaxSize)
{
ASSERT(dwMaxSize);
dwTotalSize = dwMaxSize;
}

// Declare a memory object
KMemory Mem(I.Mdl());

// Create an URB to do actual Bulk write to the pipe
PURB pUrb = m_Endpoint1IN.BuildInterruptTransfer(
Mem,          // Where is data coming from?
dwTotalSize,  // How much data to read?
TRUE,  // Short OK
NULL,         // Link to next URB
NULL  // PUrb
);        

ULONG nBytesWritten=0;
if ( pUrb != NULL)
{
pUrb->UrbBulkOrInterruptTransfer.TransferFlags = USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK;
        status = m_Endpoint1IN.SubmitUrb(pUrb, NULL, NULL,100);
if ( NT_SUCCESS(status) )
{
nBytesWritten = pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;
if (nBytesWritten > 0)
t << "Read(m_Endpoint1IN) : " << nBytesWritten<< " (bytes)\n";
}else
{
t << "========================= Read(m_Endpoint1IN) ERROR : " << status << EOL;
resetPipeStatus=m_Endpoint1IN.Reset();
if(!NT_SUCCESS(resetPipeStatus))
{
ULONG_PTR nInfo = NULL;
resetPipeStatus = m_Lower.DeviceIoControl(
IOCTL_INTERNAL_USB_RESET_PORT,
NULL,
0,
NULL,
0,
TRUE,
&nInfo
);
}
}
delete pUrb;
}

// set returned count
I.Information() = nBytesWritten;
// allow IRP completion processing
return STATUS_SUCCESS;
}
游客

返回顶部