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 举报,一经查实,本站将立刻删除。