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

📄 sonix.h

📁 linux摄像头驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
{				/*FIXME hardcoded as we need to read register of the tasc */       spca50x->contrast = 0x80 << 8;    return spca50x->contrast;}static void sonix_setbrightness(struct usb_spca50x *spca50x){    __u8 value;    __u8 i2c[] = { 0x30, 0x11, 0x02, 0x20, 0x70, 0x00, 0x00, 0x10 };    __u8 i2c1[] = { 0xA1, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 };    __u8 i2cOV[] = { 0xa0, 0x21, 0x06, 0x36, 0xbd, 0x06, 0xf6, 0x16 };    __u8 i2cp202[] = { 0xA0, 0x40, 0x10, 0x0E, 0x31, 0x00, 0x63, 0x15 };    __u8 i2cpdoit[] = { 0xA0, 0x40, 0x11, 0x01, 0x31, 0x00, 0x63, 0x16 };    //__u8 i2cpexpo1[] = { 0xB0,0x40,0x04,0x07,0x2A,0x00,0x63,0x16 };    __u8 i2cpexpo[] = { 0xB0, 0x40, 0x0e, 0x01, 0xab, 0x00, 0x63, 0x16 };    if (spca50x->sensor == SENSOR_TAS5130C ||	spca50x->sensor == SENSOR_TAS5110) {	value = (0xFF - (spca50x->brightness >> 8));	i2c[4] = value & 0xFF;	PDEBUG(4, "brightness %d :%d ", value, i2c[4]);	if (sonix_i2cwrite(spca50x->dev, i2c, 8) < 0)	    PDEBUG(0, "i2c error brightness");    } else if (spca50x->sensor == SENSOR_PAS106) {	i2c1[3] = spca50x->brightness >> 11;	i2c1[2] = 0x0e;;	if (sonix_i2cwrite(spca50x->dev, i2c1, 8) < 0)	    PDEBUG(0, "i2c error brightness");	i2c1[3] = 0x01;	i2c1[2] = 0x13;;	if (sonix_i2cwrite(spca50x->dev, i2c1, 8) < 0)	    PDEBUG(0, "i2c error brightness");    } else if (spca50x->sensor == SENSOR_OV7630) {	// change reg 0x06	i2cOV[3] = (spca50x->brightness >> 8);	if (sonix_i2cwrite(spca50x->dev, i2cOV, 8) < 0)	    PDEBUG(0, "i2c error brightness");    } else if (spca50x->sensor == SENSOR_PAS202) {	// change reg 0x10	i2cpexpo[4] = 0xff - (spca50x->brightness >> 8);	//if(sonix_i2cwrite(spca50x->dev,i2cpexpo1,8) < 0) PDEBUG(0,"i2c error brightness");	//if(sonix_i2cwrite(spca50x->dev,i2cpdoit,8) < 0) PDEBUG(0,"i2c error brightness");	if (sonix_i2cwrite(spca50x->dev, i2cpexpo, 8) < 0)	    PDEBUG(0, "i2c error brightness");	if (sonix_i2cwrite(spca50x->dev, i2cpdoit, 8) < 0)	    PDEBUG(0, "i2c error brightness");	i2cp202[3] = (spca50x->brightness >> 11);	if (sonix_i2cwrite(spca50x->dev, i2cp202, 8) < 0)	    PDEBUG(0, "i2c error brightness");	if (sonix_i2cwrite(spca50x->dev, i2cpdoit, 8) < 0)	    PDEBUG(0, "i2c error brightness");    }}static void sonix_setcontrast(struct usb_spca50x *spca50x){    __u8 gain = 0;    __u8 rgb_value = 0;    gain = (spca50x->contrast >> 13) & 0x0F;    /* red and blue gain */    rgb_value = gain << 4 | gain;    sonixRegWrite(spca50x->dev, 0x08, 0x10, 0x0000, &rgb_value, 1);    /* green gain */    rgb_value = gain;    sonixRegWrite(spca50x->dev, 0x08, 0x11, 0x0000, &rgb_value, 1);}static int sonix_init(struct usb_spca50x *spca50x){    __u8 ByteReceive = 0x00;    sonixRegRead(spca50x->dev, 0x00, 0x00, 0x0000, &ByteReceive, 1);    if (ByteReceive != 0x10)	return -ENODEV;    return 0;}static int tas5130_I2cinit(struct usb_spca50x *spca50x){    //__u8 i2c10[]= { 0x30,0x11,0x00,0x40,0x47,0x00,0x00,0x10 }; // shutter 0x47 short exposure?    __u8 i2c10[] = { 0x30, 0x11, 0x00, 0x40, 0x01, 0x00, 0x00, 0x10 };	// shutter 0x01 long exposure     __u8 i2c2[] = { 0x30, 0x11, 0x02, 0x20, 0x70, 0x00, 0x00, 0x10 };    if (sonix_i2cwrite(spca50x->dev, i2c10, 8) < 0)	PDEBUG(0, "i2c error i2c10");    if (sonix_i2cwrite(spca50x->dev, i2c2, 8) < 0)	PDEBUG(0, "i2c error i2c2");    return 0;}static int pas106_I2cinit(struct usb_spca50x *spca50x){    __u8 i2c1[] = { 0xA1, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 };    int i = 0;    while (pas106_data[i][0]) {	memcpy(&i2c1[2], &pas106_data[i++][0], 2);	//copy 2 bytes from the template	if (sonix_i2cwrite(spca50x->dev, i2c1, 8) < 0)	    PDEBUG(0, "i2c error pas106");    }    return 0;}static int ov7630_I2cinit(struct usb_spca50x *spca50x){    int i = 0;    while (ov7630_sensor_init[i][0]) {	if (sonix_i2cwrite(spca50x->dev, ov7630_sensor_init[i], 8) < 0)	    PDEBUG(0, "i2c error ov7630");	i++;    }    return 0;}static int tas5110_I2cinit(struct usb_spca50x *spca50x){    int i = 0;    while (tas5110_sensor_init[i][0]) {	if (sonix_i2cwrite(spca50x->dev, tas5110_sensor_init[i], 8) < 0)	    PDEBUG(0, "i2c error tas5110");	i++;    }    return 0;}static int hv7131_I2cinit(struct usb_spca50x *spca50x){    int i = 0;    while (hv7131_sensor_init[i][0]) {	if (sonix_i2cwrite(spca50x->dev, hv7131_sensor_init[i], 8) < 0)	    PDEBUG(0, "i2c error hv7131");	i++;    }    return 0;}static int pas202_I2cinit(struct usb_spca50x *spca50x){    int i = 0;    while (pas202_sensor_init[i][0]) {	if (sonix_i2cwrite(spca50x->dev, pas202_sensor_init[i], 8) < 0)	    PDEBUG(0, "i2c error pas202");	i++;    }    return 0;}static void sonix_start(struct usb_spca50x *spca50x){    __u8 compress = 0;    __u8 MCK_SIZE = 0x33;    __u8 frmult = 0x28;    __u8 *sn9c10x = NULL;    __u8 CompressCtrl[] = { 0, 0 };    int err = 0;    switch (spca50x->sensor) {    case SENSOR_OV7630:	sn9c10x = initOv7630;	compress = spca50x->mode << 4 | COMP2;	CompressCtrl[0] = compress;	frmult = 0x68;	CompressCtrl[1] = 0x20;	MCK_SIZE = 0x20;	break;    case SENSOR_TAS5130C:	sn9c10x = initTas5130;	compress = spca50x->mode << 4 | COMP;	CompressCtrl[0] = compress;	frmult = 0x60;	switch (spca50x->mode) {	case 0:		/* 640x480 3fp/s */	    CompressCtrl[1] = 0x43;	//0xA3 3fp/s ;// 0xF3;	    MCK_SIZE = 0x43;	// 0xA3;//0xF3;	    break;	case 1:		/* 320x240 0x33 10fp/s */	    CompressCtrl[1] = 0x23;	    MCK_SIZE = 0x23;	    break;	case 2:		/* 160x120 15fp/s */	    CompressCtrl[1] = 0x23;	    MCK_SIZE = 0x23;	    break;	default:	    break;	}	break;    case SENSOR_PAS106:	sn9c10x = initPas106;;	compress = spca50x->mode << 4 | COMP1;	CompressCtrl[0] = compress;	frmult = 0x24;		//0x28	CompressCtrl[1] = 0x20;	//0xF3;	MCK_SIZE = 0x20;	//0xF3;	break;    case SENSOR_TAS5110:	sn9c10x = initTas5110;	compress = spca50x->mode << 4 | 0x86;	CompressCtrl[0] = compress;	frmult = 0x60;	CompressCtrl[1] = 0x2b;	//0xF3;	MCK_SIZE = 0x2b;	//0xF3;	break;    case SENSOR_HV7131R:	sn9c10x = initHv7131;	compress = spca50x->mode << 4 | 0x8a;	CompressCtrl[0] = compress;	frmult = 0x60;	CompressCtrl[1] = 0x20;	MCK_SIZE = 0x20;	break;    case SENSOR_PAS202:	sn9c10x = initPas202;	compress = spca50x->mode << 4 | 0x89;	CompressCtrl[0] = compress;	frmult = 0x20;		//reg17 // 7 fp/s VGA	if (spca50x->mode)	    frmult = 0x24;	// 0x28->11fp/s SIF 0x24	CompressCtrl[1] = 0x20;	//reg19 30	MCK_SIZE = 0x20;	break;    }    /* reg 0x01 bit 2 video transfert on */    sonixRegWrite(spca50x->dev, 0x08, 0x01, 0x0000, &sn9c10x[0], 1);    /* reg 0x17 SensorClk enable inv Clk 0x60 */    sonixRegWrite(spca50x->dev, 0x08, 0x17, 0x0000, &sn9c10x[0x17 - 1], 1);    /* Set the whole registers from the template */    sonixRegWrite(spca50x->dev, 0x08, 0x01, 0x0000, sn9c10x, 0x1f);    switch (spca50x->sensor) {    case SENSOR_TAS5130C:	err = tas5130_I2cinit(spca50x);	break;    case SENSOR_PAS106:	err = pas106_I2cinit(spca50x);	break;    case SENSOR_OV7630:	err = ov7630_I2cinit(spca50x);	break;    case SENSOR_HV7131R:	err = hv7131_I2cinit(spca50x);	break;    case SENSOR_TAS5110:	err = tas5110_I2cinit(spca50x);	break;    case SENSOR_PAS202:	err = pas202_I2cinit(spca50x);	break;    default:	err = -EINVAL;	break;    }    /* H_size V_size  0x28,0x1e maybe 640x480 */    sonixRegWrite(spca50x->dev, 0x08, 0x15, 0x0000, &sn9c10x[0x15 - 1],		  0x02);    /* compression register */    sonixRegWrite(spca50x->dev, 0x08, 0x18, 0x0000, &compress, 1);    // H_start          sonixRegWrite(spca50x->dev, 0x08, 0x12, 0x0000, &sn9c10x[0x12 - 1], 1);    // V_START          sonixRegWrite(spca50x->dev, 0x08, 0x13, 0x0000, &sn9c10x[0x13 - 1], 1);    /* re set 0x17 SensorClk enable inv Clk 0x60 */    sonixRegWrite(spca50x->dev, 0x08, 0x17, 0x0000, &frmult, 1);    /*MCKSIZE ->3 */    sonixRegWrite(spca50x->dev, 0x08, 0x19, 0x0000, &MCK_SIZE, 1);    /* AE_STRX AE_STRY AE_ENDX AE_ENDY */    sonixRegWrite(spca50x->dev, 0x08, 0x1c, 0x0000, &sn9c10x[0x1c - 1], 4);    /* Enable video transfert */    sonixRegWrite(spca50x->dev, 0x08, 0x01, 0x0000, &sn9c10x[0], 1);    /* Compression */    sonixRegWrite(spca50x->dev, 0x08, 0x18, 0x0000, CompressCtrl, 2);    sonix_setcontrast(spca50x);    sonix_setbrightness(spca50x);}static int sonix_config(struct usb_spca50x *spca50x){    switch (spca50x->sensor) {    case SENSOR_OV7630:    case SENSOR_TAS5130C:    case SENSOR_HV7131R:    case SENSOR_MI0360:    case SENSOR_PAS202:	set_sonixVGA(spca50x);	break;    case SENSOR_PAS106:    case SENSOR_TAS5110:	set_sonixSIF(spca50x);	break;    default:	return -EINVAL;	break;    }    spca50x->qindex = 3;	//set the quantization table    return 0;}static void sonix_stopN(struct usb_spca50x *spca50x){    __u8 ByteSend = 0;    ByteSend = 0x09;		// 0X00    sonixRegWrite(spca50x->dev, 0x08, 0x01, 0x0000, &ByteSend, 1);}static int sonix_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum,int *datalength){				int sof = 0;		int j = 0;		int p = 0;				if (*datalength < 24) {		    if (*datalength > 6) {			j = *datalength - 6;		    } else {			j = 0;		    }		    if (j > 0) {			for (p = 0; p < j; p++) {			    if ((cdata[0 + p] == 0xFF)				&& (cdata[1 + p] == 0xFF)				&& (cdata[2 + p] == 0x00)				&& (cdata[3 + p] == 0xC4)				&& (cdata[4 + p] == 0xC4)				&& (cdata[5 + p] == 0x96)) {				sof = 1;				break;			    }			}		    }		}		if (sof) {		    *iPix = p + 12;		    *datalength -= *iPix;		    return 0;		    PDEBUG(5,			   "Sonix header packet found %d datalength %d !!",			   p, *datalength );		} else		*iPix = 0;		   return seqnum + 1;}#endif				/* SONIXUSB_H */

⌨️ 快捷键说明

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