コード例 #1
0
LOCAL uint32_t OV9660_Identify(uint32_t param)
{
#define OV9660_PID_VALUE	0x96	
#define OV9660_PID_ADDR 	0x0A
#define OV9660_VER_VALUE	0x63	
#define OV9660_VER_ADDR 	0x0B
        	
        uint8_t pid_value = 0;
        uint8_t ver_value = 0;
        BOOLEAN ret_value = 0XFF;

        pid_value =  Sensor_ReadReg(OV9660_PID_ADDR);
        // Get Version Code	
        ver_value =  Sensor_ReadReg(OV9660_VER_ADDR);

        if(OV9660_PID_VALUE == pid_value) {
                // Get Device Code		
                if(OV9660_VER_VALUE == ver_value) {
                        SENSOR_PRINT("That is OV9660 sensor !");		
                } else {
                        SENSOR_PRINT("OV9660_Identify: That is OV%x%x sensor !", pid_value, ver_value);
                }
                ret_value = 0;
        }
        SENSOR_PRINT("OV9660_Identify: PID = %x, VER = %x",pid_value, ver_value);	
        return (uint32_t)ret_value;
}
コード例 #2
0
LOCAL uint32_t _ov8830_Identify(uint32_t param)
{
#define ov8830_PID_VALUE    0x88
#define ov8830_PID_ADDR     0x300A
#define ov8830_VER_VALUE    0x30
#define ov8830_VER_ADDR     0x300B

	uint8_t pid_value = 0x00;
	uint8_t ver_value = 0x00;
	uint32_t ret_value = SENSOR_FAIL;

	SENSOR_PRINT("SENSOR_ov8830: mipi raw identify\n");

	pid_value = Sensor_ReadReg(ov8830_PID_ADDR);
	if (ov8830_PID_VALUE == pid_value) {
		ver_value = Sensor_ReadReg(ov8830_VER_ADDR);
		SENSOR_PRINT("SENSOR_ov8830: Identify: PID = %x, VER = %x", pid_value, ver_value);
		if (ov8830_VER_VALUE == ver_value) {
			Sensor_InitRawTuneInfo();
			ret_value = SENSOR_SUCCESS;
			SENSOR_PRINT("SENSOR_ov8830: this is ov8830 sensor !");
		} else {
			SENSOR_PRINT("SENSOR_ov8830: Identify this is OV%x%x sensor !", pid_value, ver_value);
		}
	} else {
		SENSOR_PRINT("SENSOR_ov8830: identify fail,pid_value=%d", pid_value);
	}
	return ret_value;
}
コード例 #3
0
LOCAL uint8_t OV7675_ReadReg( uint8_t  subaddr)
{
        uint8_t value = 0;
        value = Sensor_ReadReg(subaddr);
        //SENSOR_TRACE("SENSOR: OV7675_ReadReg reg/value(%x,%x) !!\n", subaddr, value);
        return value;
}
コード例 #4
0
LOCAL uint8_t SP0A19_ReadReg( uint8_t  subaddr)
{
    uint8_t value = 0;
    
    //I2C_WriteCmdArr(SP0A19_I2C_ADDR_W, &subaddr, 1, SCI_TRUE);
    //I2C_ReadCmd(SP0A19_I2C_ADDR_R, &value, SCI_TRUE);
    //SENSOR_PRINTK( "SP0A19 read ret is %X=%X",subaddr,value );
    value = Sensor_ReadReg( subaddr);
    return value;
}
コード例 #5
0
LOCAL uint32_t GT2005_Identify(uint32_t param)
{
#define GT2005_ID_H_VALUE	0x51
#define GT2005_ID_L_VALUE	0x38
		
        uint8_t id_h_value = 0;
        uint8_t id_l_value = 0;
        uint32_t ret_value = 0xFF;

        id_h_value = Sensor_ReadReg(0x0000);
        SENSOR_TRACE("GT2005_Identify-id_h_value %d.\n", id_h_value);

        id_l_value = Sensor_ReadReg(0x0001);
        SENSOR_TRACE("GT2005_Identify-id_l_value %d.\n", id_l_value);

        if((GT2005_ID_H_VALUE == id_h_value) && (GT2005_ID_L_VALUE == id_l_value)) {
                ret_value = 0;
                SENSOR_TRACE("It Is GT2005 Sensor !\n");	
        }
        return ret_value;

}
コード例 #6
0
LOCAL uint32_t OV9660_set_ae_enable(uint32_t enable)
{
	unsigned char value;
	
	SENSOR_PRINT("OV9660_set_ae_enable: enable = %d", enable);
	
	value = Sensor_ReadReg(0x13);
	value &= 0xFE;
	value |= enable;
	Sensor_WriteReg(0x13, value);
	
	return 0;
}
コード例 #7
0
ファイル: sensor_bf3905_mipi.c プロジェクト: sky8336/mn201307
LOCAL uint32_t _BF3905_Identify(uint32_t param)
{
#define BF3905_PID_VALUE    0x39    
#define BF3905_PID_ADDR     0xFC
#define BF3905_VER_VALUE    0x05    
#define BF3905_VER_ADDR     0xFD

	uint8_t pid_value=0x00;
	uint8_t ver_value=0x00;
	uint32_t ret_value=SENSOR_FAIL;


	CMR_LOGE("SENSOR:BF3905 identify  .\n");

	pid_value = Sensor_ReadReg(BF3905_PID_ADDR);

	if(BF3905_PID_VALUE==pid_value)
	{
		ver_value=Sensor_ReadReg(BF3905_VER_ADDR);

		CMR_LOGE("SENSOR: BF3905_Identify: PID = %x, VER = %x \n",pid_value, ver_value);

		if(BF3905_VER_VALUE==ver_value)
		{
			ret_value=SENSOR_SUCCESS;
			CMR_LOGE("SENSOR: this is BF3905 sensor ! \n");        
		}
		else
		{
			CMR_LOGE("SENSOR: BF3905_Identify this is TOSHIBA sensor ! \n");
		}
	}
	else
	{
		CMR_LOGE("SENSOR:BF3905 identify fail,pid_value=%d .\n",pid_value);
	}

	return ret_value;
}
コード例 #8
0
LOCAL uint8_t GC0309_ReadReg( uint8_t  subaddr)
{
        uint8_t value = 0;

#ifndef	_USE_DSP_I2C_
        value = Sensor_ReadReg( subaddr);
#else
        value = (uint16_t)DSENSOR_IICRead((uint16_t)subaddr);
#endif

        SENSOR_TRACE("SENSOR: GC0309_ReadReg reg/value(%x,%x) !!\n", subaddr, value);
        return value;
}
コード例 #9
0
ファイル: sensor_bf3905_mipi.c プロジェクト: sky8336/mn201307
LOCAL uint8_t BF3905_ReadReg( uint8_t  subaddr)
{
	uint8_t value = 0;
	
	#ifndef	_USE_DSP_I2C_

	value = Sensor_ReadReg( subaddr);
	#else
		value = (uint16_t)DSENSOR_IICRead((uint16_t)subaddr);
	#endif

    
	return value;
}
コード例 #10
0
LOCAL uint32_t OV9660_set_vmirror_enable(uint32_t enable)
{
	uint16_t reg04;
	
	Sensor_WriteReg(0xff, 0x01);
	reg04 = Sensor_ReadReg(0x04);
	
	if (enable)
	{
		reg04 = (reg04 | 0x50);
		Sensor_WriteReg(0xff, 0x01);
		Sensor_WriteReg(0x04, reg04);
	}
	else
	{
		reg04 = (reg04 & (~(0x50)));
		Sensor_WriteReg(0xff, 0x01);
		Sensor_WriteReg(0x04, reg04);
	}
	return 0;
}
コード例 #11
0
LOCAL uint32_t OV7690_set_whitebalance_mode(uint32_t mode )
{
        uint16_t i;
        uint16_t temp;
        SENSOR_REG_T* sensor_reg_ptr = (SENSOR_REG_T*)OV7690_WB_mode_tab[mode];

        if(mode>6)
                return 0;

        temp = Sensor_ReadReg( 0x13 );
        if (mode < 1 ) {
                Sensor_WriteReg( 0x13, temp |BIT_1 );//	Auto mode : enable auto  white balanec
        } else {
                Sensor_WriteReg( 0x13, temp &( ~BIT_1) );//	other mode : disable auto white balanec
        }	
        for(i = 0; (0xFF != sensor_reg_ptr[i].reg_addr) || (0xFF != sensor_reg_ptr[i].reg_value); i++) {
                Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value);
        }
        SENSOR_TRACE("OV7690_set_whitebalance_mode: mode = %d", mode);
        return 0;
}
コード例 #12
0
LOCAL void    GT2005_Set_Shutter(void)
{
        uint16_t shutter,AGain_shutter,DGain_shutter;

        Sensor_WriteReg(0x020B , 0x28);
        Sensor_WriteReg(0x020C , 0x44);
        Sensor_WriteReg(0x040B , 0x44);
        Sensor_WriteReg(0x0300 , 0xc1);
        shutter = (Sensor_ReadReg(0x0012)<<8 )|( Sensor_ReadReg(0x0013));    
        AGain_shutter = (Sensor_ReadReg(0x0014)<<8 )|( Sensor_ReadReg(0x0015));
        DGain_shutter = (Sensor_ReadReg(0x0016)<<8 )|( Sensor_ReadReg(0x0017));
        Sensor_WriteReg(0x0300 , 0x41); //close ALC
        shutter = shutter / 2; 
        Sensor_WriteReg(0x0305 , shutter&0xff);           
        Sensor_WriteReg(0x0304 , (shutter>>8)&0xff); 
        Sensor_WriteReg(0x0307 , AGain_shutter&0xff);      
        Sensor_WriteReg(0x0306 , (AGain_shutter>>8)&0xff); //AG
        Sensor_WriteReg(0x0308,  DGain_shutter&0xff);   //DG	
}
コード例 #13
0
LOCAL void OV9660_CalculateExposureGain(SENSOR_MODE_E sensor_preview_mode, SENSOR_MODE_E sensor_snapshot_mode)
{
        uint32_t   TgtMaxExp =1248;
        uint32_t   PrvExp,TgtExp = 0;
        uint32_t   dummyline = 0;
        uint8_t     PrvGain,val45,val10,val04,val2d,val2e;
        uint32_t  preview_xclk = s_OV9660_resolution_Tab_YUV[sensor_preview_mode].xclk_to_sensor;
        uint32_t  snapshot_xclk = s_OV9660_resolution_Tab_YUV[sensor_snapshot_mode].xclk_to_sensor;

        if((0==preview_xclk)||(0==snapshot_xclk)) {
                SENSOR_PRINT("OV9660_CalculateExposureGain: error! .\n");
                SENSOR_FAIL;
        }
        if(sensor_preview_mode != sensor_snapshot_mode) 
        {
                // 1. Close AE/AG(0x13 register).
                Sensor_WriteReg(0x13,0xe0);
                // 2. Read out gain/expsoure values, 0x00 and 0x10,0x04,0x45 register, (PrvGain, PrvExp)
                // 3. Change resolution and frame to capture mode
                // 4 . Calculate exposure/gain
                PrvGain = Sensor_ReadReg(0x00);
                PrvExp = Sensor_ReadReg(0x10) <<2;
                PrvExp += (Sensor_ReadReg(0x04) & 0x03); 
                PrvExp += (Sensor_ReadReg(0x45) & 0x3f) << 10;
                PrvExp += Sensor_ReadReg(0x2d);
                PrvExp += Sensor_ReadReg(0x2e)<<8;
                SENSOR_PRINT("OV9660: prvGain %d, prvExp %d", PrvGain, PrvExp);
                TgtExp = PrvExp * snapshot_xclk / preview_xclk;
                if ( PrvGain & 0x10 ) {
                        PrvGain &= 0xef;
                        TgtExp <<= 1;
                }
                if ( PrvGain & 0x20 ) {
                        PrvGain &= 0xdf;
                        TgtExp <<= 1;
                }
                if ( PrvGain & 0x40 ) {
                        PrvGain &= 0xbf;
                        TgtExp <<= 1;
                }
                if ( PrvGain & 0x80 ) {
                        PrvGain &= 0x7f;
                        TgtExp <<= 1;
                }

                TgtExp <<= 1;

                if(TgtExp > TgtMaxExp) {
                        dummyline = TgtExp - TgtMaxExp;
                        TgtExp = TgtMaxExp;
                }
                SENSOR_PRINT("OV9660: PrvGain %d, TgtExp %d", PrvGain, TgtExp);
                val45 =(uint8_t)( (TgtExp>>10) | ((Sensor_ReadReg(0x45) & 0xc0)));	//	 val45 = (TgtExp>>10);
                val10 = (uint8_t)(TgtExp>>2);
                val04 =(uint8_t)( Sensor_ReadReg(0x04)&0xfc);
                val04 = (val04|(uint8_t)(TgtExp&0x03));
                val2d = (uint8_t)(dummyline & 0xff);
                val2e = (uint8_t)((dummyline>>8) & 0xff);
                Sensor_WriteReg(0x45,val45);
                Sensor_WriteReg(0x10,val10);
                Sensor_WriteReg(0x04,val04);
                Sensor_WriteReg(0x00,PrvGain);
                Sensor_WriteReg(0x2d,val2d);
                Sensor_WriteReg(0x2e,val2e);
                Sensor_WriteReg(0x46,0);
                Sensor_WriteReg(0x47,0);
                msleep(300);
        }