Example #1
0
int
LensSensorDrv::moveMCU(int a_i4FocusPos, unsigned int a_u4CurrSensorDev)
{
    //DRV_DBG("moveMCU() - pos = %d \n", a_i4FocusPos); 	
    int err = 0; 
    ACDK_SENSOR_FEATURECONTROL_STRUCT featureCtrl;    
    MUINT16 FeaturePara = 0;
    MUINT32 FeatureParaLen = 0;
    
    int a_fdMCU=0;
	if(a_u4CurrSensorDev==MCU_DEV_MAIN)       	{a_fdMCU = m_fdMCU_main;}
	else if(a_u4CurrSensorDev==MCU_DEV_MAIN_2) 	{a_fdMCU = m_fdMCU_main2;}
	else if(a_u4CurrSensorDev==MCU_DEV_SUB) 	    {a_fdMCU = m_fdMCU_sub;}

    if (a_fdMCU < 0) {
    	DRV_ERR("moveMCU() invalid m_fdMCU =%d\n", a_fdMCU); 
    	return MCUDrv::MCU_INVALID_DRIVER;
    }

    FeaturePara = (MUINT16)a_i4FocusPos;
    FeatureParaLen = sizeof(MUINT16);
    
    featureCtrl.FeatureId = SENSOR_FEATURE_MOVE_FOCUS_LENS;
    featureCtrl.pFeaturePara = (MUINT8*)&FeaturePara;
    featureCtrl.pFeatureParaLen = &FeatureParaLen;
    
    err = ioctl(a_fdMCU, KDIMGSENSORIOC_X_FEATURECONCTROL , &featureCtrl);
    
    if (err < 0) {
        DRV_ERR("[moveMCU] ioctl - SENSOR_FEATURE_MOVE_FOCUS_LENS, error %s",  strerror(errno));
        return err; 
    }

    if(a_u4CurrSensorDev==MCU_DEV_MAIN)       	{m_i4FocusPos_main=a_i4FocusPos;}
	else if(a_u4CurrSensorDev==MCU_DEV_MAIN_2) 	{m_i4FocusPos_main2=a_i4FocusPos;}
	else if(a_u4CurrSensorDev==MCU_DEV_SUB) 	    {m_i4FocusPos_sub=a_i4FocusPos;}
    return MCUDrv::MCU_NO_ERROR;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int FlashlightDrv::setTimeOutTime(int ms)
{
	DRV_DBG("setTimeOutTime(ms=%d)", ms);
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_DBG("setTimeOutTime() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	err = ioctl(m_fdSTROBE,FLASH_IOC_SET_TIME_OUT_TIME_MS,ms);
	if (err < 0)
	{
	    DRV_ERR("setTimeOutTime() err=%d\n", err);
	}
	return err;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int FlashlightDrv::setFlashReg(int shift, unsigned short reg, unsigned short mask)
{
	DRV_DBG("setFlashSpReg() shift=%d, reg=%d, mak=0x%x",shift, reg, mask);
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_DBG("setFlashSpReg() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	DRV_DBG("FlashErr setFlashSpReg() code not ready, line=%d",__LINE__);
	if (err < 0)
	{
	    DRV_ERR("setFlashSpReg() err=%d\n", err);
	}
	return err;
}
//======================================
int FlashlightDrv::setPreOn()
{
	DRV_DBG("setPreOn()");
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_ERR("setPreOn() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	err = ioctl(m_fdSTROBE,FLASH_IOC_PRE_ON,0);
	if (err < 0)
	{
	    DRV_DBG("setPreOn() not support =%d\n", err);
	}
	m_preOnTime=getMs();
	return err;
}
//======================================
int FlashlightDrv::getPreOnTimeMs(int* ms)
{
	DRV_DBG("getPreOnTimeMs()");
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_ERR("getPreOnTimeMs() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	*ms=0;
	err = ioctl(m_fdSTROBE,FLASH_IOC_GET_PRE_ON_TIME_MS, ms);
	if (err < 0)
	{
	    DRV_DBG("getPreOnTimeMs() not support ret=%d\n", err);
	}
	DRV_DBG("getPreOnTimeMs=%d", *ms);
	return err;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int FlashlightDrv::setDuty(int duty)
{
	DRV_DBG("setDuty() duty = %d\n",duty);
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_DBG("setDuty() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	err = ioctl(m_fdSTROBE,FLASH_IOC_SET_DUTY,duty);
	if (err < 0)
	{
	    DRV_ERR("setDuty() err=%d\n", err);
	    return err;
	}
	m_duty = duty;
	return err;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int FlashlightDrv::setStep(int step)
{
	DRV_DBG("setStep() step = %d\n",step);
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_DBG("setStep() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	err = ioctl(m_fdSTROBE,FLASH_IOC_SET_STEP,step);
	if (err < 0)
	{
	    DRV_ERR("setOnOff() err=%d\n", err);
	    return err;
	}
	m_step = step;
	return err;
}
int FlashlightDrv::hasLowPowerDetect(int* hasLPD)
{
	DRV_DBG("hasLowPowerDetect()");
	*hasLPD=0;
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_ERR("hasLowPowerDetect() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	err = ioctl(m_fdSTROBE,FLASH_IOC_HAS_LOW_POWER_DETECT, hasLPD);
	if (err < 0)
	{
	    DRV_DBG("hasLowPowerDetect() not support ret=%d\n", err);
	}
	DRV_DBG("hasLowPowerDetect=%d", *hasLPD);
	return err;
}
int FlashlightDrv::setTimeus(unsigned long a_timeus)
{
	DRV_DBG("setTimeus line=%d",__LINE__);
    int err = 0;
    if (m_fdSTROBE < 0)
    {
        DRV_DBG(" [setTimeus] m_fdSTROBE < 0\n");
        return StrobeDrv::STROBE_UNKNOWN_ERROR;
    }

    err = ioctl(m_fdSTROBE,FLASHLIGHTIOC_T_FLASHTIME,a_timeus);
    if (err < 0)
    {
        DRV_ERR("FLASHLIGHTIOC_T_ENABLE error\n");
        return err;
    }

    return StrobeDrv::STROBE_NO_ERROR;
}
Example #10
0
int
LensSensorDrv::getMCUInfo(mcuMotorInfo *a_pMotorInfo, unsigned int a_u4CurrSensorDev)

{
    int err = 0; 
    ACDK_SENSOR_FEATURECONTROL_STRUCT featureCtrl;    
    MUINT32 FeaturePara = 0;
    MUINT32 FeatureParaLen = 4;
    int a_fdMCU=0;
	unsigned long a_i4FocusPos=0;
	if(a_u4CurrSensorDev==MCU_DEV_MAIN)       	{a_fdMCU = m_fdMCU_main; a_i4FocusPos=m_i4FocusPos_main;}
	else if(a_u4CurrSensorDev==MCU_DEV_MAIN_2) 	{a_fdMCU = m_fdMCU_main2; a_i4FocusPos=m_i4FocusPos_main2;}
	else if(a_u4CurrSensorDev==MCU_DEV_SUB) 	    {a_fdMCU = m_fdMCU_sub; a_i4FocusPos=m_i4FocusPos_sub;}


    if (a_fdMCU < 0) {
        DRV_ERR("getMCUInfo() invalid m_fdMCU =%d\n", a_fdMCU);
        a_pMotorInfo->bIsMotorOpen = 0;    
        return MCUDrv::MCU_INVALID_DRIVER;
    }
    a_pMotorInfo->bIsMotorOpen = 1;
    a_pMotorInfo->u4CurrentPosition = a_i4FocusPos; 
    a_pMotorInfo->bIsSupportSR = 0;
    featureCtrl.pFeaturePara = (MUINT8*)&FeaturePara;
    featureCtrl.pFeatureParaLen = &FeatureParaLen;

    featureCtrl.FeatureId = SENSOR_FEATURE_GET_AF_STATUS;
    err = ioctl(a_fdMCU, KDIMGSENSORIOC_X_FEATURECONCTROL , &featureCtrl);        
    a_pMotorInfo->bIsMotorMoving = (bool)FeaturePara; 

    featureCtrl.FeatureId = SENSOR_FEATURE_GET_AF_INF;
    err = ioctl(a_fdMCU, KDIMGSENSORIOC_X_FEATURECONCTROL , &featureCtrl);        
    a_pMotorInfo->u4InfPosition = (MUINT32)FeaturePara; 

    featureCtrl.FeatureId = SENSOR_FEATURE_GET_AF_MACRO;
    err = ioctl(a_fdMCU, KDIMGSENSORIOC_X_FEATURECONCTROL , &featureCtrl);            
    a_pMotorInfo->u4MacroPosition = (MUINT32)FeaturePara; 

    //DRV_DBG("[ImgSensorDrv] [state]%d, [inf]%d, [macro]%d \n", a_pMotorInfo->bIsMotorMoving, a_pMotorInfo->u4InfPosition, a_pMotorInfo->u4MacroPosition);

    return MCUDrv::MCU_NO_ERROR;
}
StrobeDrv::FLASHLIGHT_TYPE_ENUM FlashlightDrv::getFlashlightType() const
{
	DRV_DBG("getFlashlightType line=%d",__LINE__);
    int err = 0;

    if (m_fdSTROBE < 0)
    {
        DRV_DBG(" [getFlashlightType] m_fdSTROBE < 0\n");
        return StrobeDrv::FLASHLIGHT_NONE;
    }

    DRV_DBG("[getFlashlightType] m_flashType=%d\n",m_flashType);
    err = ioctl(m_fdSTROBE,FLASHLIGHTIOC_G_FLASHTYPE,&m_flashType);
    if (err < 0)
    {
        DRV_ERR("FLASHLIGHTIOC_G_FLASHTYPE error:%d\n",m_flashType);
        return StrobeDrv::FLASHLIGHT_NONE;;
    }
    return (StrobeDrv::FLASHLIGHT_TYPE_ENUM)m_flashType;
}
int FlashlightDrv::setState(unsigned long  a_state)
{
	DRV_DBG("setState line=%d",__LINE__);
    int err = 0;
    unsigned long strobeState = 0;

    if (m_fdSTROBE < 0)
    {
        DRV_DBG(" [setState] m_fdSTROBE < 0\n");
        return 0;
    }

    strobeState = (0 == a_state) ? (unsigned long)FLASHLIGHTDRV_STATE_PREVIEW : (unsigned long)FLASHLIGHTDRV_STATE_STILL;
    err = ioctl(m_fdSTROBE,FLASHLIGHTIOC_T_STATE,strobeState);
    if (err < 0)
    {
        DRV_ERR("FLASHLIGHTIOC_T_STATE error\n");
        return err;
    }

    return StrobeDrv::STROBE_NO_ERROR;
}
/*******************************************************************************
 Author : Cotta
 Functionality : set value of sensor capture delay
********************************************************************************/
int FlashlightDrv::setCaptureDelay(unsigned int value)
{
	DRV_DBG("setCaptureDelay line=%d",__LINE__);
    int err = 0;

    if (m_fdSTROBE < 0)
    {
        DRV_DBG(" [setCaptureDelay] m_fdSTROBE < 0\n");
        return 0;
    }

    DRV_DBG(" [setCaptureDelay] set capture delay : %u\n",value);

    err = ioctl(m_fdSTROBE,FLASHLIGHTIOC_T_DELAY,value);
    if (err < 0)
    {
        DRV_ERR("FLASHLIGHTIOC_T_DELAY error : %u\n",value);
        return err;
    }

    return StrobeDrv::STROBE_NO_ERROR;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int FlashlightDrv::getFlashReg(int shift, unsigned short* a_reg)
{
	DRV_DBG("getFlashReg() shift = %d",shift);
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_DBG(" [getFlashReg] m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	/*
	if(shift==0)
		err = ioctl(m_fdSTROBE,FLASHLIGHT_GET_REG0,a_reg);
	else if(shift==1)
		err = ioctl(m_fdSTROBE,FLASHLIGHT_GET_REG1,a_reg);
	else
		err = ioctl(m_fdSTROBE,FLASHLIGHT_GET_REG2,a_reg);
		*/
	if (err < 0)
	{
	    DRV_ERR("getFlashReg() err=%d\n", err);
	}
	return err;
}
int FlashlightDrv::lowPowerDetectStart()
{
	int hasLPD;
	hasLowPowerDetect(&hasLPD);
	if(hasLPD==0)
		return 0;


	DRV_DBG("lowPowerDetectStart()");
	int err = 0;
	if (m_fdSTROBE < 0)
	{
	    DRV_DBG("lowPowerDetectStart() m_fdSTROBE < 0\n");
	    return StrobeDrv::STROBE_UNKNOWN_ERROR;
	}
	err = ioctl(m_fdSTROBE,FLASH_IOC_LOW_POWER_DETECT_START,0);
	if (err < 0)
	{
	    DRV_ERR("lowPowerDetectStart() err=%d\n", err);
	    return err;
	}
	return 0;
}
int FlashlightDrv::initTemp(unsigned long sensorDev)
{
	DRV_DBG("initTemp line=%d",__LINE__);
    int err = 0;
    unsigned long flashlightIdx = 0; //default dummy driver
    

    //MHAL_LOG("[halSTROBEInit]: %s \n\n", __TIME__);
    DRV_DBG("[initTemp] mUsers = %d\n", mUsers);
    Mutex::Autolock lock(mLock);
    if (mUsers > 0)
    {
    	int preSensorDev;
	    preSensorDev = m_sensorDev;
		m_sensorDev = sensorDev;	    
		if(preSensorDev==m_sensorDev)
	    {
	    		        
	    }
    	else
    	{
    		uninitNoLock();
    }
    }
    m_sensorDev = sensorDev;
    
    
    if (mUsers == 0)
    {
        if(sensorDev==0)
            sensorDev=e_CAMERA_MAIN_SENSOR;
        if (m_fdSTROBE == -1)
        {
        	 int ta;
        	 int tb;
        		ta = getMs();

            m_fdSTROBE = open(STROBE_DEV_NAME, O_RDWR);

            tb = getMs();



            DRV_DBG("[init] m_fdSTROBE = %d t=%d\n", m_fdSTROBE,tb-ta);

            if (m_fdSTROBE < 0)
            {
                DRV_ERR("error opening %s: %s", STROBE_DEV_NAME, strerror(errno));
                 return StrobeDrv::STROBE_UNKNOWN_ERROR;
            }

            //set flashlight driver
            DRV_DBG("[init] sensorDev = %ld\n", sensorDev);

            err = ioctl(m_fdSTROBE,FLASHLIGHTIOC_X_SET_DRIVER,sensorDev);
            if (err < 0)
            {
                DRV_ERR("FLASHLIGHTIOC_X_SET_DRIVER error\n");
                return err ;
            }
            m_isOn=0;
            m_duty=0;
    		m_step=0;
            m_preOnTime=-1;
        }
        android_atomic_inc(&mUsers);
        m_bTempInit=1;
    }

    return StrobeDrv::STROBE_NO_ERROR;
}
Example #17
0
int
LensDrv::init(unsigned int a_u4CurrSensorDev )
{

    char  cBuf[64];
	unsigned int a_u4CurrLensIdx;

	if(a_u4CurrSensorDev==MCU_DEV_MAIN)
    {	
    	a_u4CurrLensIdx=MCUDrv::m_u4CurrLensIdx_main;

    	sprintf(cBuf, "/dev/%s", MCUDrv::m_LensInitFunc_main[a_u4CurrLensIdx].LensDrvName);
        DRV_DBG("main lens init() [m_userCnt]%d  +\n", m_userCnt_main); 
		DRV_DBG("[main Lens Driver]%s\n", cBuf);
		
		Mutex::Autolock lock(mLock);
		
		if (m_userCnt_main == 0) {		 
			if (m_fdMCU_main == -1) {
				m_fdMCU_main = open(cBuf, O_RDWR);
				if (m_fdMCU_main < 0) {
					if (a_u4CurrLensIdx == 0)  {  // no error log for dummy lens
						return MCUDrv::MCU_NO_ERROR;
					}
					else  {
						DRV_ERR("main Lens error opening %s: %s", cBuf, strerror(errno)); 				   
						return MCUDrv::MCU_INVALID_DRIVER;
					}
				}
			}
		}
		m_userCnt_main++;  
        DRV_DBG("main lens init() [m_userCnt]%d [fdMCU_main]%d - \n", m_userCnt_main,m_fdMCU_main);
	}
	else if(a_u4CurrSensorDev==MCU_DEV_MAIN_2)
    {	
    	a_u4CurrLensIdx=MCUDrv::m_u4CurrLensIdx_main2;
    	sprintf(cBuf, "/dev/%s", MCUDrv::m_LensInitFunc_main2[a_u4CurrLensIdx].LensDrvName);
        DRV_DBG("main2 lens init() [m_userCnt]%d +\n", m_userCnt_main2); 
		DRV_DBG("[main2 Lens Driver]%s\n", cBuf);
		Mutex::Autolock lock(mLock);
		if (m_userCnt_main2 == 0) {		 
			if (m_fdMCU_main2 == -1) {
				m_fdMCU_main2 = open(cBuf, O_RDWR);
				if (m_fdMCU_main2 < 0) {
					if (a_u4CurrLensIdx == 0)  {  // no error log for dummy lens
						return MCUDrv::MCU_NO_ERROR;
					}
					else  {
						DRV_ERR("main2 Lens error opening %s: %s", cBuf, strerror(errno)); 				   
						return MCUDrv::MCU_INVALID_DRIVER;
					}
				}
			}
		}
		m_userCnt_main2++;  
        DRV_DBG("main2 lens init() [m_userCnt]%d [fdMCU_main2]%d - \n", m_userCnt_main2,m_fdMCU_main2);
	}
	else if(a_u4CurrSensorDev==MCU_DEV_SUB)
    {	
    	a_u4CurrLensIdx=MCUDrv::m_u4CurrLensIdx_sub;
    	sprintf(cBuf, "/dev/%s", MCUDrv::m_LensInitFunc_sub[a_u4CurrLensIdx].LensDrvName);
        DRV_DBG("sub lens init() [m_userCnt]%d +\n", m_userCnt_sub); 
	    DRV_DBG("[Lens Driver]%s\n", cBuf);
    Mutex::Autolock lock(mLock);

	    if (m_userCnt_sub == 0) {        
	        if (m_fdMCU_sub == -1) {
	            m_fdMCU_sub = open(cBuf, O_RDWR);
	            if (m_fdMCU_sub < 0) {
	                if (a_u4CurrLensIdx == 0)  {  // no error log for dummy lens
                    return MCUDrv::MCU_NO_ERROR;
                }
                else  {
                    DRV_ERR("error opening %s: %s", cBuf, strerror(errno));                    
                    return MCUDrv::MCU_INVALID_DRIVER;
                }
            }
        }
    }
    	m_userCnt_sub++;  
        DRV_DBG("sub lens init() [m_userCnt]%d [fdMCU_sub]%d - \n", m_userCnt_sub,m_fdMCU_sub);
	}
	else 
		return MCUDrv::MCU_INVALID_DRIVER;
	
   

    return MCUDrv::MCU_NO_ERROR;
}
Example #18
0
int
LensSensorDrv::init(unsigned int a_u4CurrSensorDev)
{
    DRV_DBG("[init()]\n"); 
    char  cBuf[64];
    unsigned int a_u4CurrLensIdx, a_userCnt;
    int a_fdMCU=0;
    int err = 0; 
    ACDK_SENSOR_FEATURECONTROL_STRUCT featureCtrl;
    MUINT16 FeaturePara = 0;
    MUINT32 FeatureParaLen = 0;

	if(a_u4CurrSensorDev==MCU_DEV_MAIN)
    {
		a_fdMCU   = m_fdMCU_main;
		a_userCnt = m_userCnt_main;
		a_u4CurrLensIdx=MCUDrv::m_u4CurrLensIdx_main;
	    sprintf(cBuf, "/dev/%s", MCUDrv::m_LensInitFunc_main[a_u4CurrLensIdx].LensDrvName);
	    DRV_DBG("[Main Lens Driver]%s\n", cBuf);
	}
	else if(a_u4CurrSensorDev==MCU_DEV_MAIN_2)
    {
		a_fdMCU   = m_fdMCU_main2;
		a_userCnt = m_userCnt_main2;
		a_u4CurrLensIdx=MCUDrv::m_u4CurrLensIdx_main2;
	    sprintf(cBuf, "/dev/%s", MCUDrv::m_LensInitFunc_main2[a_u4CurrLensIdx].LensDrvName);
	    DRV_DBG("[Main2 Lens Driver]%s\n", cBuf);

	}
	else if(a_u4CurrSensorDev==MCU_DEV_SUB)
    {
		a_fdMCU   = m_fdMCU_sub;
		a_userCnt = m_userCnt_sub;
		a_u4CurrLensIdx=MCUDrv::m_u4CurrLensIdx_sub;
	    sprintf(cBuf, "/dev/%s", MCUDrv::m_LensInitFunc_sub[a_u4CurrLensIdx].LensDrvName);
	    DRV_DBG("[Sub Lens Driver]%s\n", cBuf);
	}
	else return MCUDrv::MCU_INVALID_DRIVER;

    Mutex::Autolock lock(mLock);
    if (a_userCnt <= 0) {
        if (a_fdMCU == -1) {
            a_fdMCU = open(cBuf, O_RDWR);
            if (a_fdMCU < 0) 
			{
                DRV_ERR("error opening %s: %s", cBuf, strerror(errno));
                return MCUDrv::MCU_INVALID_DRIVER;
            }           
            featureCtrl.FeatureId = SENSOR_FEATURE_INITIALIZE_AF;
            featureCtrl.pFeaturePara = (MUINT8*)&FeaturePara;
            featureCtrl.pFeatureParaLen = &FeatureParaLen;
            err = ioctl(a_fdMCU, KDIMGSENSORIOC_X_FEATURECONCTROL , &featureCtrl);
            if (err < 0) {
                DRV_ERR("[initMCU] ioctl - SENSOR_FEATURE_INITIALIZE_AF, error %s",  strerror(errno));
            }            
        }
    }
    a_userCnt++;     

	if(a_u4CurrSensorDev==MCU_DEV_MAIN)       	m_userCnt_main = a_userCnt;
	else if(a_u4CurrSensorDev==MCU_DEV_MAIN_2) 	m_userCnt_main2 = a_userCnt;
	else if(a_u4CurrSensorDev==MCU_DEV_SUB) 	    m_userCnt_sub = a_userCnt;

    return err;
}