123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- #ifndef __LINUX_se401_H
- #define __LINUX_se401_H
- #include <asm/uaccess.h>
- #include <linux/videodev.h>
- #include <linux/smp_lock.h>
- #define se401_DEBUG /* Turn on debug messages */
- #ifdef se401_DEBUG
- # define PDEBUG(level, fmt, args...) \
- if (debug >= level) info("[" __PRETTY_FUNCTION__ ":%d] " fmt, __LINE__ , ## args)
- #else
- # define PDEBUG(level, fmt, args...) do {} while(0)
- #endif
- /* An almost drop-in replacement for sleep_on_interruptible */
- #define wait_interruptible(test, queue, wait) \
- { \
- add_wait_queue(queue, wait); \
- set_current_state(TASK_INTERRUPTIBLE); \
- if (test) \
- schedule(); \
- remove_wait_queue(queue, wait); \
- set_current_state(TASK_RUNNING); \
- if (signal_pending(current)) \
- break; \
- }
- #define SE401_REQ_GET_CAMERA_DESCRIPTOR 0x06
- #define SE401_REQ_START_CONTINUOUS_CAPTURE 0x41
- #define SE401_REQ_STOP_CONTINUOUS_CAPTURE 0x42
- #define SE401_REQ_CAPTURE_FRAME 0x43
- #define SE401_REQ_GET_BRT 0x44
- #define SE401_REQ_SET_BRT 0x45
- #define SE401_REQ_GET_WIDTH 0x4c
- #define SE401_REQ_SET_WIDTH 0x4d
- #define SE401_REQ_GET_HEIGHT 0x4e
- #define SE401_REQ_SET_HEIGHT 0x4f
- #define SE401_REQ_GET_OUTPUT_MODE 0x50
- #define SE401_REQ_SET_OUTPUT_MODE 0x51
- #define SE401_REQ_GET_EXT_FEATURE 0x52
- #define SE401_REQ_SET_EXT_FEATURE 0x53
- #define SE401_REQ_CAMERA_POWER 0x56
- #define SE401_REQ_LED_CONTROL 0x57
- #define SE401_REQ_BIOS 0xff
- #define SE401_BIOS_READ 0x07
- #define SE401_FORMAT_BAYER 0x40
- /* Hyundai hv7131b registers
- 7121 and 7141 should be the same (haven't really checked...) */
- /* Mode registers: */
- #define HV7131_REG_MODE_A 0x00
- #define HV7131_REG_MODE_B 0x01
- #define HV7131_REG_MODE_C 0x02
- /* Frame registers: */
- #define HV7131_REG_FRSU 0x10
- #define HV7131_REG_FRSL 0x11
- #define HV7131_REG_FCSU 0x12
- #define HV7131_REG_FCSL 0x13
- #define HV7131_REG_FWHU 0x14
- #define HV7131_REG_FWHL 0x15
- #define HV7131_REG_FWWU 0x16
- #define HV7131_REG_FWWL 0x17
- /* Timing registers: */
- #define HV7131_REG_THBU 0x20
- #define HV7131_REG_THBL 0x21
- #define HV7131_REG_TVBU 0x22
- #define HV7131_REG_TVBL 0x23
- #define HV7131_REG_TITU 0x25
- #define HV7131_REG_TITM 0x26
- #define HV7131_REG_TITL 0x27
- #define HV7131_REG_TMCD 0x28
- /* Adjust Registers: */
- #define HV7131_REG_ARLV 0x30
- #define HV7131_REG_ARCG 0x31
- #define HV7131_REG_AGCG 0x32
- #define HV7131_REG_ABCG 0x33
- #define HV7131_REG_APBV 0x34
- #define HV7131_REG_ASLP 0x54
- /* Offset Registers: */
- #define HV7131_REG_OFSR 0x50
- #define HV7131_REG_OFSG 0x51
- #define HV7131_REG_OFSB 0x52
- /* REset level statistics registers: */
- #define HV7131_REG_LOREFNOH 0x57
- #define HV7131_REG_LOREFNOL 0x58
- #define HV7131_REG_HIREFNOH 0x59
- #define HV7131_REG_HIREFNOL 0x5a
- /* se401 registers */
- #define SE401_OPERATINGMODE 0x2000
- /* size of usb transfers */
- #define SE401_PACKETSIZE 4096
- /* number of queued bulk transfers to use, should be about 8 */
- #define SE401_NUMSBUF 1
- /* read the usb specs for this one :) */
- #define SE401_VIDEO_ENDPOINT 1
- #define SE401_BUTTON_ENDPOINT 2
- /* number of frames supported by the v4l part */
- #define SE401_NUMFRAMES 2
- /* scratch buffers for passing data to the decoders */
- #define SE401_NUMSCRATCH 32
- /* maximum amount of data in a JangGu packet */
- #define SE401_VLCDATALEN 1024
- /* number of nul sized packets to receive before kicking the camera */
- #define SE401_MAX_NULLPACKETS 4000
- /* number of decoding errors before kicking the camera */
- #define SE401_MAX_ERRORS 200
- struct usb_device;
- struct se401_sbuf {
- unsigned char *data;
- };
- enum {
- FRAME_UNUSED, /* Unused (no MCAPTURE) */
- FRAME_READY, /* Ready to start grabbing */
- FRAME_GRABBING, /* In the process of being grabbed into */
- FRAME_DONE, /* Finished grabbing, but not been synced yet */
- FRAME_ERROR, /* Something bad happened while processing */
- };
- enum {
- FMT_BAYER,
- FMT_JANGGU,
- };
- enum {
- BUFFER_UNUSED,
- BUFFER_READY,
- BUFFER_BUSY,
- BUFFER_DONE,
- };
- struct se401_scratch {
- unsigned char *data;
- volatile int state;
- int offset;
- int length;
- };
- struct se401_frame {
- unsigned char *data; /* Frame buffer */
- volatile int grabstate; /* State of grabbing */
- unsigned char *curline;
- int curlinepix;
- int curpix;
- };
- struct usb_se401 {
- struct video_device vdev;
- /* Device structure */
- struct usb_device *dev;
- unsigned char iface;
- char *camera_name;
- int change;
- int brightness;
- int hue;
- int rgain;
- int ggain;
- int bgain;
- int expose_h;
- int expose_m;
- int expose_l;
- int resetlevel;
-
- int enhance;
- int format;
- int sizes;
- int *width;
- int *height;
- int cwidth; /* current width */
- int cheight; /* current height */
- int palette;
- int maxframesize;
- int cframesize; /* current framesize */
- struct semaphore lock;
- int user; /* user count for exclusive use */
- int removed; /* device disconnected */
- int streaming; /* Are we streaming video? */
- char *fbuf; /* Videodev buffer area */
- struct urb *urb[SE401_NUMSBUF];
- struct urb *inturb;
-
- int button;
- int buttonpressed;
- int curframe; /* Current receiving frame */
- struct se401_frame frame[SE401_NUMFRAMES];
- int readcount;
- int framecount;
- int error;
- int dropped;
- int scratch_next;
- int scratch_use;
- int scratch_overflow;
- struct se401_scratch scratch[SE401_NUMSCRATCH];
- /* Decoder specific data: */
- unsigned char vlcdata[SE401_VLCDATALEN];
- int vlcdatapos;
- int bayeroffset;
- struct se401_sbuf sbuf[SE401_NUMSBUF];
- wait_queue_head_t wq; /* Processes waiting */
- int nullpackets;
- };
- #endif
|