📄 et61xx51.h
字号:
//__u8 I2c0 [] ={0x0a,0x12,0x05,0x22,0xac,0x00,0x01,0x00}; __u8 I2c0 [] ={0x0a,0x12,0x05,0x6d,0xcd,0x00,0x01,0x00}; // try 1/120 0x6d 0xcd 0x40 //__u8 I2c0 [] ={0x0a,0x12,0x05,0xfe,0xfe,0xc0,0x01,0x00}; // 1/60000 hmm ?? PDEBUG(5,"Open Init1 ET"); value = 7; Et_RegWrite(etx->dev,0x0,0x0,ET_GPIO_DIR_CTRL,&value,1); Et_RegRead(etx->dev,0x0,0x0,ET_GPIO_IN,&received,1); value = 1; Et_RegWrite(etx->dev,0x0,0x0,ET_RESET_ALL,&value,1); value = 0; Et_RegWrite(etx->dev,0x0,0x0,ET_RESET_ALL,&value,1); value = 0x10; Et_RegWrite(etx->dev,0x0,0x0,ET_ClCK,&value,1); value = 0x19; Et_RegWrite(etx->dev,0x0,0x0,ET_CTRL,&value,1); /* compression et subsampling */ if (etx->mode){ value = ET_COMP_VAL1; } else { value = ET_COMP_VAL0; } PDEBUG(0,"Open mode %d Compression %d",etx->mode,value); Et_RegWrite(etx->dev,0x0,0x0,ET_COMP,&value,1); value = 0x1d; Et_RegWrite(etx->dev,0x0,0x0,ET_MAXQt,&value,1); value = 0x02; Et_RegWrite(etx->dev,0x0,0x0,ET_MINQt,&value,1); /* undocumented registers */ value = 0xff; Et_RegWrite(etx->dev,0x0,0x0,ET_REG1d,&value,1); value = 0xff; Et_RegWrite(etx->dev,0x0,0x0,ET_REG1e,&value,1); value = 0xff; Et_RegWrite(etx->dev,0x0,0x0,ET_REG1f,&value,1); value = 0x35; Et_RegWrite(etx->dev,0x0,0x0,ET_REG20,&value,1); value = 0x01; Et_RegWrite(etx->dev,0x0,0x0,ET_REG21,&value,1); value = 0x00; Et_RegWrite(etx->dev,0x0,0x0,ET_REG22,&value,1); value = 0xf7; Et_RegWrite(etx->dev,0x0,0x0,ET_REG23,&value,1); value = 0xff; Et_RegWrite(etx->dev,0x0,0x0,ET_REG24,&value,1); value = 0x07; Et_RegWrite(etx->dev,0x0,0x0,ET_REG25,&value,1); /* colors setting */ value = 0x80; Et_RegWrite(etx->dev,0x0,0x0,ET_G_RED,&value,1); value = 0x80; Et_RegWrite(etx->dev,0x0,0x0, ET_G_GREEN1,&value,1); value = 0x80; Et_RegWrite(etx->dev,0x0,0x0,ET_G_BLUE,&value,1); value = 0x80; Et_RegWrite(etx->dev,0x0,0x0,ET_G_GREEN2,&value,1); value = 0x00; Et_RegWrite(etx->dev,0x0,0x0,ET_G_GR_H,&value,1); value = 0x00; Et_RegWrite(etx->dev,0x0,0x0,ET_G_GB_H,&value,1); /* Window control registers */ value = 0xf0; Et_RegWrite(etx->dev,0x0,0x0,ET_SYNCHRO,&value,1); value = 0x56;//0x56 Et_RegWrite(etx->dev,0x0,0x0,ET_STARTX,&value,1); value = 0x05;//0x04 Et_RegWrite(etx->dev,0x0,0x0,ET_STARTY,&value,1); value = 0x60; Et_RegWrite(etx->dev,0x0,0x0,ET_WIDTH_LOW,&value,1); value = 0x20; Et_RegWrite(etx->dev,0x0,0x0,ET_HEIGTH_LOW,&value,1); value = 0x50; Et_RegWrite(etx->dev,0x0,0x0,ET_W_H_HEIGTH,&value,1); value = 0x86; Et_RegWrite(etx->dev,0x0,0x0,ET_REG6e,&value,1); value = 0x01; Et_RegWrite(etx->dev,0x0,0x0,ET_REG6f,&value,1); value = 0x86; Et_RegWrite(etx->dev,0x0,0x0,ET_REG70,&value,1); value = 0x14; Et_RegWrite(etx->dev,0x0,0x0,ET_REG71,&value,1); value = 0x00; Et_RegWrite(etx->dev,0x0,0x0,ET_REG72,&value,1); /* Clock Pattern registers */ value = 0x00; Et_RegWrite(etx->dev,0x0,0x0,ET_REG73,&value,1); value = 0x00; Et_RegWrite(etx->dev,0x0,0x0,ET_REG74,&value,1); value = 0x0a; Et_RegWrite(etx->dev,0x0,0x0,ET_REG75,&value,1); value = 0x04; Et_RegWrite(etx->dev,0x0,0x0,ET_I2C_CLK,&value,1); value = 0x01; Et_RegWrite(etx->dev,0x0,0x0,ET_PXL_CLK,&value,1); /* set the sensor */ if (etx->mode){ I2c0[0] = 0x06; Et_i2cwrite(etx->dev,PAS106_REG2,I2c0,sizeof(I2c0),1); Et_i2cwrite(etx->dev,PAS106_REG9,I2c2,sizeof(I2c2),1); value = 0x06; Et_i2cwrite(etx->dev,PAS106_REG2,&value,1,1); Et_i2cwrite(etx->dev,PAS106_REG3,I2c3,sizeof(I2c3),1); //value = 0x1f; value = 0x04; Et_i2cwrite(etx->dev,PAS106_REG0e,&value,1,1); } else { I2c0[0] = 0x0a; Et_i2cwrite(etx->dev,PAS106_REG2,I2c0,sizeof(I2c0),1); Et_i2cwrite(etx->dev,PAS106_REG9,I2c2,sizeof(I2c2),1); value = 0x0a; Et_i2cwrite(etx->dev,PAS106_REG2,&value,1,1); Et_i2cwrite(etx->dev,PAS106_REG3,I2c3,sizeof(I2c3),1); value = 0x04; //value = 0x10; Et_i2cwrite(etx->dev,PAS106_REG0e,&value,1,1); /* bit 2 enable bit 1:2 select 0 1 2 3 value = 0x07;// curve 0 Et_i2cwrite(etx->dev,PAS106_REG0f,&value,1,1); */ } //value = 0x01; //value = 0x22; //Et_i2cwrite(etx->dev,PAS106_REG5,&value,1,1); /* magnetude and sign bit for DAC */ Et_i2cwrite(etx->dev,PAS106_REG7,I2c4,sizeof(I2c4),1); /* now set by fifo the whole colors setting */ Et_RegWrite(etx->dev,0x0,0x0,ET_G_RED,GainRGBG,6); etx->colour= Et_getcolors(etx); Et_setcolors(etx);} static int Et_init (struct usb_spca50x *etx){ int err = -1; __u8 value = 0x00; PDEBUG(5,"Initialize ET1"); if(etx->desc == Etoms61x151) { Et_init1(etx); } else { Et_init2(etx); } value = 0x08; Et_RegWrite(etx->dev,0x0,0x0,ET_RESET_ALL,&value,1); err = Et_videoOff(etx->dev); PDEBUG(5,"Et_Init_VideoOff %d",err); return 0;}static void Et_startCamera(struct usb_spca50x *etx){ int err = -1; __u8 value = 0x00; if(etx->desc == Etoms61x151) { Et_init1(etx); } else { Et_init2(etx); } value = 0x08; Et_RegWrite(etx->dev,0x0,0x0,ET_RESET_ALL,&value,1); err=Et_videoOn(etx->dev); PDEBUG(5,"Et_VideoOn %d",err); }static void Et_stopCamera(struct usb_spca50x *etx){ int err = -1; err = Et_videoOff(etx->dev); PDEBUG(5,"Et_VideoOff %d",err); }static __u16 Et_setbrightness(struct usb_spca50x *etx){ int i; __u8 brightness = etx->brightness >> 9; for (i=0;i<4;i++){ Et_RegWrite(etx->dev,0x0,0x0,(ET_O_RED +i),&brightness,1); } return 0;}static __u16 Et_getbrightness(struct usb_spca50x *etx){ int i; int brightness = 0; __u8 value = 0; for(i=0;i<4;i++){ Et_RegRead(etx->dev,0x0,0x0,(ET_O_RED+i),&value,1); brightness += value; } return (brightness << 6);}static __u16 Et_setcontrast(struct usb_spca50x *etx){ __u8 RGBG [] ={0x80,0x80,0x80,0x80,0x00,0x00}; __u8 contrast = etx->contrast >> 8; memset(RGBG,contrast,sizeof(RGBG)-2); Et_RegWrite(etx->dev,0x0,0x0,ET_G_RED,RGBG,6); return 0;}static __u16 Et_getcontrast(struct usb_spca50x *etx){ int i; int contrast = 0; __u8 value = 0; for(i=0;i<4;i++){ Et_RegRead(etx->dev,0x0,0x0,(ET_G_RED+i),&value,1); contrast += value; } return (contrast << 6);}static __u8 Et_getgainG (struct usb_spca50x *etx){ __u8 value = 0; if(etx->sensor == SENSOR_PAS106){ Et_i2cread(etx->dev,PAS106_REG0e,&value,1,1); PDEBUG(5 , "Etoms gain G %d",value); return value; } else { return 0x1f; }}static void Et_setgainG (struct usb_spca50x *etx, __u8 gain){ __u8 i2cflags = 0x01; if(etx->sensor == SENSOR_PAS106){ Et_i2cwrite(etx->dev,PAS106_REG13,&i2cflags,1,3); Et_i2cwrite(etx->dev,PAS106_REG0e,&gain,1,1); #if 0 Et_i2cwrite(etx->dev,0x09,&gain,1,1); Et_i2cwrite(etx->dev,0x0a,&gain,1,1); Et_i2cwrite(etx->dev,0x0b,&gain,1,1); Et_i2cwrite(etx->dev,0x0c,&gain,1,1); #endif }}#define BLIMIT(bright) (__u8)((bright>0x1F)?0x1f:((bright<4)?3:bright))#define LIMIT(color) (unsigned char)((color>0xFF)?0xff:((color<0)?0:color))static void Et_setAutobright (struct usb_spca50x *etx){ __u8 GRBG[] = {0,0,0,0}; __u8 luma = 0; __u8 luma_mean = 128; __u8 luma_delta = 20; __u8 spring = 4; int Gbright = 0; __u8 r,g,b; Gbright = Et_getgainG(etx); Et_RegRead(etx->dev,0x0,0x0,ET_LUMA_CENTER,GRBG,4); g= (GRBG[0]+GRBG[3]) >> 1; r= GRBG[1]; b= GRBG[2]; r = ((r << 8)-( r << 4) -( r << 3)) >> 10; b = (( b << 7) >>10); g = ((g <<9)+(g << 7)+(g << 5)) >> 10; luma = LIMIT(r+g+b); PDEBUG(5 , "Etoms luma G %d",luma); if ((luma < (luma_mean - luma_delta)) || ( luma > (luma_mean + luma_delta))) { Gbright += ((luma_mean-luma) >> spring); Gbright = BLIMIT(Gbright); PDEBUG(5 , "Etoms Gbright %d",Gbright); Et_setgainG (etx, (__u8) Gbright); }}static __u16 Et_setcolors(struct usb_spca50x *etx){ static __u8 I2cc [] ={0x05,0x02,0x02,0x05,0x0d}; __u8 i2cflags = 0x01; //__u8 green = 0; __u8 colors = (etx->colour >> 12) & 0x0f; I2cc[3] = colors ; //red I2cc[0] = 15-colors; //blue // green = 15 - ((((7*I2cc[0]) >> 2 ) + I2cc[3]) >> 1); // I2cc[1] = I2cc[2] = green; if(etx->sensor == SENSOR_PAS106){ Et_i2cwrite(etx->dev,PAS106_REG13,&i2cflags,1,3); Et_i2cwrite(etx->dev,PAS106_REG9,I2cc,sizeof(I2cc),1); } //PDEBUG(5 , "Etoms red %d blue %d green %d",I2cc[3],I2cc[0],green);return 0; }static __u16 Et_getcolors(struct usb_spca50x *etx){ //__u8 valblue = 0; __u8 valred = 0 ; if(etx->sensor == SENSOR_PAS106){ //Et_i2cread(etx->dev,PAS106_REG9,&valblue,1,1); Et_i2cread(etx->dev,PAS106_REG9+3,&valred,1,1); return (((valred) & 0x0f) << 12); }return 0;}static void set_EtxxVGA(struct usb_spca50x *spca50x ){ memset (spca50x->mode_cam, 0x00, TOTMODE * sizeof(struct mwebcam)); #if 0 spca50x->mode_cam[VGA].width = 640; spca50x->mode_cam[VGA].height = 480; spca50x->mode_cam[VGA].t_palette = P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[VGA].pipe = 1000; spca50x->mode_cam[VGA].method = 0; spca50x->mode_cam[VGA].mode = 0; spca50x->mode_cam[PAL].width = 384; spca50x->mode_cam[PAL].height = 288; spca50x->mode_cam[PAL].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[PAL].pipe = 1000; spca50x->mode_cam[PAL].method = 1; spca50x->mode_cam[PAL].mode = 0; spca50x->mode_cam[SIF].width = 352; spca50x->mode_cam[SIF].height = 288; spca50x->mode_cam[SIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[SIF].pipe = 1000; spca50x->mode_cam[SIF].method = 1; spca50x->mode_cam[SIF].mode = 0; #endif spca50x->mode_cam[CIF].width = 320; spca50x->mode_cam[CIF].height = 240; spca50x->mode_cam[CIF].t_palette = P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[CIF].pipe = 1000; spca50x->mode_cam[CIF].method = 0; spca50x->mode_cam[CIF].mode = 1; spca50x->mode_cam[QPAL].width = 192; spca50x->mode_cam[QPAL].height = 144; spca50x->mode_cam[QPAL].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QPAL].pipe = 1000; spca50x->mode_cam[QPAL].method = 1; spca50x->mode_cam[QPAL].mode = 1; spca50x->mode_cam[QSIF].width = 176; spca50x->mode_cam[QSIF].height = 144; spca50x->mode_cam[QSIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QSIF].pipe = 1000; spca50x->mode_cam[QSIF].method = 1; spca50x->mode_cam[QSIF].mode = 1; spca50x->mode_cam[QCIF].width = 160; spca50x->mode_cam[QCIF].height = 120; spca50x->mode_cam[QCIF].t_palette = P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QCIF].pipe = 1000; spca50x->mode_cam[QCIF].method = 1; spca50x->mode_cam[QCIF].mode = 1;}static void set_EtxxSIF(struct usb_spca50x *spca50x ){ memset (spca50x->mode_cam, 0x00, TOTMODE * sizeof(struct mwebcam)); spca50x->mode_cam[SIF].width = 352; spca50x->mode_cam[SIF].height = 288; spca50x->mode_cam[SIF].t_palette = P_RAW |P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[SIF].pipe = 1000; spca50x->mode_cam[SIF].method = 0; spca50x->mode_cam[SIF].mode = 0; spca50x->mode_cam[CIF].width = 320; spca50x->mode_cam[CIF].height = 240; spca50x->mode_cam[CIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[CIF].pipe = 1000; spca50x->mode_cam[CIF].method = 1; spca50x->mode_cam[CIF].mode = 0; spca50x->mode_cam[QPAL].width = 192; spca50x->mode_cam[QPAL].height = 144; spca50x->mode_cam[QPAL].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QPAL].pipe = 1000; spca50x->mode_cam[QPAL].method = 1; spca50x->mode_cam[QPAL].mode = 0; spca50x->mode_cam[QSIF].width = 176; spca50x->mode_cam[QSIF].height = 144; spca50x->mode_cam[QSIF].t_palette = P_RAW |P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QSIF].pipe = 1000; spca50x->mode_cam[QSIF].method = 0; spca50x->mode_cam[QSIF].mode = 1; spca50x->mode_cam[QCIF].width = 160; spca50x->mode_cam[QCIF].height = 120; spca50x->mode_cam[QCIF].t_palette = P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16; spca50x->mode_cam[QCIF].pipe = 1000; spca50x->mode_cam[QCIF].method = 1; spca50x->mode_cam[QCIF].mode = 1;}static int Etxx_config(struct usb_spca50x *spca50x ){ switch(spca50x->sensor){ case SENSOR_TAS5130C: set_EtxxVGA(spca50x); break; case SENSOR_PAS106: set_EtxxSIF(spca50x); break; default: return -EINVAL; break; }return 0;}#endif /* ET61XX51_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -