SNNIX摄像头驱动程序设计.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SNNIX摄像头驱动程序设计

SNONIX 120摄像头驱动程序设计 By:刘京 李康年 刘权 陈靖 主要内容: USB摄像头驱动简介 V4L2简介 v4l2视频处理的步骤 urb结构体简介 驱动原理 USB摄像头驱动 USB摄像头以其良好的性能和低廉的价格得到广泛应用 但由于摄像头所用芯片的不同,以及传感器的多样性,需对其进行驱动程序的编写 摄像头驱动的特殊性 摄像头属于视频类设备。在目前的Linux核心中,视频部分的标准是Video for Linux(简称V4L)。这个标准其实定义了一套接口,内核、驱动、应用程序以这个接口为标准进行交流 V4L2简介 一个Linux系统用来处理视频图形的接口。它由一个视频接口 标准以及一系列的API组成。 v4l2视频处理的步骤: 1:打开设备。 2:设置设备属性,图形分辨率,亮度。 3:协定数据格式。 4:协定输入输出方法。 5:输入,输出循环。 6:关闭设备。 urb结构体简介 Linux 内核中的USB代码通过一个称为urb(USB 请求块)的东西和所有的USB设备通信。 urb 被用来以一种异步的方式往/ 从特定的USB 设备上的特定USB端点发送/ 接收数据。?重用单个的urb,这取决于驱动程序的需要。设备中的每个端点都可以处理一个urb 队列,所以多个urb可以在队列为空之前发送到同一个端点 urb的生命周期(一) 由USB 设备驱动程序创建。 分配给一个特定USB 设备的特定端点。 由USB 设备驱动程序递交到USB 核心。 urb的生命周期(二) 由USB 核心递交到特定设备的特定USB 主控制器驱动程序。 由USB 主控制器驱动程序处理,它从设备进行USB 传送。 当urb 结束之后,USB 主控制器驱动程序通知USB设备驱动程序。 驱动原理图: static void sn9c120_urb_complete(struct urb *urb) //ok { struct sn9c120_device* cam = urb-context; struct sn9c120_frame_t** f; size_t imagesize, soflen; u8 i; int err = 0; if (urb-status == -ENOENT) return; f = cam-frame_current; if (cam-stream == STREAM_INTERRUPT) { cam-stream = STREAM_OFF; if ((*f)) (*f)-state = F_QUEUED; cam-sof.bytesread = 0; printk( Stream interrupted by application\n); wake_up(cam-wait_stream); } if (cam-state DEV_DISCONNECTED) return; if (cam-state DEV_MISCONFIGURED) { wake_up_interruptible(cam-wait_frame); return; } if (cam-stream == STREAM_OFF || list_empty(cam-inqueue)) goto resubmit_urb; if (!(*f)) (*f) = list_entry(cam-inqueue.next, struct sn9c120_frame_t, frame); imagesize = (cam-sensor.pix_format.width * cam-sensor.pix_format.height * cam-sensor.pix_format.priv) / 8; if (cam-sensor.pix_format.pixelformat == V4L2_PIX_FMT_JPEG) imagesize += 589; /* length of jpeg header */ soflen = sn9c120_sof_length(cam); for (i = 0; i urb-number_of_packets; i++) { unsigned int img, len, status; void *pos, *sof, *eof; len = urb-iso_frame_desc[i].actual_length; status =

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档