阅读:1022回复:4
请版主给我一个用DS编写的中断读写的例子
最近做USB驱动程序,都快郁闷死了,总是导致机器重启。
所以想请版主给我一个用DS编写的进行中断读写的例子,让我参考一下,我现在实在是摸不着北,谢谢! |
|
沙发#
发布于:2004-07-25 13:44
请不吝赐教!
|
|
板凳#
发布于:2004-07-26 12:17
哪位大哥知道也请回复,不胜感激
|
|
地板#
发布于:2004-07-29 21:10
DS 不是自带EzUSB的驱动么 好好找找 里边有啊
|
|
地下室#
发布于: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; } |
|