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

📄 zc3xx.h

📁 三星2440 cpu WINCE 5.00板级支持包
💻 H
📖 第 1 页 / 共 3 页
字号:
	    retbyte =		(zcxx_i2cRead(spca50x, zcxxi2cSensor[i][SensorReg2]))		& 0xff;	} else {	checkid = (zcxx_i2cRead(spca50x,0x00)) & 0xff;	RETAILMSG(1, (TEXT("check sensor id  0x%04X "), checkid));	    retbyte =		(zcxx_i2cRead(spca50x, zcxxi2cSensor[i][SensorReg1]))		& 0xff;	if(checkid == 2) // Who is here, that is a surprised :)	        continue ;	}	RETAILMSG(1, (TEXT("sensor answervga  %d "), retbyte));	if (retbyte != 0)	    return zcxxi2cSensor[i][SensorId];    }/* check 3 wires bus */    i = 0;    while (zcxx3wrSensor[i][0]) {	spca5xxRegWrite(spca50x, 0xa0, 0x02, 0x0010, NULL, 0);	spca5xxRegRead(spca50x, 0xa1, 0x01, 0x0010, &retbyte, 1);	spca5xxRegWrite(spca50x, 0xa0, 0x01, 0x0000, NULL, 0);	spca5xxRegWrite(spca50x, 0xa0, 0x00, 0x0010, NULL, 0);	spca5xxRegWrite(spca50x, 0xa0, 0x01, 0x0001, NULL, 0);	spca5xxRegWrite(spca50x, 0xa0, zcxx3wrSensor[i][1],			zcxx3wrSensor[i][0], NULL, 0);	spca5xxRegWrite(spca50x, 0xa0, 0x03, 0x0012, NULL, 0);	spca5xxRegWrite(spca50x, 0xa0, 0x01, 0x0012, NULL, 0);	spca5xxRegWrite(spca50x, 0xa0, 0x05, 0x0012, NULL, 0);	for (j = 2; j < 5; j++) {	    if (zcxx3wrSensor[i][j] != 0xff) {		retbyte =		    (zcxx_i2cRead(spca50x, zcxx3wrSensor[i][j])) &		    0xff;		if (retbyte != 0)		    return (i | 0x10);	    }	}	if (zcxx3wrSensor[i][1] == 0x91) {	    /* check Aurelien Jurgen sensor */	    checkword = 0;	    spca5xxRegWrite(spca50x, 0xa0, 0x02, 0x0010, NULL, 0);	    spca5xxRegRead(spca50x, 0xa1, 0x01, 0x000b, &retbyte, 1);	    checkword = retbyte << 8;	    spca5xxRegRead(spca50x, 0xa1, 0x01, 0x000a, &retbyte, 1);	    checkword |= retbyte;	    RETAILMSG(1, (TEXT("sensor 3w Vga ??? 0x%04X "), (checkword & 0xffff)));	    if (checkword == 0xc001 || checkword == 0xe001 || checkword == 0x8001) {		spca50x->chip_revision = checkword;		spca5xxRegRead(spca50x, 0xa1, 0x01, 0x0010, &retbyte,			       1);		spca5xxRegWrite(spca50x, 0xa0, 0x01, 0x0000, NULL, 0);		spca5xxRegWrite(spca50x, 0xa0, 0x0d, 0x003a, NULL, 0);		spca5xxRegWrite(spca50x, 0xa0, 0x02, 0x003b, NULL, 0);		spca5xxRegWrite(spca50x, 0xa0, 0x00, 0x0038, NULL, 0);		return 0x13;	    }	}	i++;    }    return (-1);}static U16 zc3xxWriteVector(USBCAM_CONTEXT*spca50x, U16 data[][3]){    int err = 0;    int i = 0;    U8 buffread;    while (data[i][0]) {	if (data[i][0] == 0xa0) {	    /* write registers */	    spca5xxRegWrite(spca50x, data[i][0], data[i][1], data[i][2], NULL,			    0);	} else {	    /* read status */	    spca5xxRegRead(spca50x, data[i][0], data[i][1], data[i][2],			   &buffread, 1);	}	i++;	Sleep(1000);    }    return err;}#define CLAMP(x) (unsigned char)(((x)>0xFF)?0xff:(((x)<1)?1:(x)))static U8 Tgamma_default[16] =    { 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff };static U8 Tgradient_default[16] =    { 0x26, 0x22, 0x20, 0x1c, 0x16, 0x13, 0x10, 0x0d, 0x0b, 0x09, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02 };static U8 Tgamma_FV0250[16] =    { 0x04, 0x16, 0x30, 0x4e, 0x68, 0x81, 0x98, 0xac, 0xbe, 0xcd, 0xda, 0xe4, 0xed, 0xf5, 0xfb, 0xff };static U8 Tgradient_FV0250[16] =    { 0x00, 0x16, 0x1b, 0x1c, 0x19, 0x18, 0x15, 0x12, 0x10, 0x0d, 0x0b, 0x09, 0x08, 0x06, 0x05, 0x00 };static U8 Tgamma_CS2102[16] =    { 0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3, 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff ,0xff }; static U8 Tgradient_CS2102[16] =     { 0x18, 0x20, 0x20, 0x1c, 0x16, 0x13, 0x10, 0x0e, 0x0b, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01 };static U16 zc3xx_getbrightness(USBCAM_CONTEXT *spca50x){    spca50x->brightness = 0x80 << 8;    spca50x->contrast = 0x80 << 8;    return spca50x->brightness;}static U16 zc3xx_getcontrast(USBCAM_CONTEXT *spca50x){    return spca50x->contrast;}static void zc3xx_setbrightness(USBCAM_CONTEXT *spca50x){    U8 brightness;    brightness = spca50x->brightness >> 8;    spca5xxRegWrite(spca50x, 0xa0, brightness, 0x011d, NULL, 0);    if (brightness < 0x70) {	spca5xxRegWrite(spca50x, 0xa0, brightness + 0x10, 0x018d,			NULL, 0);    } else {	spca5xxRegWrite(spca50x, 0xa0, 0x80, 0x018d, NULL, 0);    }}static void zc3xx_setcontrast(USBCAM_CONTEXT *spca50x){    U16 contrast;    U8 *   Tgamma = Tgamma_default;    U8 *   Tgradient = Tgradient_default;    int gm0 = 0;    int gr0 = 0;    int index = 0;    int i;    switch (spca50x->sensor) {     case SENSOR_TAS5130C_FV0250:       Tgamma = Tgamma_FV0250;       Tgradient = Tgradient_FV0250;     break;     case SENSOR_CS2102:       Tgamma = Tgamma_CS2102;       Tgradient = Tgradient_CS2102;     break;    }    /* now get the index of gamma table */    contrast = zc3xx_getcontrast(spca50x);    if ((index = contrast >> 13) > 6)	index = 6;    RETAILMSG(2, (TEXT("starting new table index %d "), index));    for (i = 0; i < 16; i++) {	gm0 = Tgamma[i] * index >> 2;	gr0 = Tgradient[i] * index >> 2;	spca5xxRegWrite(spca50x, 0xa0, CLAMP(gm0), 0x0120 + i, NULL, 0);	//brightness	spca5xxRegWrite(spca50x, 0xa0, CLAMP(gr0), 0x0130 + i, NULL, 0);	// contrast	//PDEBUG(0,"i %d gamma %d gradient %d",i ,Tgamma[i],Tgradient[i]);    }}static int zc3xx_init(USBCAM_CONTEXT *spca50x){    spca5xxRegWrite(spca50x, 0xa0, 0x01, 0x0000, NULL, 0);    return 0;}static void set_zc3xxVGA(USBCAM_CONTEXT *spca50x){    memset(spca50x->mode_cam, 0x00, TOTMODE * sizeof(struct mwebcam));    spca50x->mode_cam[VGA].width = 640;    spca50x->mode_cam[VGA].height = 480;    spca50x->mode_cam[VGA].t_palette =	P_JPEG | P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16;    spca50x->mode_cam[VGA].pipe = 1023;    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 = 1023;    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 = 1023;    spca50x->mode_cam[SIF].method = 1;    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_JPEG | P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16;    spca50x->mode_cam[CIF].pipe = 1023;    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 = 1023;    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 = 1023;    spca50x->mode_cam[QSIF].method = 1;    spca50x->mode_cam[QSIF].mode = 1;}static void set_zc3xxSIF(USBCAM_CONTEXT *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_JPEG | P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16;    spca50x->mode_cam[SIF].pipe = 1023;    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 = 1023;    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 = 1023;    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_JPEG | P_RAW | P_YUV420 | P_RGB32 | P_RGB24 | P_RGB16;    spca50x->mode_cam[QSIF].pipe = 1023;    spca50x->mode_cam[QSIF].method = 0;    spca50x->mode_cam[QSIF].mode = 1;}static int zc3xx_config(USBCAM_CONTEXT *spca50x){    int sensor = 0;    U8 bsensor = 0;    spca50x->qindex = 1;    RETAILMSG(0, (TEXT("Sensor ID:%d"),spca50x->sensor));    sensor = zcxx_probeSensor(spca50x);        switch (sensor) {    case -1:         if(spca50x->sensor == SENSOR_TAS5130C_FV0250) {            RETAILMSG(0, (TEXT("Find Sensor Tas5130 (FV0250)")));	    set_zc3xxVGA(spca50x);        } else { 		    RETAILMSG(0, (TEXT("Find Sensor UNKNOW_0 force Tas5130")));	    spca50x->sensor = SENSOR_TAS5130CXX;	    set_zc3xxVGA(spca50x);	}	break;    case 0:	RETAILMSG(0, (TEXT("Find Sensor HV7131B")));	spca50x->sensor = SENSOR_HV7131B;	set_zc3xxVGA(spca50x);	break;    case 1:	RETAILMSG(0, (TEXT("Find Sensor SIF UNKNOW_1")));	break;    case 0x02:	RETAILMSG(0, (TEXT("Find Sensor UNKNOW_2")));	break;    case 0x04:	RETAILMSG(0, (TEXT("Find Sensor CS2102")));	spca50x->sensor = SENSOR_CS2102;	set_zc3xxVGA(spca50x);	break;    case 5:	RETAILMSG(0, (TEXT("Find Sensor SIF UNKNOW_5")));	break;    case 0x06:	RETAILMSG(0, (TEXT("Find Sensor OV7630C")));	spca50x->sensor = SENSOR_OV7630C;	set_zc3xxVGA(spca50x);	break;    case 7:	RETAILMSG(0, (TEXT("Find Sensor SIF UNKNOW_7")));	break;    case 0x08:	RETAILMSG(0, (TEXT("Find Sensor HDCS2020(b)")));	spca50x->sensor = SENSOR_HDCS2020b;	set_zc3xxVGA(spca50x);	break;    case 9:	RETAILMSG(0, (TEXT("Find Sensor SIF UNKNOW_9")));	break;    case 0x0a:	RETAILMSG(0, (TEXT("Find Sensor PB0330")));	spca50x->sensor = SENSOR_PB0330;	set_zc3xxVGA(spca50x);	break;    case 0x0b:	RETAILMSG(0, (TEXT("Find Sensor SIF UNKNOW_b")));	break;    case 0x0c:	RETAILMSG(0, (TEXT("Find Sensor ICM105T")));	spca50x->sensor = SENSOR_ICM105A;	set_zc3xxVGA(spca50x);	break;    case 0x0d:	RETAILMSG(0, (TEXT("Find Sensor SIF UNKNOW_d")));	break;    case 0x0e:	RETAILMSG(0, (TEXT("Find Sensor PAS202BCB")));	spca50x->sensor = SENSOR_HDCS2020;	set_zc3xxVGA(spca50x);	break;    case 0x0f:	RETAILMSG(0, (TEXT("Find Sensor PAS106")));	spca50x->sensor = SENSOR_PAS106;	set_zc3xxSIF(spca50x);	break;    case 0x10:	RETAILMSG(0, (TEXT("Find Sensor TAS5130")));	spca50x->sensor = SENSOR_TAS5130CXX;	set_zc3xxVGA(spca50x);	break;    case 0x11:	RETAILMSG(0, (TEXT("Find Sensor HV7131R(c)")));	spca50x->sensor = SENSOR_HV7131C;	set_zc3xxVGA(spca50x);	break;    case 0x12:	RETAILMSG(0, (TEXT("Find Sensor TAS5130")));	spca50x->sensor = SENSOR_TAS5130CXX;	set_zc3xxVGA(spca50x);	break;    case 0x13:	RETAILMSG(0, (TEXT("Find Sensor MI0360")));	spca50x->sensor = SENSOR_PB0330;	set_zc3xxVGA(spca50x);	break;    };    if ((sensor == 0x02) || (sensor == 0x01) || (sensor == 0x05)	|| (sensor == 0x07) || (sensor == 0x09) || (sensor == 0x0b)	|| (sensor == 0x0d)) {	RETAILMSG(0,(TEXT(	       "Our Sensor is unknow at the moment please report mxhaard@free.fr ")));	return -1;    }    if ((sensor == -1) || (sensor == 0x10) || (sensor == 0x12)) {	spca5xxRegWrite(spca50x, 0xa0, 0x02, 0x0010, NULL, 0);	spca5xxRegRead(spca50x, 0xa1, 0x01, 0x0010, &bsensor, 1);    } else {	spca5xxRegWrite(spca50x, 0xa0, sensor & 0x0f, 0x0010, NULL, 0);	spca5xxRegRead(spca50x, 0xa1, 0x01, 0x0010, &bsensor, 1);    }    /* switch the led off */    if( sensor == 0x06 || sensor == 0x11)      spca5xxRegWrite(spca50x,0xa0,0x01,0x0000,NULL,0);    return 0;}static void zc3xx_setquality(USBCAM_CONTEXT*spca50x){    U8 quality = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -