阅读:1875回复:11
用DS开发的USB驱程出现问题,20分请教!
我想从设备读取64字节的数据到计算机。驱程部分如下:
NTSTATUS D12testDevice::READ_D12_Handler(KIrp I) { NTSTATUS status = STATUS_INSUFFICIENT_RESOURCES; KMemory Mem(I.Mdl()); ULONG dwTotalSize = I.ReadSize(CURRENT); ULONG dwMaxSize = m_Endpoint4IN.MaximumTransferSize(); if ( dwTotalSize > dwMaxSize ) { ASSERT(dwMaxSize); dwTotalSize = dwMaxSize; } ULONG dwBytesRead = 0; // Create an URB to do actual Bulk read from Pipe0 PURB pUrb = m_Endpoint4IN.BuildBulkTransfer( Mem, // Where is data coming from? dwTotalSize, // How much data to read? TRUE, // direction (TRUE = IN) NULL // Link to next URB ); if ( pUrb != NULL) { // Submit the URB to our USB device, synchronously - say less is OK pUrb->UrbBulkOrInterruptTransfer.TransferFlags = (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK); status = m_Endpoint4IN.SubmitUrb(pUrb, NULL, NULL); if ( NT_SUCCESS(status) ) { dwBytesRead = pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength; } delete pUrb; } I.Information() = dwBytesRead; return I.PnpComplete(this, status, IO_NO_INCREMENT); } 应用程序部分相关代码如下: char bufOutput[64]; ULONG nOutput=0; // Call device IO Control interface (READ_WORD) in driver if (!DeviceIoControl(m_hDevice, READ_D12, NULL, 0, bufOutput, 64, &nOutput, NULL) ) { return -1; } 设备能够打开,但当执行上面代码,计算机就重起。请高手们指教。万分感谢。 |
|
沙发#
发布于:2004-11-03 10:02
看看你的固件endport4是否支持bulk传输,再有如果你的ds版本为2。5或2。6的,在usb的bulk传输中有bug
|
|
板凳#
发布于:2004-11-03 13:01
感谢你顶一下,我给你5分。我用的是周立功的开发板。刚开始学驱程。用DS开发。想做个BULK的读端点。请指点一下。
|
|
地板#
发布于:2004-11-04 22:20
m_Endpoint4IN?
D12没有这么多端点啊! |
|
地下室#
发布于:2004-11-05 08:01
其实就是端点2。我用DS自动生成了BULK读写。但是一调用就重起。如果真的是DS有BUG,那我该怎么办。
|
|
5楼#
发布于:2004-11-09 12:49
周立功班子的endpoint2为bulk传输,所以可能是ds的版本的问题,参考
解 |
|
6楼#
发布于:2004-11-11 17:10
的确是ds版本的问题,我也遇到了同样的问题,在xp环境下,装的ds2.5;ds3.0版本里的BuildBulkTransfer定义为:
PURB BuildBulkTransfer( KMemory& Mdl, ULONG Length, BOOLEAN bIn, PURB Link=NULL, BOOLEAN bShortOk=FALSE, PURB pUrb=NULL ); FORM 2: PURB BuildBulkTransfer( PVOID Buffer, ULONG Length, BOOLEAN bIn, PURB Link=NULL, BOOLEAN bShortOk=FALSE, PURB pUrb=NULL ); |
|
7楼#
发布于:2004-11-12 08:49
[quote]周立功班子的endpoint2为bulk传输,所以可能是ds的版本的问题,参考
解 |
|
8楼#
发布于:2004-11-12 12:04
改用ds3.1即可,但编译vdwlibs.dsw时可能会出错,从98ddk里拷了一个头文件到2000ddk里就ok啦!
不过,好像我用的ds3.1只能用14天,谁有无限制版的ds3。1呀 |
|
9楼#
发布于:2004-11-24 11:46
我这里也发生过,不过我分别用win2000ddk下编译通过的驱动程序(XP下),win98ddk下编译的在(win98下),问题就没有发生了.不知道这样有没有问题.
|
|
10楼#
发布于:2004-11-26 09:43
我也遇到过同样的问题!看了“解
|
|
11楼#
发布于:2004-11-29 11:23
那么2.7版又怎么解决?我没有找到“解
|
|