📄 et61xx51.h
字号:
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_stopCameraN(struct usb_spca50x *etx){ int err = -1; err = Et_videoOff(etx->dev); PDEBUG(5, "Et_VideoOff %d", err);}static void 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); }}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; } etx->brightness = (brightness << 6); return etx->brightness;}static void 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);}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; } etx->contrast = (contrast << 6); return etx->contrast;}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); }}#undef BLIMIT#undef LIMITstatic void 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);}static __u16 Et_getcolors(struct usb_spca50x *etx){ //__u8 valblue = 0; __u8 valred = 0; etx->colour = 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); etx->colour = (((valred) & 0x0f) << 12); } return etx->colour;}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 Et_config(struct usb_spca50x *spca50x){ switch (spca50x->sensor) { case SENSOR_TAS5130CXX: set_EtxxVGA(spca50x); break; case SENSOR_PAS106: set_EtxxSIF(spca50x); break; default: return -EINVAL; break; } return 0;}static int Et_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){int seqframe; seqframe = cdata[0] & 0x3f; *datalength = (int) (((cdata[0] & 0xc0) << 2) | cdata[1]); if (seqframe == 0x3f) { PDEBUG(5, "Etoms header packet found datalength %d !!", *datalength); PDEBUG(5, "Etoms G %d R %d G %d B %d", cdata[2], cdata[3], cdata[4], cdata[5]); *iPix = 30; /* don't change datalength as the chips provided it */ return 0; } else { if (*datalength) { *iPix = 8; return (seqnum+1); } else { /* Drop Packet */ return -1; } }}#endif /* ET61XX51_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -