关于USB ISO传输的问题

Jampha 2014-09-29 11:18:49
我的问题是,等时传输不能从usb接收到数据,向usb发送数据的时候,代码中发960byte/5ms,但bushound中显示的结果是752byte/5ms。请高手指点一下。

以下代码创建urb的,疑是此处出了问题



PURB CUsbDev::IsoUsb_BuildIsoUrb(IN PMAUDIO_USBD_PIPE_INFORMATION PipeHandle)
{
ULONG siz;
ULONG length, packetSize, numPackets, i;
PURB urb = NULL;
BOOL bIn = FALSE;

length = PipeHandle->nDataLen; // 需要发送或接收数据的长度
packetSize = PipeHandle->MaximumPacketSize; // 208
numPackets = (length + packetSize - 1) / packetSize;

if ( numPackets <= 0 )
{
return NULL;
}

bIn = USBD_PIPE_DIRECTION_IN(PipeHandle);
siz = GET_ISO_URB_SIZE(numPackets);
urb = (PURB)ExAllocatePool(NonPagedPool, siz);

if (urb)
{
RtlZeroMemory(urb, siz);

urb->UrbIsochronousTransfer.Hdr.Length = (USHORT) siz;
urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;
urb->UrbIsochronousTransfer.PipeHandle = PipeHandle->PipeHandle;
urb->UrbIsochronousTransfer.TransferFlags = bIn ? (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK) : 0;

urb->UrbIsochronousTransfer.TransferBufferMDL = NULL;
urb->UrbIsochronousTransfer.TransferBuffer = PipeHandle->DataBuffer; // 数据buff
urb->UrbIsochronousTransfer.TransferBufferLength = length;

if (PipeHandle->FrameNumber > 0 )
{
urb->UrbIsochronousTransfer.StartFrame = IsoUsb_GetCurrentFrame();
}
else
{
urb->UrbIsochronousTransfer.TransferFlags |= USBD_START_ISO_TRANSFER_ASAP;
}

urb->UrbIsochronousTransfer.NumberOfPackets = numPackets;
urb->UrbIsochronousTransfer.UrbLink = NULL;
ULONG packetLen = bIn ? 0 : packetSize;
for (i=0; i< numPackets; i++)
{
urb->UrbIsochronousTransfer.IsoPacket[i].Offset = i * packetSize;
urb->UrbIsochronousTransfer.IsoPacket[i].Length = packetLen;
}
urb->UrbIsochronousTransfer.IsoPacket[i-1].Length = length - packetSize * (numPackets - 1); // 最后一个packet
}

return urb;
}


...全文
404 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
曹大夯 2014-09-30
  • 打赏
  • 举报
回复
引用 楼主 jamphacs 的回复:
我的问题是,等时传输不能从usb接收到数据, 向usb发送数据的时候,代码中发960byte/5ms,但bushound中显示的结果是752byte/5ms。请高手指点一下。
能描述更详细些 么? 是发数据有问题,还是没收到数据。 设备端响应正确么?
Jampha 2014-09-29
  • 打赏
  • 举报
回复
引用 1 楼 Huntercao 的回复:
你设备的USB Configuration Descriptor中,关于ISO Endpoint的描述符是什么样的?
/* EP Descriptor: ISO in */ bLength:0x07 bEndpointAddress:0x81 bmAttributes:0x01 wMaxPacketSize:208byte bInterval:1 /* EP Descriptor: ISO Out */ bLength:0x07 bEndpointAddres:0x02 bmAttributes:0x01 wMaxPacketSize:208byte bInterval:0x01
曹大夯 2014-09-29
  • 打赏
  • 举报
回复
你设备的USB Configuration Descriptor中,关于ISO Endpoint的描述符是什么样的?

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧