uvc摄像头代码解析2(二)

2014-11-23 22:19:34 ? 作者: ? 浏览: 10
le16_to_cpu(udev->descriptor.idVendor),le16_to_cpu(udev->descriptor.idProduct));
/* Parse the Video Class control descriptor. */
if (uvc_parse_control(dev) < 0) { //-->5 uvc解析usb视频类控制描述符
uvc_trace(UVC_TRACE_PROBE, "Unable to parse UVC descriptors.\n");
goto error;
}
uvc_printk(KERN_INFO, "Found UVC %u.%02x device %s (%04x:%04x)\n",dev->uvc_version >> 8, dev->uvc_version & 0xff,
udev->product udev->product : "",le16_to_cpu(udev->descriptor.idVendor),le16_to_cpu(udev->descriptor.idProduct));
if (dev->quirks != id->driver_info) {
uvc_printk(KERN_INFO, "Forcing device quirks to 0x%x by module parameter for testing purpose.\n", dev->quirks);
uvc_printk(KERN_INFO, "Please report required quirks to the linux-uvc-devel mailing list.\n");
}
/* Initialize controls. */
if (uvc_ctrl_init_device(dev) < 0) //8.uvc初始化控制
goto error;
/* Scan the device for video chains. */
if (uvc_scan_device(dev) < 0) //10.uvc扫描视频链
goto error;
/* Register video devices. */
if (uvc_register_chains(dev) < 0) //11.uvc注册视频设备
goto error;
/* Save our data pointer in the interface data. */
usb_set_intfdata(intf, dev); //设置uvc设备为usb接口的数据
/* Initialize the interrupt URB. */
if ((ret = uvc_status_init(dev)) < 0) { //12 uvc设备状态初始化
uvc_printk(KERN_INFO, "Unable to initialize the status endpoint (%d), status interrupt will not be supported.\n", ret);
}
uvc_trace(UVC_TRACE_PROBE, "UVC device initialized.\n");
usb_enable_autosuspend(udev); //使能自动挂起
return 0;
error:
uvc_unregister_video(dev);
return -ENODEV;
}
4.1 uvc设备结构体
[cpp]
struct uvc_device {
struct usb_device *udev; //usb设备指针
struct usb_interface *intf; //usb接口指针
unsigned long warnings;
__u32 quirks;
int intfnum; //接口数
char name[32]; //设备名
enum uvc_device_state state; //uvc设备状态
atomic_t users;
atomic_t nmappings;
/* Video control interface */
__u16 uvc_version; //UVC协议版本
__u32 clock_frequency; //时钟频率
struct list_head entities; //uvc实体链表头(挂着uvc设备的Terminal和Unit)
struct list_head chains; //uvc视频链链表头
/* Video Streaming interfaces */
struct list_head streams; //uvc视频流链表头
atomic_t nstreams;//uvc视频流个数
/* Status Interrupt Endpoint */
struct usb_host_endpoint *int_ep; //usb_host_endpoint对象
struct urb *int_urb; //中断urb
__u8 *status; //uvc设备状态标志
struct input_dev *input; //输入设备
char input_phys[64]; //输入设备设备节点路径
};
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: