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

📄 et61xx51.h

📁 spca5xx
💻 H
📖 第 1 页 / 共 2 页
字号:
	//__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 + -