urb=usb_alloc_urb(npackets,GFP_KERNEL);
urb->dev=field_uvc_udev;
urb->context=NULL;
urb->pipe=usb_rcvisocpipe(field_uvc_udev,field_uvc_bEndpointAddress);
urb->transfer_flags=URB_ISO_ASAP|URB_NO_TRANSFER_DMA_MAP;
urb->interval=1;
urb->transfer_buffer=field_uvc_queue.urb_buffer[i];
urb->transfer_dma=field_uvc_queue.urb_dma[i];
urb->complete=field_uvc_video_complete;
urb->number_of_packets=npackets; //要传输的数据次数
urb->transfer_buffer_length=size; //总共的数据量
usb_submit_urb(urb,GFP_ATOMIC);
struct usb_device *dev ---- urb所发送的目标设备
unsigned int pipe ---- 管道号码,记录了目标设备的端点及管道的类型
unsigned int transfer_flags ---- 启动DMA时,传输标志
int interval ---- urb被调用的间隔
void *transfer_buffer ---- 数据接收和发送的缓冲区
u32 transfer_buffer_length ---- 数据长度
void *context ---- 上下文,用户自定义
usb_complete_t complete ---- urb完成回调函数入口
int status ---- 当一个urb把数据送到设备时,这个urb会由系统返回给驱动,并调用驱动的urb完成回调函数,status记录这次数据传输的状态
阅读(723) | 评论(0) | 转发(0) |