📄 cmoscama.h
字号:
/* * 05.03.2002 changing for revA * 03.19.2002 Started support for different sensors */#ifndef _ASM_CMOSCAM_H#define _ASM_CMOSCAM_H/* _IOC_TYPE, bits 8 to 15 in ioctl cmd */#define CMOSCAM_IOCTYPE 124/* MINORS */#define CMOSCAM_MINOR_IORW 1#define CMOSCAM_MINOR_I2C 2#define CMOSCAM_MINOR_RAW 3#define CMOSCAM_MINOR_DMA 4#define CMOSCAM_MINOR_MCP 5/* camera sequencer states */#define CAMSEQ_OFF 0 // off#define CAMSEQ_PREERASE 1 // preerasing#define CAMSEQ_WAITTRIG 2 // waiting for trigger#define CAMSEQ_TRIGGERED 3 // triggered#define CAMSEQ_STILLDMA 4 // acquiring still image (DMA running)#define CAMSEQ_STILLGOT 5 // still picture acquired#define CAMSEQ_VIDEOON 6 // video mode just started, not ready for picture acquisition yet#define CAMSEQ_VIDEORDY 7 // video mode passed first VACT pulse, ready to acquire a new picture#define CAMSEQ_VIDEOWAIT 8 // video mode - waiting for external trigger (not implemented yet)#define CAMSEQ_VIDEODMA 9 // video mode - acquiring picture#define CAMSEQ_VIDEOGOT 10 // video mode - picture got // 0 - off, 1 - not ready (pre-erasing), 2 - waiting, 3 - after trigger, 4 - DMA started, 5 - picture got // 0 - off, 1 - not ready (pre-erasing), 2 - waiting, 3 - after trigger, 4 - DMA started, 5 - picture got /* MCP definitions */#define MCP_W_size 1024#define MCP_R_size 256#define MCPOtherBits 0xffa7a7ff#define MCPReset 0x00000800#define MCPNoReset 0x00105800#define MCPToggleA 0x00080000#define MCPToggleB 0x00001000#define MCPctlseq 0x00#define MCPsofttg 0x02#define MCPeackn 0x03#define MCPctlgate 0x04#define MCPwstdly 0x06#define MCPwrsmsk 0x07#define MCPwrsup 0x08#define MCPwrmons 0x09#define MCPwnom 0x0a#define MCPwdenom 0x0b#define MCPwoutw 0x0c#define MCPwinvctl 0x0d#define MCPctlsync 0x0e#define MCPwrdlys 0x10#define MCPwinv 0x40#define MCPwshared 0x80#define MCPwrsynctb 0x100#define MCPwrseq 0x200/* supported ioctl _IOC_NR's */#define I2C_WRITEARG(bus, slave, reg, value) (((bus) << 24) | ((slave) << 16) | ((reg) << 8) | (value))#define I2C_READARG(bus, slave, reg) (((bus) << 24) | ((slave) << 16) | ((reg) << 8))#define I2C_ARGBUS(arg) (((arg) >> 24) & 0x1)#define I2C_ARGSLAVE(arg) (((arg) >> 16) & 0xff)#define I2C_ARGREG(arg) (((arg) >> 8) & 0xff)#define I2C_ARGVALUE(arg) ((arg) & 0xff)#define I2C_WRITEREG 0x1 /* write to an i2c register */#define I2C_READREG 0x2 /* read from an i2c register */// _IO(CMOSCAM_IOCTYPE, I2C_WRITEREG // #define _CCREG(x,y) (_IO(CMOSCAM_IOCTYPE, (x << 5) | (y & 0x1f))) // OBSOLETE - remove from ALL user programs, use _CCCMD()// acess to ZR32112 registers 0..16, // otherParamsRW[16]// otherParamsRO[16]#define _CCCMD(x,y) (_IO(CMOSCAM_IOCTYPE, (x << 6) | (y & 0x3f)))// #define CCAM_CTRL(x) ((_IOC_NR(x) >> 5) & 0x07) // OBSOLETE// #define CCAM_RADDR(x) (_IOC_NR(x) & 0x1f) // OBSOLETE// individually defined commands use 0.2f (after >> 5 -- 0 and 1)// will be no access to i2c above 0x1f (needed for KAC1310)// direct i2c register user access will be removed later//#define CCAM_RDZR 2 /* read zr32112 registers 0..0x16 *///#define CCAM_WDZR 3 /* write zr32112 registers 0..0x16 */// #define CCAM_RPARS 4 /* read r/w parameters 0..0x1f */// #define CCAM_WPARS 5 /* write r/w parameters 0..0x1f */// #define CCAM_ROPARS 6 /* read readonly parameters 0..0x0f */#define CCAM_CTRL(x) ((_IOC_NR(x) >> 6) & 0x03)#define CCAM_ADDR(x) (_IOC_NR(x) & 0x3f)//#define CCAM_RWSENSOR 1 /* direct read/write first 32 sensor registers */ // will not use at all#define CCAM_RPARS 2 /* read parameters 0..0x3f */#define CCAM_WPARS 3 /* write parameters 0..0x3f *//* New parameters and update logic * Separate read and write set of 64 registers * User may specify: * 0 - do not update * 1 - update at once * 2 - update when appropriate * and read update status: * 0 - will not be updated * 1 - in sync * 2 - waiting to be updated * 3 - update in progress (TODO: - support async) * When updating (validating) parameters and copying them to the read "registers" the I2C registers will be written * only if they are different from the shadows *//* abstract sensor register names */#define P_UPDATE 0 /* R/W, see above */#define P_SENSOR 1 /* read only 4 - ZR32112MLC - now there is no way to see color/mono 5 - ZR32112PLC 8 - ZR32212MLC 9 - ZR32112PLC 32 - KAC1310-mono 33 - KAC1310-RGB 34 - KAC1310-CMY)*/// leave it here - may be used in user applications#define SENSOR_MASK 0xfc#define SENSOR_ZR32112 4#define SENSOR_ZR32212 8#define SENSOR_KAC1310 32// sensor sizes:#define SENSORWIDTH_ZR32112 1288#define SENSORHEIGHT_ZR32112 1032#define SENSORWIDTH_ZR32212 1288#define SENSORHEIGHT_ZR32212 968#define SENSORWIDTH_KAC1310 1280#define SENSORHEIGHT_KAC1310 1024#define P_PARS_CHANGED 2 /* RD P_RO_VALID 0 window parameters valid */#define P_DMA_VALID 3 /* RD P_RO_VALID 0 window parameters valid */#define P_ACTUAL_WIDTH 4 /* RD P_RO_WIDTH 1 pixels/row */#define P_ACTUAL_HEIGHT 5 /* RD P_RO_HEIGHT 2 pixels/column */#define P_LPR 6 /* RD P_RO_LPR 3 32-bit words per row (aligned each row) */#define P_IMAGE_SIZE 7 /* RD P_RO_SIZE 4 total image size (dma data) in bytes */#define P_BAYER 8 /* filter number at (0,0) 0-R, 1-G(R), 2-G(B), 3 - B. Write enabled at first, move to WindowSize later */#define P_TRIGGERED 9 /* when trigger occured - 4 LSBs - pixel in DMA word, higher bits - number of DMA word */#define P_TRIG 16 /* R/W P_RW_TRIG 0 0 - internal, 1 - external */#define P_EXPOS 17 /* P_RW_EXPOS 1 exposure time */#define P_DMA_SZ 18 /* P_RW_DMA_SZ 2 DMA block size (debug, mostly) */#define P_DMA_LOOP 19 /* Cyclic DMA buffer (should be updated to multiple of frames) */ /* if DMA buffer <16 - multiply by frame size, else - use as specified */#define P_OVERLAP 20 /* Rolling Shutter DMA length (number of long words to be acquired over the frame size) */#define P_VIDEO 21 /* still (stopped) - 0, video - 1. KAC1310 - video only */#define P_AUXCM 22 /* signal on AUXCLK pin: 0 - 0, 1 - 1, 1x - 20MHz */#define P_VIRT_WIDTH 24 /* Virtual window width - KAC-1310 sensor */#define P_VIRT_HEIGHT 25 /* Virtual window height - KAC-1310 sensor */#define P_WOI_LEFT 26 /* WOI left corner (before applying decimation) */#define P_WOI_TOP 27 /* WOI top corner */#define P_WOI_WIDTH 28 /* WOI width */#define P_WOI_HEIGHT 29 /* WOI height */#define P_FLIPH 30#define P_FLIPV 31#define P_DCM_HOR 32 /* Horizontal decimation (1/2/4/8) */#define P_DCM_VERT 33 /* Vertical decimation (1/2/4/8) copied from horizontal for Zoran chips */#define P_BIN_HOR 34 /* binning 1/2 - KAC1310 only */#define P_BIN_VERT 35 /* not used yet binning 1/2 - KAC1310 only */#define P_COLOR 36 /* mono - 0, color mode - 1 */#define P_TEST 37 /* 1 - test mode enabled */#define P_MCLK 38 /* 2..129 */#define P_MCLK_DIS 39 /* disable sensor clock */ #define P_BITS 40 /* pixel depth - bits 10/8/4 */#define P_SHIFTL 41 /* "digital gain" - shift left by 0/1/2 bits */#define P_VEXPOS 42 /* video exposure (if 0 - use P_RW_EXPOS in ms) */#define P_GAINR 43 /* R channel gain (mono gain) */#define P_GAING 44 /* G channel gain ("red line" in ZR32212) */#define P_GAINB 45 /* B channel gain (mono gain) */#define P_GAINGB 46 /* G channel gain ("blue line" in ZR32212) - copied from P_RW_GAING in ZR2112 */// will be more for KODAK sensor ?/*EXAMPLE usage: i2c_arg = I2C_WRITEARG(STA013_WRITE_ADDR, reg, val); ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_WRITEREG), i2c_arg); i2c_arg = I2C_READARG(STA013_READ_ADDR, reg); val = ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg);*//* i2c errors */#define ERR_I2C_SCL_ST0 1#define ERR_I2C_SDA_ST0 2#define ERR_I2C_SCL_ST1 4#define ERR_I2C_SDA_ST1 8#define ERR_I2C_SCL_NOPULLUP 16#define ERR_I2C_SDA_NOPULLUP 32/* i2c_diagnose called by i2c_start (?) could not find any problems. Try again start */#define ERR_I2C_NOTDETECTED 64#define ERR_I2C_SHORT 128#define ERR_I2C_BSY 256#define ERR_I2C_NACK 512/* supported ioctl _IOC_NR's */#define IO_CCAM_SET_EXT_EXPOSURE 0x06#define IO_CCAM_MONITOR_SEQ 0x07#define IO_CCAM_EXPOSE 0x08#define IO_CCAM_EXPOS_END 0x09#define IO_CCAM_EXPOS_START 0x0a#define IO_CCAM_MONITOR_DMA_DESCR 0x0b#define IO_CCAM_MONITOR_DMA_BUFFER 0x0c#define IO_CCAM_STOP_DMA 0x0d//#define IO_CCAM_START_DMA 0x0e#define IO_CCAM_CR_MODIFY 0x0e //(bit number)<<2 | op; op= 0 - nop, 1 - set, 2 - reset, 3 - toggle)#define IO_CCAM_CR_SHADOW 0x0f/* direct register r/w*/#define IO_CSP0R0 0x10 /* read and return CSP0+0 port data */#define IO_CSP0R1 0x11 /* read and return CSP0+4 port data */#define IO_CSP0R2 0x12 /* read and return CSP0+8 port data */#define IO_CSP0R3 0x13 /* read and return CSP0+12 port data */#define IO_CSP0R4 0x14 /* read and return CSP0+16 port data */#define IO_CSP0R5 0x15 /* read and return CSP0+20 port data */#define IO_CSP0R6 0x16 /* read and return CSP0+24 port data */#define IO_CSP0R7 0x17 /* read and return CSP0+28 port data */#define IO_CSP0R8 0x18 /* read and return CSP0+32 port data */#define IO_CSP0R9 0x19 /* read and return CSP0+36 port data */#define IO_CSP0R10 0x1a /* read and return CSP0+40 port data */#define IO_CSP0R11 0x1b /* read and return CSP0+44 port data */#define IO_CSP0R12 0x1c /* read and return CSP0+48 port data */#define IO_CSP0R13 0x1d /* read and return CSP0+52 port data */#define IO_CSP0R14 0x1e /* read and return CSP0+56 port data */#define IO_CSP0R15 0x1f /* read and return CSP0+60 port data */#define IO_CSP0W0 0x20 /* write data to port CSP0+0 */#define IO_CSP0W1 0x21 /* write data to port CSP0+4 */#define IO_CSP0W2 0x22 /* write data to port CSP0+8 */#define IO_CSP0W3 0x23 /* write data to port CSP0+12 */#define IO_CSP0W4 0x24 /* write data to port CSP0+16 */#define IO_CSP0W5 0x25 /* write data to port CSP0+20 */#define IO_CSP0W6 0x26 /* write data to port CSP0+24 */#define IO_CSP0W7 0x27 /* write data to port CSP0+28 */#define IO_CSP0W8 0x28 /* write data to port CSP0+32 */#define IO_CSP0W9 0x29 /* write data to port CSP0+36 */#define IO_CSP0W10 0x2a /* write data to port CSP0+40 */#define IO_CSP0W11 0x2b /* write data to port CSP0+44 */#define IO_CSP0W12 0x2c /* write data to port CSP0+48 */#define IO_CSP0W13 0x2d /* write data to port CSP0+52 */#define IO_CSP0W14 0x2e /* write data to port CSP0+56 */#define IO_CSP0W15 0x2f /* write data to port CSP0+60 */#define IO_CSP0R(a) (IO_CSP0R0 + a)#define IO_CSP0W(a) (IO_CSP0W0 + a)#define IO_CSP0_R 1#define IO_CSP0_W 2//(frame size/3) and a little more#define CCAM_DMA_SIZE 445830// 2* (frame size/3) and a little more// #define CCAM_DMA_SIZE 917504#define CCAM_DESCR_SIZE (( CCAM_DMA_SIZE >> 14)+1)#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -