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

关于USB同步传输的缓冲区的问题,请大家帮忙看一下

楼主#
更多 发布于:2004-04-12 08:21
驱动是用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]中,然后向后排列?

请大家帮忙,谢谢!
chs718
驱动牛犊
驱动牛犊
  • 注册日期2003-07-12
  • 最后登录2004-04-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-12 13:49
自己re一下,沉的好快……
又把BuildIsochronousTransfer参数中的Mem换成I.IoctlBuffer(),还是不行……
游客

返回顶部