⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 et61xx51.h

📁 Linux下很强大的万能USB摄像头驱动。解压后
💻 H
📖 第 1 页 / 共 2 页
字号:
    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 + -