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 + -
显示快捷键?