阅读:1430回复:1
关于USB同步传输的缓冲区的问题,请大家帮忙看一下
驱动是用DS2.7编写的,用同步传输模式(D12的模式3中的端口2),其中驱动程序中有关URB部分的代码如下:
#define ISOC_NUM_PACKETS_PER_URB 1 #define ISOC_PACKET_SIZE 2 #define ISOC_URB_DATA_SIZE (ISOC_NUM_PACKETS_PER_URB * ISOC_PACKET_SIZE) KMemory Mem(I.Mdl()); URB pUrb=m_Endpoint2IN.BuildIsochronousTransfer( ISOC_NUM_PACKETS_PER_URB, ISOC_PACKET_SIZE, TRUE, TRUE, USBD_ISO_START_FRAME_RANGE, Mem, ISOC_URB_DATA_SIZE ); status=m_Endpoint2IN.SubmitUrb(pUrb); 应用程序中有关代码如下: #define IOCTL_INBUF_SIZE 512 #define IOCTL_OUTBUF_SIZE 512 CHAR bufInput[IOCTL_INBUF_SIZE]; //Input to device CHAR bufOutput[IOCTL_OUTBUF_SIZE]; // Output from device ULONG nOutput; // Count written to bufOutput // Call device IO Control interface (TEST_IOCTL_TESTREAD) in driver printf(\"Issuing Ioctl to device - \"); if (!DeviceIoControl(hDevice, TEST_IOCTL_TESTREAD, bufInput, IOCTL_INBUF_SIZE, bufOutput, IOCTL_OUTBUF_SIZE, &nOutput, NULL) ) { printf(\"ERROR: DeviceIoControl returns %0x.\", GetLastError()); Exit(1); } 目的是从端口2读入2个字节的数据到主机应用程序。 现在的情况是DeviceControl函数能够正常返回STATUS_SUCCESS,但缓冲区bufOutput中的数据与DeviceIoControl函数调用前没有任何变化。 另外,请问在bufOutput中的数据应是如何存放的?比如说,设备端最先发出的数据是存放在bufOutput[0]中,然后向后排列? 请大家帮忙,谢谢! |
|
沙发#
发布于:2004-04-12 13:49
自己re一下,沉的好快……
又把BuildIsochronousTransfer参数中的Mem换成I.IoctlBuffer(),还是不行…… |
|