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

📄 spca500_init.h

📁 LINUX X86平台下 万能摄象头驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
   	xmult = 0x16;	ymult = 0x12;   } else {        xmult = 0x28;	ymult = 0x1e;   }    /* is there a sensor here ? */    spca5xxRegRead(spca50x->dev, 0, 0, 0x8a04, &Data, 1);    PDEBUG(0, "Spca500 Sensor Address  0x%02X ", Data);PDEBUG(0, "Spca500 mode %d ,Xmult 0x%02X,  Ymult  0x%02X ", spca50x->mode,xmult,ymult);    /* setup qtable */    switch (spca50x->desc) {    case LogitechClickSmart310:	 spca500_setmode(spca50x,xmult,ymult);	/* enable drop packet */	if ((err =	     spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) {	    PDEBUG(2, "failed to enable drop packet");	}	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write failed");	}	err = spca50x_setup_qtable(spca50x,				   0x00, 0x8800, 0x8840,				   qtable_creative_pccam);	if (err < 0) {	    PDEBUG(2, "spca50x_setup_qtable failed");	}	//Init SDRAM - needed for SDRAM access	spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04);	/* switch to video camera mode */	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write camera mode failed");	}	wait_ms(500);	if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) {	    PDEBUG(2, "spca50x_reg_readwait() failed");	}	spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1);	spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data);	err = spca500_synch310(spca50x);	spca50x_write_vector(spca50x, spca500_visual_defaults); spca500_setmode(spca50x,xmult,ymult);	/* enable drop packet */	if ((err =	     spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) {	    PDEBUG(2, "failed to enable drop packet");	}	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write failed");	}	err = spca50x_setup_qtable(spca50x,				   0x00, 0x8800, 0x8840,				   qtable_creative_pccam);	if (err < 0) {	    PDEBUG(2, "spca50x_setup_qtable failed");	}	//Init SDRAM - needed for SDRAM access	spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04);	/* switch to video camera mode */	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write camera mode failed");	}	if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) {	    PDEBUG(2, "spca50x_reg_readwait() failed");	}	spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1);	spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data);	break;    case CreativePCCam300:	/* Creative PC-CAM 300 640x480 CCD */    case IntelPocketPCCamera:	/* FIXME: Temporary fix for Intel Pocket PC Camera - NWG (Sat 29th March 2003) */	/* do a full reset */	if ((err = spca500_full_reset(spca50x)) < 0) {	    PDEBUG(2, "spca500_full_reset failed");	}		/* enable drop packet */	if ((err =	     spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) {	    PDEBUG(2, "failed to enable drop packet");	}	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write failed");	}	err = spca50x_setup_qtable(spca50x,				   0x00, 0x8800, 0x8840,				   qtable_creative_pccam);	if (err < 0) {	    PDEBUG(2, "spca50x_setup_qtable failed");	} spca500_setmode(spca50x,xmult,ymult);	spca50x_reg_write(spca50x->dev, 0x20, 0x0001, 0x0004);	/* switch to video camera mode */	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write camera mode failed");	}	if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) {	    PDEBUG(2, "spca50x_reg_readwait() failed");	}	spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1);	spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data);	//spca50x_write_vector(spca50x, spca500_visual_defaults);	break;    case KodakEZ200:		/* Kodak EZ200 */	/* do a full reset */	if ((err = spca500_full_reset(spca50x)) < 0) {	    PDEBUG(2, "spca500_full_reset failed");	}	/* enable drop packet */	if ((err =	     spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) {	    PDEBUG(2, "failed to enable drop packet");	}	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 0);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write failed");	}	err = spca50x_setup_qtable(spca50x,				   0x00, 0x8800, 0x8840,				   qtable_kodak_ez200);	if (err < 0) {	    PDEBUG(2, "spca50x_setup_qtable failed");	}	 spca500_setmode(spca50x,xmult,ymult);		spca50x_reg_write(spca50x->dev, 0x20, 0x0001, 0x0004);	/* switch to video camera mode */	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004);	if (err < 0) {	    PDEBUG(2, "spca50x_reg_write camera mode failed");	}	if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) {	    PDEBUG(2, "spca50x_reg_readwait() failed");	}	spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1);	spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data);	//spca50x_write_vector(spca50x, spca500_visual_defaults);	break;    case BenqDC1016:    case DLinkDSC350:		/* FamilyCam 300 */    case AiptekPocketDV:	/* Aiptek PocketDV */    case Gsmartmini:		/*Mustek Gsmart Mini */    case MustekGsmart300:	// Mustek Gsmart 300    case PalmPixDC85:    case Optimedia:    case ToptroIndus:    case AgfaCl20:	spca500_reinit(spca50x);	spca50x_reg_write(spca50x->dev, 0x00, 0x0d01, 0x01);	/* enable drop packet */	spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001);	err = spca50x_setup_qtable(spca50x,				   0x00, 0x8800, 0x8840, qtable_pocketdv);	if (err < 0) {	    PDEBUG(2, "spca50x_setup_qtable failed");	}	spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 2);	/* familycam Quicksmart pocketDV stuff */	spca50x_reg_write(spca50x->dev, 0x00, 0x800a, 0x00);	//Set agc transfer: synced inbetween frames	spca50x_reg_write(spca50x->dev, 0x00, 0x820f, 0x01);	//Init SDRAM - needed for SDRAM access	spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04); spca500_setmode(spca50x,xmult,ymult);	/* switch to video camera mode */	err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004);		spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44);	spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1);	spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data);	break;    case LogitechTraveler:    case LogitechClickSmart510:	{	    spca50x_reg_write(spca50x->dev, 0x02, 0x00, 0x00);	    /* enable drop packet */	    if ((err =		 spca50x_reg_write(spca50x->dev, 0x00, 0x850a,				   0x0001)) < 0) {		PDEBUG(2, "failed to enable drop packet");	    }	    err = spca50x_setup_qtable(spca50x,				       0x00, 0x8800,				       0x8840, qtable_creative_pccam);	    if (err < 0) {		PDEBUG(2, "spca50x_setup_qtable failed");	    }	    err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3);	    if (err < 0) {		PDEBUG(2, "spca50x_reg_write failed");	    }	    spca50x_reg_write(spca50x->dev, 0x00, 0x800a, 0x00);	    //Init SDRAM - needed for SDRAM access	    spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04);	    	     spca500_setmode(spca50x,xmult,ymult);	     	    /* switch to video camera mode */	    err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004);	    spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44);	    	    spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1);	    spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data);	    spca50x_write_vector(spca50x, Clicksmart510_defaults);	}	break;    default:    PDEBUG(0, "UNKNOW spca500 WEBCAM  MODEL !! ");     break;    }}static int spca500_full_reset(struct usb_spca50x *spca50x){    int err;    /* send the reset command */    err = spca50x_reg_write(spca50x->dev, 0xe0, 0x0001, 0x0000);    if (err < 0) {	return err;    }    /* wait for the reset to complete */    err = spca50x_reg_readwait(spca50x->dev, 0x06, 0x0000, 0x0000);    if (err < 0) {	return err;    }    if ((err =	     spca50x_reg_write(spca50x->dev, 0xe0, 0x0000, 0x0000)) < 0) {	    PDEBUG(2, "spca50x_reg_write() failed");	    return err;	}	if ((err = spca50x_reg_readwait(spca50x->dev, 0x06, 0, 0)) < 0) {	    PDEBUG(2, "spca50x_reg_readwait() failed");	    return err;	}    /* all ok */    return 0;}static int spca500_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){		if (cdata[0] == SPCA50X_SEQUENCE_DROP) {		    if (cdata[1] == 0x01) {		    *iPix = SPCA500_OFFSET_DATA;		    *datalength -= *iPix;			return 0;		    } else {			/* drop packet */			return -1;		    }		} else {		*iPix = 1;		*datalength -= *iPix;		        return (seqnum+1);		}}#endif				/* SPCA500_INIT_H */

⌨️ 快捷键说明

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