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

📄 vc032x.h

📁 Linux下很强大的万能USB摄像头驱动。解压后
💻 H
📖 第 1 页 / 共 2 页
字号:
    spca50x->mode_cam[QSIF].method = 1;    spca50x->mode_cam[QSIF].mode = 1;    }static int vc0321_reset(struct usb_spca50x *spca50x){	spca5xxRegWrite(spca50x->dev, 0xa0, 0x00, 0xb04d, NULL, 0);	spca5xxRegWrite(spca50x->dev, 0xa0, 0x01, 0xb301, NULL, 0); 	msleep(100);	spca5xxRegWrite(spca50x->dev, 0xa0, 0x01, 0xb003, NULL, 0);	msleep(100);return 0;}static int vc0321_config(struct usb_spca50x *spca50x){ __u8 tmp2[3];    int sensor = 0;    spca50x->qindex = 7;    vc0321_reset(spca50x);    sensor = vc032x_probe_sensor(spca50x);    switch (sensor) {    	case -1:		PDEBUG(0,"Unknown sensor...");		return -EINVAL;	break;   	case SENSOR_OV7660:		PDEBUG(0, "Find Sensor OV7660");		spca50x->sensor = SENSOR_OV7660;		set_vc0321VGA(spca50x);	break;	case SENSOR_PO3130NC:		PDEBUG(0, "Find Sensor PO3130NC");		spca50x->sensor = SENSOR_PO3130NC;		set_vc0321VGA(spca50x);	break;	case SENSOR_MI1320:		PDEBUG(0, "Find Sensor MI1320");		spca50x->sensor = SENSOR_MI1320;		set_vc0321VGA(spca50x);	break;	case SENSOR_HV7131R:		PDEBUG(0, "Find Sensor HV7131R");		spca50x->sensor = SENSOR_HV7131R;		set_vc0321VGA(spca50x);	break;	case SENSOR_OV7670:		PDEBUG(0, "Find Sensor OV7670");		spca50x->sensor = SENSOR_OV7670;		if(spca50x->bridge == BRIDGE_VC0323)			set_vc0323VGA(spca50x);		else 			set_vc0321VGA(spca50x);	break;	case SENSOR_MI1310_SOC:		PDEBUG(0, "Find Sensor MI1310_SOC");		spca50x->sensor = SENSOR_MI1310_SOC;		if(spca50x->bridge == BRIDGE_VC0323)			set_vc0323VGA(spca50x);		else 			set_vc0321VGA(spca50x);	break;    };   if (spca50x->bridge == BRIDGE_VC0321){spca5xxRegRead (spca50x->dev, 0x8a, 0x01, 0     , tmp2, 3); udelay(10);spca5xxRegWrite(spca50x->dev, 0x87, 0x00, 0x0f0f, NULL, 0); udelay(10);spca5xxRegRead (spca50x->dev, 0x8b, 0x01, 0     , tmp2, 3); udelay(10);spca5xxRegWrite(spca50x->dev, 0x88, 0x00, 0x0202, NULL, 0); udelay(10);}    return 0;}static void vc0321_setquality(struct usb_spca50x *spca50x){    __u8 quality = 0;    quality = (spca50x->qindex) & 0xff;//    spca5xxRegWrite(spca50x->dev, 0xa0, quality, 0x0008, NULL, 0);}static void vc0321_setAutobright(struct usb_spca50x *spca50x){    __u8 autoval = 0;    if (spca50x->autoexpo)	autoval = 0x42;    else	autoval = 0x02;//    spca5xxRegWrite(spca50x->dev, 0xa0, autoval, 0x0180, NULL, 0);}static void vc0321_start(struct usb_spca50x *spca50x){	// __u8 tmp2;    int err = 0;    __u8 *GammaT = NULL;    __u8 *MatrixT = NULL;    /* Assume start use the good resolution from spca50x->mode */    if (spca50x->bridge == BRIDGE_VC0321){     spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfec, NULL, 0);    spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfed, NULL, 0);    spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfee, NULL, 0);    spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfef, NULL, 0);    }    switch (spca50x->sensor) {    	case SENSOR_OV7660:    		GammaT = ov7660_gamma;    		MatrixT = ov7660_matrix;		if (spca50x->mode) {	    		/* 320x240 */			 err = vc0321WriteVector(spca50x, ov7660_initQVGA_data);		} else {	    		/* 640x480 */	   		 err = vc0321WriteVector(spca50x, ov7660_initVGA_data);		}				break;	case SENSOR_PO3130NC:		GammaT = po3130_gamma;    		MatrixT = po3130_matrix;		if (spca50x->mode) {	    		/* 320x240 */			 err = vc0321WriteVector(spca50x, po3130_initQVGA_data);		} else {	    		/* 640x480 */	   		 err = vc0321WriteVector(spca50x, po3130_initVGA_data);		}	err = vc0321WriteVector(spca50x, po3130_rundata);	break;	case SENSOR_HV7131R:		GammaT = hv7131r_gamma;    		MatrixT = hv7131r_matrix;				if (spca50x->mode) {	    		/* 320x240 */			 err = vc0321WriteVector(spca50x, hv7131r_initQVGA_data);		} else {	    		/* 640x480 */	   		 err = vc0321WriteVector(spca50x, hv7131r_initVGA_data);		}		 	break;	case SENSOR_MI1320:		GammaT = mi1320_gamma;    		MatrixT = mi1320_matrix;				if (spca50x->mode) {	    		/* 320x240 */			 err = vc0321WriteVector(spca50x, mi1320_initQVGA_data);		} else {	    		/* 640x480 */	   		 err = vc0321WriteVector(spca50x, mi1320_initVGA_data);		}		break;	case SENSOR_OV7670:    		//GammaT = ov7660_gamma;    		//MatrixT = ov7660_matrix;		if (spca50x->mode) {	    		/* 320x240 */			 err = vc0321WriteVector(spca50x, ov7670_initQVGA_JPG);		} else {	    		/* 640x480 */	   		 err = vc0321WriteVector(spca50x, ov7670_initVGA_JPG);		}				break;	case SENSOR_MI1310_SOC:		if (spca50x->mode) {	    		/* 320x240 */			 err = vc0321WriteVector(spca50x, mi1310_socinitQVGA_JPG);		} else {	    		/* 640x480 */	   		 err = vc0321WriteVector(spca50x, mi1310_socinitVGA_JPG);		}	break;	default:		PDEBUG(0, "Damned !! no sensor found Bye");		return;	break;    }    if (GammaT && MatrixT){	put_tab_to_reg(spca50x, GammaT, 17, 0xb84a);	put_tab_to_reg(spca50x, GammaT, 17, 0xb85b);	put_tab_to_reg(spca50x, GammaT, 17, 0xb86c);	put_tab_to_reg(spca50x, MatrixT, 9, 0xb82c);			// Seem SHARPNESS		/*		 spca5xxRegWrite(spca50x->dev, 0xa0, 0x80, 0xb80a, NULL, 0);		 spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb80b, NULL, 0);		 spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb80e, NULL, 0);		 */		 /* all 0x40 ??? do nothing		 spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb822, NULL, 0);		  spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb823, NULL, 0);		   spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb824, NULL, 0);		 */		 /* Only works for HV7131R ?? 		 spca5xxRegRead (spca50x->dev, 0xa1, 0x01, 0xb881, &tmp2, 1); udelay(10);		 spca5xxRegWrite(spca50x->dev, 0xa0, 0xfe01, 0xb881, NULL, 0);		 spca5xxRegWrite(spca50x->dev, 0xa0, 0x79, 0xb801, NULL, 0);		 */		 /* only hv7131r et ov7660 		 spca5xxRegWrite(spca50x->dev, 0xa0, 0x20, 0xb827, NULL, 0);		 spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb826, NULL, 0); //ISP_GAIN 80		 spca5xxRegWrite(spca50x->dev, 0xa0, 0x23, 0xb800, NULL, 0); // ISP CTRL_BAS		 */	// set the led on 0x0892 0x0896        spca5xxRegWrite(spca50x->dev, 0x89, 0xffff, 0xfdff, NULL, 0);	msleep(100);    	vc0321_setbrightness(spca50x);    	vc0321_setquality(spca50x);    	vc0321_setAutobright(spca50x);    }}static void vc0321_stopN(struct usb_spca50x *spca50x){    struct usb_device *dev = spca50x->dev;    spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);    spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0);    spca5xxRegWrite(dev, 0xa0, 0x09, 0xb003, NULL, 0);}static void vc0321_stop0(struct usb_spca50x *spca50x){    struct usb_device *dev = spca50x->dev;    spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);}static void vc0321_shutdown(struct usb_spca50x *spca50x){/*    struct usb_device *dev = spca50x->dev;    __u8 buffread;    spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);    spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0);    spca5xxRegWrite(dev, 0xa0, 0x09, 0xb303, NULL, 0);    spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);*/}static __u16 vc0321_getcolors(struct usb_spca50x *spca50x){//Nothingreturn spca50x->colour;}static void vc0321_setcolors(struct usb_spca50x *spca50x){//Nothing spca50x->colour = 0;}static void vc0321_set50HZ(struct usb_spca50x *spca50x) {     switch (spca50x->sensor) {      case SENSOR_OV7660: 	  vc0321WriteVector(spca50x, ov7660_50HZ);      break;      default:           break;     } } static void vc0321_set60HZ(struct usb_spca50x *spca50x) {     switch (spca50x->sensor) {      case SENSOR_OV7660: 	  vc0321WriteVector(spca50x, ov7660_60HZ);      break;      default:           break;     } }static void vc0321_setNoFliker(struct usb_spca50x *spca50x) {     switch (spca50x->sensor) {      case SENSOR_OV7660: 	  vc0321WriteVector(spca50x, ov7660_NoFliker);      break;      default:      break;     }  } static int vc0321_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){				if (cdata[0] == 0xFF && cdata[1] == 0xD8) {		PDEBUG(5,			   "vc032x header packet found datalength %d !!",  			   *datalength );			if(spca50x->bridge == BRIDGE_VC0321)			 	*iPix = 46;			 else			 	*iPix = 0;		    *datalength -= *iPix;		    return 0;		   		} 		*iPix = 0;		PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength);		return (seqnum +1);}#if 0  static int vc0321_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){				if (cdata[0] == 0xFF && cdata[1] == 0xD8) {					*iPix = 46 ;		     PDEBUG(5,			   "vc0321 header packet found datalength %d !!",			   *datalength );		    *datalength -= *iPix;		    return 0;		   		} 		*iPix = 0;		PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength);		return (seqnum +1);}static int vc0323_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){				if (cdata[0] == 0xFF && cdata[1] == 0xD8) {		PDEBUG(5,			   "vc0323 header packet found datalength %d !!",			   *datalength );		if(spca50x->bridge == BRIDGE_VC0321){						*iPix = 46 ;   		    *datalength -= *iPix;		    }		    return 0;  		} 		*iPix = 0;		PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength);		return (seqnum +1);}#endif#endif				// VC032XUSB_H

⌨️ 快捷键说明

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