⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uvc_compat.h

📁 linux camera下的uvc driver驱动源码
💻 H
字号:
#ifndef _UVC_COMPAT_H#define _UVC_COMPAT_H#include <linux/version.h>#ifndef __KERNEL__#ifndef __user#define __user#endif#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)/* * Extended control API */struct v4l2_ext_control{	__u32 id;	__u32 reserved2[2];	union {		__s32 value;		__s64 value64;		void *reserved;	};} __attribute__ ((packed));struct v4l2_ext_controls{	__u32 ctrl_class;	__u32 count;	__u32 error_idx;	__u32 reserved[2];	struct v4l2_ext_control *controls;};/* Values for ctrl_class field */#define V4L2_CTRL_CLASS_USER		0x00980000	/* Old-style 'user' controls */#define V4L2_CTRL_CLASS_MPEG		0x00990000	/* MPEG-compression controls */#define V4L2_CTRL_ID_MASK		(0x0fffffff)#define V4L2_CTRL_ID2CLASS(id)		((id) & 0x0fff0000UL)#define V4L2_CTRL_DRIVER_PRIV(id)	(((id) & 0xffff) >= 0x1000)/* Control flags */#define V4L2_CTRL_FLAG_READ_ONLY	0x0004#define V4L2_CTRL_FLAG_UPDATE		0x0008#define V4L2_CTRL_FLAG_INACTIVE		0x0010#define V4L2_CTRL_FLAG_SLIDER		0x0020/* Query flags, to be ORed with the control ID */#define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000/* User-class control IDs defined by V4L2 */#undef	V4L2_CID_BASE#define V4L2_CID_BASE			(V4L2_CTRL_CLASS_USER | 0x900)#define V4L2_CID_USER_BASE		V4L2_CID_BASE#define V4L2_CID_USER_CLASS		(V4L2_CTRL_CLASS_USER | 1)	#define VIDIOC_G_EXT_CTRLS		_IOWR ('V', 71, struct v4l2_ext_controls)#define VIDIOC_S_EXT_CTRLS		_IOWR ('V', 72, struct v4l2_ext_controls)#define VIDIOC_TRY_EXT_CTRLS		_IOWR ('V', 73, struct v4l2_ext_controls)#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)/* * Frame size and frame rate enumeration * * Included in Linux 2.6.19 */enum v4l2_frmsizetypes{	V4L2_FRMSIZE_TYPE_DISCRETE	= 1,	V4L2_FRMSIZE_TYPE_CONTINUOUS	= 2,	V4L2_FRMSIZE_TYPE_STEPWISE	= 3,};struct v4l2_frmsize_discrete{	__u32			width;		/* Frame width [pixel] */	__u32			height;		/* Frame height [pixel] */};struct v4l2_frmsize_stepwise{	__u32			min_width;	/* Minimum frame width [pixel] */	__u32			max_width;	/* Maximum frame width [pixel] */	__u32			step_width;	/* Frame width step size [pixel] */	__u32			min_height;	/* Minimum frame height [pixel] */	__u32			max_height;	/* Maximum frame height [pixel] */	__u32			step_height;	/* Frame height step size [pixel] */};struct v4l2_frmsizeenum{	__u32			index;		/* Frame size number */	__u32			pixel_format;	/* Pixel format */	__u32			type;		/* Frame size type the device supports. */        union {					/* Frame size */		struct v4l2_frmsize_discrete	discrete;		struct v4l2_frmsize_stepwise	stepwise;	};	__u32   reserved[2];			/* Reserved space for future use */};enum v4l2_frmivaltypes{	V4L2_FRMIVAL_TYPE_DISCRETE	= 1,	V4L2_FRMIVAL_TYPE_CONTINUOUS	= 2,	V4L2_FRMIVAL_TYPE_STEPWISE	= 3,};struct v4l2_frmival_stepwise{	struct v4l2_fract	min;		/* Minimum frame interval [s] */	struct v4l2_fract	max;		/* Maximum frame interval [s] */	struct v4l2_fract	step;		/* Frame interval step size [s] */};struct v4l2_frmivalenum{	__u32			index;		/* Frame format index */	__u32			pixel_format;	/* Pixel format */	__u32			width;		/* Frame width */	__u32			height;		/* Frame height */	__u32			type;		/* Frame interval type the device supports. */	union {					/* Frame interval */		struct v4l2_fract		discrete;		struct v4l2_frmival_stepwise	stepwise;	};	__u32	reserved[2];			/* Reserved space for future use */};#define VIDIOC_ENUM_FRAMESIZES		_IOWR ('V', 74, struct v4l2_frmsizeenum)#define VIDIOC_ENUM_FRAMEINTERVALS	_IOWR ('V', 75, struct v4l2_frmivalenum)#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)/* * V4L2 Control identifiers. */#define V4L2_CTRL_CLASS_CAMERA 0x009A0000	/* Camera class controls */ #define V4L2_CID_POWER_LINE_FREQUENCY		(V4L2_CID_BASE+24) enum v4l2_power_line_frequency {	V4L2_CID_POWER_LINE_FREQUENCY_DISABLED	= 0,	V4L2_CID_POWER_LINE_FREQUENCY_50HZ	= 1,	V4L2_CID_POWER_LINE_FREQUENCY_60HZ	= 2,};#define V4L2_CID_HUE_AUTO			(V4L2_CID_BASE+25) #define V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_BASE+26) #define V4L2_CID_SHARPNESS			(V4L2_CID_BASE+27) #define V4L2_CID_BACKLIGHT_COMPENSATION 	(V4L2_CID_BASE+28) #define V4L2_CID_CAMERA_CLASS_BASE 		(V4L2_CTRL_CLASS_CAMERA | 0x900)#define V4L2_CID_CAMERA_CLASS 			(V4L2_CTRL_CLASS_CAMERA | 1)#define V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+1)enum  v4l2_exposure_auto_type {	V4L2_EXPOSURE_MANUAL = 1,	V4L2_EXPOSURE_AUTO = 2,	V4L2_EXPOSURE_SHUTTER_PRIORITY = 4,	V4L2_EXPOSURE_APERTURE_PRIORITY = 8};#define V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_CAMERA_CLASS_BASE+2)#define V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_CAMERA_CLASS_BASE+3)#define V4L2_CID_PAN_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+4)#define V4L2_CID_TILT_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+5)#define V4L2_CID_PAN_RESET			(V4L2_CID_CAMERA_CLASS_BASE+6)#define V4L2_CID_TILT_RESET			(V4L2_CID_CAMERA_CLASS_BASE+7)#define V4L2_CID_PAN_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+8)#define V4L2_CID_TILT_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+9)#define V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+10)#define V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+11)#define V4L2_CID_FOCUS_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+12) #endif#ifdef __KERNEL__#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)/* * kzalloc() */static inline void *kzalloc(size_t size, unsigned int __nocast gfp_flags){	void *mem = kmalloc(size, gfp_flags);	if (mem)		memset(mem, 0, size);	return mem;}#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)/* * vm_insert_page() */static inline intvm_insert_page(struct vm_area_struct *vma, unsigned long addr,		struct page *page){	/* Not sure if this is needed. remap_pfn_range() sets VM_RESERVED	 * in 2.6.14.	 */	vma->vm_flags |= VM_RESERVED;	SetPageReserved(page);	return remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE,				vma->vm_page_prot);}#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)/* * v4l_printk_ioctl() */static inline voidv4l_printk_ioctl(unsigned int cmd){	switch (_IOC_TYPE(cmd)) {	case 'v':		printk(KERN_DEBUG "ioctl 0x%x (V4L1)\n", cmd);		break;	case 'V':		printk(KERN_DEBUG "ioctl 0x%x (%s)\n",			cmd, v4l2_ioctl_names[_IOC_NR(cmd)]);		break;	default:		printk(KERN_DEBUG "ioctl 0x%x (?)\n", cmd);		break;	}}#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)/* * Mutex API */#include <asm/semaphore.h>#define mutex_lock(mutex) down(mutex)#define mutex_lock_interruptible(mutex) down_interruptible(mutex)#define mutex_unlock(mutex) up(mutex)#define mutex_init(mutex) init_MUTEX(mutex)#define mutex semaphore#else#include <asm/mutex.h>#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)/* * usb_endpoint_* functions * * Included in Linux 2.6.19 */static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd){	return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);}static inline int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd){	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==		USB_ENDPOINT_XFER_INT);}static inline int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd){	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==		USB_ENDPOINT_XFER_ISOC);}static inline int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd){	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==		USB_ENDPOINT_XFER_BULK);}static inline int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd){	return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));}/* * USB auto suspend * * Included in Linux 2.6.19 */static inline int usb_autopm_get_interface(struct usb_interface *intf){ return 0; }static inline void usb_autopm_put_interface(struct usb_interface *intf){ }#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)/* * Linked list API */#define list_first_entry(ptr, type, member) \	list_entry((ptr)->next, type, member)#endif#endif /* __KERNEL__ */#endif /* _UVC_COMPAT_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -