首页 > 编程知识 正文

sort out from(usb是什么接口)

时间:2023-05-03 21:00:08 阅读:1284 作者:1857

静态空隙 uvc _ function _ ep0 _ complete(struct USB _ EP * EP,struct usb_request *req) { struct uvc _ device * uvc=req-context; 结构v4l2 _事件v4l2 _事件 struct uvc _ event * uvc _ event=(void *)v4l 2 _ event。u .数据; if(uvc-event _ setup _ out){ 0 uvc-事件_设置_输出=0; memset(v4l2_event,0,sizeof(v4 L2 _ event)); v 4 L2事件。type=UVC _ EVENT _ DATA uvc _事件-数据。长度=请求-实际; memcpy(uvc_event-data.data,req-buf,req-actual); v4l2_event_queue(uvc-vdev,v4l 2 _ event); } } /*预分配控制端点请求。*/ uvc-control _ req=USB _ EP _ alloc _ request(cdev-gadget-ep0,GFP _ KERNEL); UVC-control _ buf=kmaloc(UVC _ MAX _ REQUEST _ SIZE,GFP _ KERNEL); if(uvc-control _ req==NULL | | uvc-control _ buf==NULL){ 0 ret=-ENOMM; 转到错误; } uvc-control _ req-buf=uvc-control _ buf; uvc-control _ req-complete=uvc _ function _ ep0 _ complete; uvc-control _ req-context=uvc; /* *s3c2410_udc_done */ 静态void s3c 2410 _ UDC _ done(struct s3c 2410 _ EP * EP, struct s3c2410_request *req,int状态) { 无符号暂停=EP-暂停; list_del_init(请求队列); 如果(可能(req-req.status==-EINPROGRESS)) 请求请求。状态=状态; 其他 状态=请求-请求。地位; EP-暂停=1; USB _ gadget _回馈_请求(EP-EP,req-req); 表示“在…上”暂停=暂停; } 静态void s3c 2410 _ UDC _ nuke(struct s3c 2410 _ UDC * UDC, struct s3c2410_ep *ep,int状态) { /*健全性检查*/ if (ep-queue==空) 返回; while(!list _ empty(EP-queue)){ 0 结构s3c2410 _ request * req req=list_entry(ep-queue.next,struct s3c2410_request, 队列); s3c2410_udc_done(ep,req,状态); } } /** * usb_gadget_giveback_request -将请求返回给小玩意层 * Context: in_interrupt() * *这由设备控制器驱动程序调用,以便返回 *已完成的请求返回到小工具层。 */ void USB _ gadget _ back _ request(结构USB _ EP * EP, struct usb_request *req) { 如果(可能(请求状态==0)) USB _ LED _ activity(USB _ LED _ EVENT _ GADGET); trace _ USB _ gadget _ back _ request(EP,req,0); 请求完成(欧洲议会,请求); } EXPORT _ SYMBOL _ GPL(USB _ gadget _ give _ back _ request); /*保存索引*/ idx=UDC _ read(s3c 2410 _ UDC _ INDEX _ REG); /*读取状态寄存器*/ USB _ status=UDC _ read(s3c 2410 _ UDC _ USB _ INT _ REG); usbd _ status=UDC _ read(s3c 2410 _ UDC _ EP _ INT _ REG); PWR _ REG=UDC _ read(s3c 2410 _ UDC _ PWR _ REG); udc_writeb(base_addr,S3C2410_UDC_INDEX_EP0,s3c 2410 _ UDC _ INDEX _ REG); ep0csr=UDC _ read(s3c 2410 _ UDC _ IN _ CSR 1 _ REG); if(usbd _ status s3c 2410 _ UDC _ INT _ EP0) { dprintk(DEBUG_VERBOSE,' USB ep0 IRQ n '); /*通过将中断位设置为一来清除中断位*/ udc_write(S3C2410_UDC_INT_EP0,s3c 2410 _ UDC _ EP _ INT _ REG); s3c 2410 _ UDC _ handle _ ep0(dev); } s3c2410_udc_irq s3c2410_udc_handle_ep0 s3c2410_udc_handle_ep0_idle s3c2410_udc_nuke(dev,ep,-EPROTO); s3c2410_udc_done(ep,req,状态); USB _ gadget _回馈_请求(EP-EP,req-req); 请求完成(欧洲议会,请求); uvc _ function _ ep0 _完成 memset(v4l2_event,0,sizeof(v4 L2 _ event)); v 4 L2事件。type=UVC _ EVENT _ DATA uvc _事件-数据。长度=请求-实际; memcpy(uvc_event-data.data,req-buf,req-actual); v4l2_event_queue(uvc-vdev,v4l 2 _ event); 案例紫外线事件数据: ret=uvc _ events _ process _ data(dev,uvc _ event-data); if (ret 0) 打破; 返回; if(dev-CONtrol==UVC _ VS _ COMMIT _ CONtrol) { if(uvc _ video _ get _ uvc _ process(dev-video _ id)) 返回0; dev-FCC=format-FCC; dev-宽度=框架宽度; 开发高度=框架高度; dev-fps=10000000/target-dwFrameInterval; /* *尝试在V4L2视频捕获时设置默认格式 *用户要求的设备。 */ CLEAR(fmt); fmt。TYPE=v4l 2 _ BUF _ TYPE _ VIDEO _ CAPTURE; fmt。fmt。pix。FIELD=v4l 2 _ FIELD _ ANY fmt.fmt.pix.width=帧宽; fmt.fmt.pix.height=框架高度; fmt。fmt。pix。pixel format=format-FCC; 开关(格式-FCC){ 0 案例V4L2_PIX_FMT_YUYV: fmt。fmt。pix。sizeimage=(fmt。fmt。pix。宽度* fmt。fmt。pix。高度* 2); 打破; 案例V4L2_PIX_FMT_MJPEG: 案例V4L2_PIX_FMT_H264: fmt。fmt。pix。sizeimage=dev-img大小; 打破; } uvc _ set _ user _ resolution。fmt。pix。宽度,fmt.fmt.pix.height,dev-video _ id); uvc _ set _ user _ FCC(fmt。fmt。pix。pixelformat,dev-video _ id); if(uvc _ buffer _ init(dev-video _ id)) 转到错误; /* *根据从紫外线C主机收到的新提交命令 *更改紫外线C和V4L2的当前格式选择 *侧面。 */ ret=uvc _ video _ set _ format(dev); if (ret 0) 转到错误; if(!dev-run _ standalone){ 0 /* UVC - V4L2集成路径。*/ ret=v4l2_set_format(dev-vdev,fmt); if (ret 0) 转到错误; } 如果(开发-批量){ 0 ret=uvc _ handle _ stream on _ event(dev); if (ret 0) 转到错误; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。