usbvision.h

来自「trident tm5600的linux驱动」· C头文件 代码 · 共 525 行 · 第 1/2 页

H
525
字号
struct usbvision_sbuf {	char *data;	struct urb *urb;};#define USBVISION_MAGIC_1      			0x55#define USBVISION_MAGIC_2      			0xAA#define USBVISION_HEADER_LENGTH			0x0c#define USBVISION_SAA7111_ADDR			0x48#define USBVISION_SAA7113_ADDR			0x4a#define USBVISION_IIC_LRACK			0x20#define USBVISION_IIC_LRNACK			0x30#define USBVISION_FRAME_FORMAT_PARAM_INTRA	(1<<7)struct usbvision_v4l2_format_st {	int		supported;	int		bytes_per_pixel;	int		depth;	int		format;	char		*desc;};#define USBVISION_SUPPORTED_PALETTES ARRAY_SIZE(usbvision_v4l2_format)struct usbvision_frame_header {	unsigned char magic_1;				/* 0 magic */	unsigned char magic_2;				/* 1  magic */	unsigned char headerLength;			/* 2 */	unsigned char frameNum;				/* 3 */	unsigned char framePhase;			/* 4 */	unsigned char frameLatency;			/* 5 */	unsigned char dataFormat;			/* 6 */	unsigned char formatParam;			/* 7 */	unsigned char frameWidthLo;			/* 8 */	unsigned char frameWidthHi;			/* 9 */	unsigned char frameHeightLo;			/* 10 */	unsigned char frameHeightHi;			/* 11 */	__u16 frameWidth;				/* 8 - 9 after endian correction*/	__u16 frameHeight;				/* 10 - 11 after endian correction*/};struct usbvision_frame {	char *data;					/* Frame buffer */	struct usbvision_frame_header isocHeader;	/* Header from stream */	int width;					/* Width application is expecting */	int height;					/* Height */	int index;					/* Frame index */	int frmwidth;					/* Width the frame actually is */	int frmheight;					/* Height */	volatile int grabstate;				/* State of grabbing */	int scanstate;					/* State of scanning */	struct list_head frame;	int curline;					/* Line of frame we're working on */	long scanlength;				/* uncompressed, raw data length of frame */	long bytes_read;				/* amount of scanlength that has been read from data */	struct usbvision_v4l2_format_st v4l2_format;	/* format the user needs*/	int v4l2_linesize;				/* bytes for one videoline*/	struct timeval timestamp;	int sequence;					// How many video frames we send to user};#define CODEC_SAA7113	7113#define CODEC_SAA7111	7111#define BRIDGE_NT1003	1003#define BRIDGE_NT1004	1004#define BRIDGE_NT1005   1005struct usbvision_device_data_st {	__u64 VideoNorm;	const char *ModelString;	int Interface; /* to handle special interface number like BELKIN and Hauppauge WinTV-USB II */	__u16 Codec;	unsigned VideoChannels:3;	unsigned AudioChannels:2;	unsigned Radio:1;	unsigned vbi:1;	unsigned Tuner:1;	unsigned Vin_Reg1_override:1;	/* Override default value with */	unsigned Vin_Reg2_override:1;   /* Vin_Reg1, Vin_Reg2, etc. */	unsigned Dvi_yuv_override:1;	__u8 Vin_Reg1;	__u8 Vin_Reg2;	__u8 Dvi_yuv;	__u8 TunerType;	__s16 X_Offset;	__s16 Y_Offset;};/* Declared on usbvision-cards.c */extern struct usbvision_device_data_st usbvision_device_data[];extern struct usb_device_id usbvision_table[];struct usb_usbvision {	struct video_device *vdev;         				/* Video Device */	struct video_device *rdev;               			/* Radio Device */	struct video_device *vbi; 					/* VBI Device   */	/* i2c Declaration Section*/	struct i2c_adapter i2c_adap;	struct i2c_client i2c_client;	struct urb *ctrlUrb;	unsigned char ctrlUrbBuffer[8];	int ctrlUrbBusy;	struct usb_ctrlrequest ctrlUrbSetup;	wait_queue_head_t ctrlUrb_wq;					// Processes waiting	/* configuration part */	int have_tuner;	int tuner_type;	int tuner_addr;	int bridgeType;							// NT1003, NT1004, NT1005	int radio;	int video_inputs;						// # of inputs	unsigned long freq;	int AudioMute;	int AudioChannel;	int isocMode;							// format of video data for the usb isoc-transfer	unsigned int nr;						// Number of the device	/* Device structure */	struct usb_device *dev;	/* usb transfer */	int num_alt;		/* Number of alternative settings */	unsigned int *alt_max_pkt_size;	/* array of wMaxPacketSize */	unsigned char iface;						/* Video interface number */	unsigned char ifaceAlt;			/* Alt settings */	unsigned char Vin_Reg2_Preset;	struct mutex               lock;	struct timer_list powerOffTimer;	struct work_struct powerOffWork;	int power;							/* is the device powered on? */	int user;							/* user count for exclusive use */	int initialized;						/* Had we already sent init sequence? */	int DevModel;							/* What type of USBVISION device we got? */	enum StreamState streaming;					/* Are we streaming Isochronous? */	int last_error;							/* What calamity struck us? */	int curwidth;							/* width of the frame the device is currently set to*/	int curheight;      						/* height of the frame the device is currently set to*/	int stretch_width;						/* stretch-factor for frame width (from usb to screen)*/	int stretch_height;						/* stretch-factor for frame height (from usb to screen)*/	char *fbuf;							/* Videodev buffer area for mmap*/	int max_frame_size;						/* Bytes in one video frame */	int fbuf_size;							/* Videodev buffer size */	spinlock_t queue_lock;						/* spinlock for protecting mods on inqueue and outqueue */	struct list_head inqueue, outqueue;                             /* queued frame list and ready to dequeue frame list */	wait_queue_head_t wait_frame;					/* Processes waiting */	wait_queue_head_t wait_stream;					/* Processes waiting */	struct usbvision_frame *curFrame;				// pointer to current frame, set by usbvision_find_header	struct usbvision_frame frame[USBVISION_NUMFRAMES];		// frame buffer	int num_frames;							// number of frames allocated	struct usbvision_sbuf sbuf[USBVISION_NUMSBUF];			// S buffering	volatile int remove_pending;					/* If set then about to exit */	/* Scratch space from the Isochronous Pipe.*/	unsigned char *scratch;	int scratch_read_ptr;	int scratch_write_ptr;	int scratch_headermarker[USBVISION_NUM_HEADERMARKER];	int scratch_headermarker_read_ptr;	int scratch_headermarker_write_ptr;	enum IsocState isocstate;	struct usbvision_v4l2_format_st palette;	struct v4l2_capability vcap;					/* Video capabilities */	unsigned int ctl_input;						/* selected input */	v4l2_std_id tvnormId;						/* selected tv norm */	unsigned char video_endp;					/* 0x82 for USBVISION devices based */	// Decompression stuff:	unsigned char *IntraFrameBuffer;				/* Buffer for reference frame */	int BlockPos; 							//for test only	int requestIntra;						// 0 = normal; 1 = intra frame is requested;	int lastIsocFrameNum;						// check for lost isoc frames	int isocPacketSize;						// need to calculate usedBandwidth	int usedBandwidth;						// used bandwidth 0-100%, need to set comprLevel	int comprLevel;							// How strong (100) or weak (0) is compression	int lastComprLevel;						// How strong (100) or weak (0) was compression	int usb_bandwidth;						/* Mbit/s */	/* Statistics that can be overlayed on the screen */	unsigned long isocUrbCount;			// How many URBs we received so far	unsigned long urb_length;			/* Length of last URB */	unsigned long isocDataCount;			/* How many bytes we received */	unsigned long header_count;			/* How many frame headers we found */	unsigned long scratch_ovf_count;		/* How many times we overflowed scratch */	unsigned long isocSkipCount;			/* How many empty ISO packets received */	unsigned long isocErrCount;			/* How many bad ISO packets received */	unsigned long isocPacketCount;			// How many packets we totally got	unsigned long timeInIrq;			// How long do we need for interrupt	int isocMeasureBandwidthCount;	int frame_num;					// How many video frames we send to user	int maxStripLen;				// How big is the biggest strip	int comprBlockPos;	int stripLenErrors;				// How many times was BlockPos greater than StripLen	int stripMagicErrors;	int stripLineNumberErrors;	int ComprBlockTypes[4];};/* --------------------------------------------------------------- *//* defined in usbvision-i2c.c                                      *//* i2c-algo-usb declaration                                        *//* --------------------------------------------------------------- *//* ----------------------------------------------------------------------- *//* usbvision specific I2C functions                                        *//* ----------------------------------------------------------------------- */int usbvision_i2c_register(struct usb_usbvision *usbvision);int usbvision_i2c_unregister(struct usb_usbvision *usbvision);void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,void *arg);/* defined in usbvision-core.c                                      */int usbvision_read_reg(struct usb_usbvision *usbvision, unsigned char reg);int usbvision_write_reg(struct usb_usbvision *usbvision, unsigned char reg,			unsigned char value);int usbvision_frames_alloc(struct usb_usbvision *usbvision, int number_of_frames);void usbvision_frames_free(struct usb_usbvision *usbvision);int usbvision_scratch_alloc(struct usb_usbvision *usbvision);void usbvision_scratch_free(struct usb_usbvision *usbvision);int usbvision_decompress_alloc(struct usb_usbvision *usbvision);void usbvision_decompress_free(struct usb_usbvision *usbvision);int usbvision_setup(struct usb_usbvision *usbvision,int format);int usbvision_init_isoc(struct usb_usbvision *usbvision);int usbvision_restart_isoc(struct usb_usbvision *usbvision);void usbvision_stop_isoc(struct usb_usbvision *usbvision);int usbvision_set_alternate(struct usb_usbvision *dev);int usbvision_set_audio(struct usb_usbvision *usbvision, int AudioChannel);int usbvision_audio_off(struct usb_usbvision *usbvision);int usbvision_begin_streaming(struct usb_usbvision *usbvision);void usbvision_empty_framequeues(struct usb_usbvision *dev);int usbvision_stream_interrupt(struct usb_usbvision *dev);int usbvision_muxsel(struct usb_usbvision *usbvision, int channel);int usbvision_set_input(struct usb_usbvision *usbvision);int usbvision_set_output(struct usb_usbvision *usbvision, int width, int height);void usbvision_init_powerOffTimer(struct usb_usbvision *usbvision);void usbvision_set_powerOffTimer(struct usb_usbvision *usbvision);void usbvision_reset_powerOffTimer(struct usb_usbvision *usbvision);int usbvision_power_off(struct usb_usbvision *usbvision);int usbvision_power_on(struct usb_usbvision *usbvision);#endif									/* __LINUX_USBVISION_H *//* * Overrides for Emacs so that we follow Linus's tabbing style. * --------------------------------------------------------------------------- * Local variables: * c-basic-offset: 8 * End: */

⌨️ 快捷键说明

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