eternalblaze
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2003-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1297回复:2

关于isochronous的问题

楼主#
更多 发布于:2003-03-24 13:34
我用的是isochronous传输方式
现在不太明白packet中的有效数据和discriptor的分布位置?

// 。。。

   ULONG                        packetsRead;
   PUSBD_ISO_PACKET_DESCRIPTOR  isoDesc;
   PUINT                        buffer;
   bytesToRead = IsoControl.PacketCount * (IsoControl.PacketSize +
        sizeof(USBD_ISO_PACKET_DESCRIPTOR));
   buffer = (PUINT) malloc(bytesToRead);    
    
   bResult = DeviceIoControl (hDevice,                        
                        IOCTL_EZUSB_READ_ISO_BUFFER,
                        &IsoControl,
                        sizeof(ISO_TRANSFER_CONTROL),
                        buffer,
                        bytesToRead,
                        &nBytes,
                        NULL);
   packetsRead = nBytes / (IsoControl.PacketSize +
        sizeof(USBD_ISO_PACKET_DESCRIPTOR));
        //到这里还看得懂。

   isoDesc = (PUSBD_ISO_PACKET_DESCRIPTOR)(buffer + (packetsRead *
        IsoControl.PacketSize));
        //这里不明白了。
        //discriptor是跟在整个数据流最后?还是一个packet跟一个discriptor?

高手指点一下?谢谢先。
eternalblaze
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2003-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-24 21:40
从取出的数据分析是放在最后12byte/packet


我也是这么想的。
但是
isoDesc = (PUSBD_ISO_PACKET_DESCRIPTOR)(buffer + (packetsRead *
IsoControl.PacketSize));
这一句
isoDesc是指向哪个discriptor?

我理解中应该这样:
isoDesc = (PUSBD_ISO_PACKET_DESCRIPTOR)(buffer +N*(IsoControl.PacketSize+sizeof(USBD_ISO_PACKET_DESCRIPTOR))+IsoControl.PacketSize);
这样isoDesc指向了第N个packet的discriptor。
是不是?
jiixfree
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-03-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-24 20:56
从取出的数据分析是放在最后12byte/packet
游客

返回顶部