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

📄 l2_fadjust.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
    		reg_data[0] = (UCHAR)Value;
    		L2_WriteSSC(reg_addr, reg_data, 1, option1);
   	}
  	#endif
#ifdef OV3610					//Ov 3.2M CMOS Sensor		//patch5.2.1@jhyu@OV3610
   	{ 
    		UCHAR reg_addr[1], reg_data[1], i, j;
    
		option1     = Option & 0x01;  		//Sequential mode, Sync VD ?
    		if (Value >= 0x40) return 1;
    		reg_addr[0] = 0x00; 
    		reg_data[0] = (UCHAR)Value;
    		L2_WriteSSC(reg_addr, reg_data, 1, option1); 
   	}
#endif
//-------------------Davis:patch4.0.0.0_2005/Jun/07 begin
	#ifdef OV3620
   	{
        UCHAR reg_addr[1], reg_data[1], i, j;

        option1 = Option & 0x01;  		//Sequential mode, Sync VD ?
   	    if (Value >= 0x40)
            return 1;

   	    reg_addr[0] = 0x00;
   	    reg_data[0] = (UCHAR)Value;
   	    L2_WriteSSC(reg_addr, reg_data, 1, option1);
   	}
  	#endif
//-------------------Davis:patch4.0.0.0_2005/Jun/07 end

  #ifdef ICM107B		  			//IC-Media 1.0M CMOS Sensor
   {
    UCHAR reg_addr[1], reg_data[1];
    float temp;
//PRINT_FRONT ("            Enter L2_AdjustGain = %x \n", Value);
    //PRINT_FRONT ("Value = %x \n", (USHORT)Value);
	if (Value > 2047) return 1;
    option1     = (Option & 0x01);  	    //Sync VD ?
    reg_addr[0]   = 0x20; 					//Set G1 gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x21; 					//Set G1 gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

	reg_addr[0]   = 0x22; 					//Set R gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x23; 					//Set R gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x24; 					//Set B gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x25; 					//Set B gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x26; 					//Set G2 gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x27; 					//Set G2 gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC107(reg_addr, reg_data, 0x01, 0);

    temp = (7.1 * (Value >> 8)) + 5.3;
    L2_ConfigOB(0, 0, 0, 1, (USHORT)temp);

    reg_addr[0]   = 0x00;
    L2_ReadSSC(reg_addr[0], reg_data, 0x01, 0x01);
    reg_data[0]   = reg_data[0] | 0x80;
    //L3_WaitUpdate107();
    L2_WSSC107(reg_addr, reg_data, 0x01, option1);

    //////////////////////////////////////////////////////////////
   }
  #endif

  #ifdef ICM108		  			//IC-Media 1.0M CMOS Sensor
   {
    UCHAR reg_addr[1], reg_data[1];
    float temp;
//PRINT_FRONT ("            Enter L2_AdjustGain = %x \n", Value);
    //PRINT_FRONT ("Value = %x \n", (USHORT)Value);
	if (Value > 2047) return 1;
    option1     = (Option & 0x01);  	    //Sync VD ?
    reg_addr[0]   = 0x20; 					//Set G1 gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x21; 					//Set G1 gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

	reg_addr[0]   = 0x22; 					//Set R gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x23; 					//Set R gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x24; 					//Set B gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x25; 					//Set B gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x26; 					//Set G2 gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x27; 					//Set G2 gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC108(reg_addr, reg_data, 0x01, 0);

    temp = (7.1 * (Value >> 8)) + 5.3;
    L2_ConfigOB(0, 0, 0, 1, (USHORT)temp);

    reg_addr[0]   = 0x00;
    L2_ReadSSC(reg_addr[0], reg_data, 0x01, 0x01);
    reg_data[0]   = reg_data[0] | 0x80;
    //L3_WaitUpdate107();
    L2_WSSC108(reg_addr, reg_data, 0x01, option1);

    //////////////////////////////////////////////////////////////
   }
  #endif


//patch4.4@andrew@ICM109
  #ifdef ICM109		  			//IC-Media 2.0M CMOS Sensor
   {
    UCHAR reg_addr[1], reg_data[1];
    float temp;
//PRINT_FRONT ("            Enter L2_AdjustGain = %x \n", Value);
    //PRINT_FRONT ("Value = %x \n", (USHORT)Value);
	if (Value > 2047) return 1;
    option1     = (Option & 0x01);  	    //Sync VD ?
    reg_addr[0]   = 0x20; 					//Set G1 gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x21; 					//Set G1 gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

	reg_addr[0]   = 0x22; 					//Set R gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x23; 					//Set R gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x24; 					//Set B gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x25; 					//Set B gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x26; 					//Set G2 gain
    reg_data[0]   = (UCHAR)Value;
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    reg_addr[0]   = 0x27; 					//Set G2 gain
    reg_data[0]   = (UCHAR)(Value >> 8);
    L2_WSSC109(reg_addr, reg_data, 0x01, 0);

    temp = (7.1 * (Value >> 8)) + 5.3;
    L2_ConfigOB(0, 0, 0, 1, (USHORT)temp);

    reg_addr[0]   = 0x00;
    L2_ReadSSC(reg_addr[0], reg_data, 0x01, 0x01);
    reg_data[0]   = reg_data[0] | 0x80;
    //L3_WaitUpdate107();
    L2_WSSC109(reg_addr, reg_data, 0x01, option1);

    //////////////////////////////////////////////////////////////
   }
  #endif


  #ifdef MCM20027		  		// Motorola 1.3M CMOS Sensor
   {
    UCHAR reg_addr[1], reg_data[1], temp;
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 63) return 1;
    option1     = (Option & 0x01);  	//Sync VD ?
    reg_addr[0]   = 0x10; 				//Set Global gain
    reg_data[0]   = (UCHAR)Value;
    L2_WriteSSC(reg_addr, reg_data, 0x01, option1);
   }
  #endif

  #ifdef ICM105		  			//IC-Media VGA CMOS Sensor
   {
    UCHAR reg_addr[1], reg_data[1], temp;
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	//PRINT_FRONT ("Value = %x \n", (USHORT)Value);
	if (Value > 6) return 1;
    option1     = (Option & 0x01);  	//Sync VD ?
    temp        = (UCHAR)Value << 5 & 0xE0;
	//PRINT_FRONT ("temp = %x \n", (USHORT)temp);
    reg_addr[0]   = 0x11; 					//Set Global gain
    reg_data[0]   = temp;
    //PRINT_FRONT ("reg_data[0] = %x \n", (USHORT)reg_data[0]);
    L2_WriteSSC(reg_addr, reg_data, 0x01, option1);
   }
  #endif

  #ifdef TASC5130		  		// TASC VGA Sensor
   {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 7) return 1;
    option1     = Option & 0x01;  		//Sync VD ?
    reg_data[0] = 0;
    reg_data[1] = (7 - Value) << 5;
    L2_WriteSI(reg_data, option1);
   }
  #endif

#ifdef TASC5160		  		// TASC VGA Sensor
    	UCHAR reg_data[2];
	UCHAR Machine_Mode;
	PRINT_FRONT ("            Enter L2_AdjustGain for TASC5160\n");
	printf ("            Enter L2_AdjustGain for TASC5160\n");

//	if (Value > 7) return 1;
    	option1     = Option & 0x01;  		//Sync VD ?
    	Machine_Mode=Option & 0x02;
//    if(Machine_Mode) reg_data[0] =0x08;	//DSC Mode
    	if(XBYTE[0x2000]==2) reg_data[0] =0x08;
    	else  reg_data[0] =0xc8;
    	reg_data[1] =(~(UCHAR)Value);
        //L2_WriteSI(reg_data, option1);
    	L2_WriteSI(reg_data, 1);
  #endif

  #ifdef HP2020		  		// HP2020 VGA CMOS Sensor
   {
    UCHAR reg_addr[1], reg_data[1], temp;
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
//	if (Value > 63) return 1;
//    option1     = (Option & 0x01);  	//Sync VD ?
//    reg_addr[0]   = 0x10; 				//Set Global gain
//    reg_data[0]   = (UCHAR)Value;
//    L2_WriteSSC(reg_addr, reg_data, 0x01, option1);
   }
  #endif

  #ifdef YM3170		  		// Y-Media 3M Sensor
   {
    UCHAR reg_addr[1], reg_data[1], temp;
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 3) return 1;
    option1     = (Option & 0x01);  	//Sync VD ?

	XBYTE[0X2032] = XBYTE[0X2032] & 0xDF;  //GPIO21  = 0
    reg_addr[0]   = 0xDA; 					//Set Global gain
    reg_data[0]   = Value;
    L2_WriteSSC(reg_addr, reg_data, 0x01, option1);
	XBYTE[0X2032] = XBYTE[0X2032] | 0x20;  //GPIO21  = 1
   }
  #endif

  #ifdef PB111		  		// CIF Sensor
   {
    UCHAR reg_addr[1], reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 128) return 1;
    option1     = (Option & 0x01);  	//Sync VD ?

    reg_addr[0]   = 0x35; 					//Set Global gain
    reg_data[0]   = 0x00;
    reg_data[1]   = (UCHAR)Value;
    L2_WriteSSC(reg_addr, reg_data, 0x02, option1);
   }
  #endif


//patch4.4@andrew@SHARP_LZ24
//below function not work
//so disable , this chip must use manul mode
#if 0
  #ifdef IR3Y38M		  		// SHARP CDSAGC
   {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
    option1     = Option & 0x01;  		//Sync VD ?
    reg_data[0] = (UCHAR)(Value << 1); 		//Set AGC GAIN
    reg_data[1] = (UCHAR)((Value >> 7) & 0x01) | 0x04;
    L2_WriteSI(reg_data, option1);
   }
  #endif
  #endif

  #ifdef HD49322F		  		// HITACHI HD49322F CDSAGC
   {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
    option1     = Option & 0x01;  		//Sync VD ?
    reg_data[0] = (Value << 2) & 0xFC; 		//Set AGC GAIN
    reg_data[1] = ((Value >> 6) & 0x1F);
    L2_WriteSI(reg_data, option1);
   }
  #endif
  #ifdef HD49334F		  		// HITACHI HD49334F CDSAGC
   {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
    if (Value > 255) return 1;
    option1     = Option & 0x01;  		//Sync VD ?
    reg_data[0] = (Value << 5) & 0xE0; 		//Set AGC GAIN
    reg_data[1] = ((Value >> 3) & 0x1F);
    L2_WriteSI(reg_data, option1);
   }
  #endif
  #ifdef AD9843 		  		// ADI AD9843 CDSAGC
   {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 1023) return 1;
    option1     = Option & 0x01;  		    //Sync VD ?
    reg_data[0] = (Value << 5) | 0x02;  	//Set CDS GAIN
    reg_data[1] = ((Value >> 3) & 0x7F);
    L2_WriteSI(reg_data, option1);
   }
  #endif
  #ifdef AD9846 		  		// ADI AD9846 CDSAGC
    {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 1023) return 1;
    option1     = Option & 0x01;  		    //Sync VD ?
    reg_data[0] = (Value << 5) | 0x02;  	//Set CDS GAIN
    reg_data[1] = ((Value >> 3) & 0x7F);
    L2_WriteSI(reg_data, option1);
    }
  #endif

  #ifdef AD9804 		  		// ADI AD9804 CDSAGC
   {
    UCHAR reg_data[2];
	//PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 1023) return 1;
    option1     = Option & 0x01;  		    //Sync VD ?
    reg_data[0] = (Value << 5) | 0x02;  	//Set CDS GAIN
    reg_data[1] = ((Value >> 3) & 0x7F);
    L2_WriteSI(reg_data, option1);
   }
  #endif

  #ifdef TLV990 		  		// TI TLV990 CDSAGC
   {
    UCHAR reg_data[2];
	UCHAR value1, value2, temp;
    //PRINT_FRONT ("            Enter L2_AdjustGain \n");
	if (Value > 1023) return 1;
    option1     = Option & 0x01;  		    //Sync VD ?
    temp = (UCHAR) Value;
    value1 = ((temp & 0x01) << 7) | ((temp & 0x02) << 5) | ((temp & 0x04) << 3) | ((temp & 0x08) << 1) | ((temp & 0x10) >> 1) | ((temp & 0x20) >> 3) | ((temp & 0x40) >> 5)| ((temp & 0x80) >> 7);
    temp = (UCHAR) (Value >> 8);
	value2 = ((temp & 0x01) << 7) | ((temp & 0x02) << 5) | 0x20;
    reg_data[0] = value2;  	//Set CDS GAIN
    reg_data[1] = value1;
    L2_WriteSI(reg_data, option1);
   }
  #endif


  #ifdef IR3Y38M
  {

     if(Value>255)
     	   return 1;

     L2_IR3Y38M_Serial( Value,2);  //set IR3Y38 GAIN

  }
  #endif

//patch4.4@andrew@IR3Y48A
#ifdef IR3Y48A
  {
	UCHAR reg_data[2];
	USHORT temp;

       if(Value>511)
     	     return 1;
       //*((USHORT *)reg_data)=(Value<<6)|0x0c;  not work BC india

       temp=(Value<<6)|0x0c;
       reg_data[0]=(UCHAR)(temp&0xff);
       reg_data[1]=(UCHAR)(temp>>8);



       L2_WriteSI(reg_data, option1);


  }
#endif

//patch4.5@andrew@VSP1021
#ifdef VSP1021 		  		// TI CDSAGC
   {
   option1     = Option & 0x01;  		    //Sync VD ?

	if (Value > 1023) return 1;
    	option1     = Option & 0x01;  		    //Sync VD ?

  	L2_SetCDSAGC_VSP1021(0x01,Value,option1);
   }
 #endif


  //PRINT_FRONT ("            Exit L2_AdjustGain \n");
  return 0;
}

UCHAR L2_SetFrontImgOffsetc(USHORT Hoffset, USHORT Voffset) USING_0
{
  UCHAR   temp1, temp2;
  temp1   = Hoffset & 0xFF;
  temp2   = (Hoffset >> 8) & 0x0F;
  XBYTE[0x2A20] = temp1;       //Set Hoffsetc
  XBYTE[0x2A21] = temp2;

  temp1   = Voffset & 0xFF;
  temp2   = (Voffset >> 8) & 0x0F;
  XBYTE[0x2A22] = temp1;       //Set Voffsetc
  XBYTE[0x2A23] = temp2;
  return 0;
}


UCHAR L2_SetFrontImgSizec(USHORT Hsize, USHORT Vsize) USING_0
{

⌨️ 快捷键说明

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