示例#1
0
int nvGetFlickerPara(MUINT32 SensorId, int SensorMode, void* buf)
{
	NVRAM_DRV_LOG("nvGetFlickerPara id=%d mode=%d", SensorId, SensorMode);
	int err;
	err = msdkGetFlickerPara(SensorId, SensorMode, buf);
	if(err!=0)
		NVRAM_DRV_LOG("nvGetFlickerPara error:=%d", err);
	return err;
}
int
NvramDrv::writeNvram(
    CAMERA_DUAL_CAMERA_SENSOR_ENUM a_eSensorType,
    unsigned long a_u4SensorID,
    CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
	void *a_pNvramData,
	unsigned long a_u4NvramDataSize
)
{
    int err = NVRAM_NO_ERROR;

    NVRAM_DRV_LOG("[writeNvram] sensor type = %d; NVRAM data type = %d\n", a_eSensorType, a_eNvramDataType);

	if ((a_eSensorType > DUAL_CAMERA_MAIN_SECOND_SENSOR) ||
		(a_eSensorType < DUAL_CAMERA_MAIN_SENSOR) ||
		(a_eNvramDataType > CAMERA_NVRAM_DATA_LENS && (a_eNvramDataType!=CAMERA_NVRAM_DATA_STROBE)) ||
		(a_eNvramDataType < CAMERA_NVRAM_DATA_ISP) ||
		(a_pNvramData == NULL) ||
		(a_u4NvramDataSize != g_u4NvramDataSize[a_eNvramDataType])) {
        return NVRAM_WRITE_PARAMETER_ERROR;
    }

    Mutex::Autolock lock(mLock);

    err = writeNvramData(a_eSensorType, a_eNvramDataType, a_pNvramData);

    return err;
}
int
NvramDrv::writeNvramData(
	CAMERA_DUAL_CAMERA_SENSOR_ENUM a_eSensorType,
    CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
	void *a_pNvramData
)
{
	F_ID rNvramFileID;
	int i4FileInfo;
	int i4RecSize;
    int i4RecNum;

    NVRAM_DRV_LOG("[writeNvramData] sensor type = %d; NVRAM data type = %d\n", a_eSensorType, a_eNvramDataType);

	switch (a_eNvramDataType) {
	case CAMERA_NVRAM_DATA_ISP:
		i4FileInfo = AP_CFG_RDCL_CAMERA_PARA_LID;
		break;
	case CAMERA_NVRAM_DATA_3A:
		i4FileInfo = AP_CFG_RDCL_CAMERA_3A_LID;
		break;
	case CAMERA_NVRAM_DATA_SHADING:
		i4FileInfo = AP_CFG_RDCL_CAMERA_SHADING_LID;
		break;
	case CAMERA_NVRAM_DATA_LENS:
		i4FileInfo = AP_CFG_RDCL_CAMERA_LENS_LID;
		break;
	case CAMERA_NVRAM_DATA_STROBE:
		i4FileInfo = AP_CFG_RDCL_CAMERA_DEFECT_LID;
		break;
	default:
	    NVRAM_DRV_ERR("writeNvramData(): incorrect data type\n");
		return NVRAM_WRITE_PARAMETER_ERROR;
		break;
	}

#ifdef NVRAM_SUPPORT

    rNvramFileID = NVM_GetFileDesc(i4FileInfo, &i4RecSize, &i4RecNum, ISWRITE);
	if (rNvramFileID.iFileDesc == INVALID_HANDLE_VALUE) {
	    NVRAM_DRV_ERR("writeNvramData(): create NVRAM file fail\n");
		return NVRAM_CAMERA_FILE_ERROR;
	}

	if (a_eSensorType == DUAL_CAMERA_MAIN_SECOND_SENSOR) {
	    lseek(rNvramFileID.iFileDesc, i4RecSize, SEEK_SET);
	}

	if (a_eSensorType == DUAL_CAMERA_SUB_SENSOR) {
	    lseek(rNvramFileID.iFileDesc, i4RecSize*2, SEEK_SET);
	}

    write(rNvramFileID.iFileDesc, a_pNvramData, i4RecSize);

	NVM_CloseFileDesc(rNvramFileID);
#endif

    return NVRAM_NO_ERROR;
}
int
NvramDrv::readDefaultData(
	unsigned long a_u4SensorID,
    CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
	void *a_pNvramData
)
{

//    static bool bCustomInit = 0; //[ALPS00424402] [CCT6589] Len shading page --> Save to NVRAM --> CCT reboot failed
    NVRAM_DRV_LOG("[readDefaultData] sensor ID = %ld; NVRAM data type = %d\n", a_u4SensorID, a_eNvramDataType);

#ifdef NVRAM_SUPPORT

    if (!bCustomInit) {
        cameraCustomInit();
	    LensCustomInit();
		bCustomInit = 1;
	}

	switch (a_eNvramDataType) {
	case CAMERA_NVRAM_DATA_ISP:
		GetCameraDefaultPara(a_u4SensorID, (PNVRAM_CAMERA_ISP_PARAM_STRUCT)a_pNvramData,NULL,NULL,NULL);
		break;
	case CAMERA_NVRAM_DATA_3A:
		GetCameraDefaultPara(a_u4SensorID, NULL,(PNVRAM_CAMERA_3A_STRUCT)a_pNvramData,NULL,NULL);
		break;
	case CAMERA_NVRAM_DATA_SHADING:
		GetCameraDefaultPara(a_u4SensorID, NULL,NULL,(PNVRAM_CAMERA_SHADING_STRUCT)a_pNvramData,NULL);
		break;
	case CAMERA_NVRAM_DATA_LENS:
		GetLensDefaultPara((PNVRAM_LENS_PARA_STRUCT)a_pNvramData);
		{
			PNVRAM_LENS_PARA_STRUCT pLensNvramData = (PNVRAM_LENS_PARA_STRUCT)a_pNvramData;
			pLensNvramData->Version = NVRAM_CAMERA_LENS_FILE_VERSION;
		}
		break;
	case CAMERA_DATA_AE_PLINETABLE:
		GetCameraDefaultPara(a_u4SensorID, NULL,NULL,NULL,(PAE_PLINETABLE_STRUCT)a_pNvramData);
		break;

	case CAMERA_NVRAM_DATA_STROBE:
		int sz;
		int ret;
									//a_eSensorType
		//ret = getDefaultStrobeNVRam(1, a_pNvramData, &sz);
		ret = cust_getDefaultStrobeNVRam_V2(a_u4SensorID, a_pNvramData, &sz);
		break;
		break;
	default:
		break;
	}

#endif

    return NVRAM_NO_ERROR;
}
int
NvramDrv::checkDataVersion(
    CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
	void *a_pNvramData
)
{
    int err = NVRAM_NO_ERROR;

    NVRAM_DRV_LOG("[checkDataVersion]\n");

    if (a_eNvramDataType == CAMERA_NVRAM_DATA_ISP) { // ISP
        PNVRAM_CAMERA_ISP_PARAM_STRUCT pCameraNvramData = (PNVRAM_CAMERA_ISP_PARAM_STRUCT)a_pNvramData;

        NVRAM_DRV_LOG("[ISP] NVRAM data version = %d; F/W data version = %d\n", pCameraNvramData->Version, NVRAM_CAMERA_PARA_FILE_VERSION);

		if (pCameraNvramData->Version != NVRAM_CAMERA_PARA_FILE_VERSION) {
			err = NVRAM_DATA_VERSION_ERROR;
	    }
	}
	else if (a_eNvramDataType == CAMERA_NVRAM_DATA_3A) { // 3A
		PNVRAM_CAMERA_3A_STRUCT p3ANvramData = (PNVRAM_CAMERA_3A_STRUCT)a_pNvramData;

        NVRAM_DRV_LOG("[3A] NVRAM data version = %d; F/W data version = %d\n", p3ANvramData->u4Version, NVRAM_CAMERA_3A_FILE_VERSION);

		if (p3ANvramData->u4Version != NVRAM_CAMERA_3A_FILE_VERSION) {
			err = NVRAM_DATA_VERSION_ERROR;
	    }
	}
	else if (a_eNvramDataType == CAMERA_NVRAM_DATA_SHADING) { // Shading
		PNVRAM_CAMERA_SHADING_STRUCT pShadingNvramData = (PNVRAM_CAMERA_SHADING_STRUCT)a_pNvramData;

        NVRAM_DRV_LOG("[Shading] NVRAM data version = %d; F/W data version = %d\n", pShadingNvramData->Shading.Version, NVRAM_CAMERA_SHADING_FILE_VERSION);

		if (pShadingNvramData->Shading.Version != NVRAM_CAMERA_SHADING_FILE_VERSION) {
			err = NVRAM_DATA_VERSION_ERROR;
	    }
	}
    else if (a_eNvramDataType == CAMERA_NVRAM_DATA_LENS) { // Lens
		PNVRAM_LENS_PARA_STRUCT pLensNvramData = (PNVRAM_LENS_PARA_STRUCT)a_pNvramData;

        NVRAM_DRV_LOG("[Lens] NVRAM data version = %d; F/W data version = %d\n", pLensNvramData->Version, NVRAM_CAMERA_LENS_FILE_VERSION);

		if (pLensNvramData->Version != NVRAM_CAMERA_LENS_FILE_VERSION) {
			err = NVRAM_DATA_VERSION_ERROR;
		}
    }
    else if (a_eNvramDataType == CAMERA_NVRAM_DATA_STROBE) { // strobe
		PNVRAM_CAMERA_STROBE_STRUCT pStrobeNvramData = (PNVRAM_CAMERA_STROBE_STRUCT)a_pNvramData;
        NVRAM_DRV_LOG("[Strobe] NVRAM data version = %d; F/W data version = %d\n", pStrobeNvramData->u4Version, NVRAM_CAMERA_STROBE_FILE_VERSION);
		if (pStrobeNvramData->u4Version != NVRAM_CAMERA_STROBE_FILE_VERSION) {
			err = NVRAM_DATA_VERSION_ERROR;
		}
    }
    else {
		NVRAM_DRV_ERR("checkDataVersion(): incorrect data type\n");
}

    return err;
}
int
NvramDrv::readNvramData(
	CAMERA_DUAL_CAMERA_SENSOR_ENUM a_eSensorType,
    CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
	void *a_pNvramData
)
{
	F_ID rNvramFileID;
	int i4FileInfo;
	int i4RecSize;
    int i4RecNum;
//seanlin 121221 avoid camera has not inited>
//[ALPS00424402] [CCT6589] Len shading page --> Save to NVRAM --> CCT reboot failed
    if (!bCustomInit) {
        cameraCustomInit();
	    LensCustomInit();
		bCustomInit = 1;
	}
//[ALPS00424402] [CCT6589] Len shading page --> Save to NVRAM --> CCT reboot failed
//seanlin 121221 avoid camera has not inited<
    NVRAM_DRV_LOG("[readNvramData] sensor type = %d; NVRAM data type = %d\n", a_eSensorType, a_eNvramDataType);

	switch (a_eNvramDataType) {
	case CAMERA_NVRAM_DATA_ISP:
		i4FileInfo = AP_CFG_RDCL_CAMERA_PARA_LID;
		break;
	case CAMERA_NVRAM_DATA_3A:
		i4FileInfo = AP_CFG_RDCL_CAMERA_3A_LID;
		break;
	case CAMERA_NVRAM_DATA_SHADING:
		i4FileInfo = AP_CFG_RDCL_CAMERA_SHADING_LID;
		break;
	case CAMERA_NVRAM_DATA_LENS:
		i4FileInfo = AP_CFG_RDCL_CAMERA_LENS_LID;
		break;
	case CAMERA_NVRAM_DATA_STROBE:
		i4FileInfo = AP_CFG_RDCL_CAMERA_DEFECT_LID;
		break;
	default :
	    NVRAM_DRV_ERR("readNvramData(): incorrect data type\n");
		return NVRAM_READ_PARAMETER_ERROR;
		break;
	}

#ifdef NVRAM_SUPPORT

	rNvramFileID = NVM_GetFileDesc(i4FileInfo, &i4RecSize, &i4RecNum, ISREAD);
	if (rNvramFileID.iFileDesc == INVALID_HANDLE_VALUE) {
		NVRAM_DRV_ERR("readNvramData(): create NVRAM file fail\n");
		return NVRAM_CAMERA_FILE_ERROR;
	}

    if (a_eSensorType == DUAL_CAMERA_MAIN_SECOND_SENSOR) {
	    lseek(rNvramFileID.iFileDesc, i4RecSize, SEEK_SET);
	}

    if (a_eSensorType == DUAL_CAMERA_SUB_SENSOR) {
	    lseek(rNvramFileID.iFileDesc, i4RecSize*2, SEEK_SET);
	}

	read(rNvramFileID.iFileDesc, a_pNvramData, i4RecSize);

	NVM_CloseFileDesc(rNvramFileID);

#endif

    return NVRAM_NO_ERROR;
}
int
NvramDrv::readNvram(
    CAMERA_DUAL_CAMERA_SENSOR_ENUM a_eSensorType,
    unsigned long a_u4SensorID,
    CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
	void *a_pNvramData,
	unsigned long a_u4NvramDataSize
)
{
    int err = NVRAM_NO_ERROR;

    NVRAM_DRV_LOG("[readNvram] sensor type = %d; NVRAM data type = %d\n", a_eSensorType, a_eNvramDataType);

	if ((a_eSensorType > DUAL_CAMERA_MAIN_SECOND_SENSOR) ||
		(a_eSensorType < DUAL_CAMERA_MAIN_SENSOR) ||
		//(a_eNvramDataType > CAMERA_DATA_AE_PLINETABLE) ||
		(a_eNvramDataType >= CAMERA_DATA_TYPE_NUM) ||
		(a_eNvramDataType < CAMERA_NVRAM_DATA_ISP) ||
		(a_pNvramData == NULL) ||
		(a_u4NvramDataSize != g_u4NvramDataSize[a_eNvramDataType]))
	{
		NVRAM_DRV_LOG("[readNvram] error: line=%d",__LINE__);
        return NVRAM_READ_PARAMETER_ERROR;
    }



    Mutex::Autolock lock(mLock);

    switch(a_eNvramDataType) {
    case CAMERA_NVRAM_DATA_ISP:
    case CAMERA_NVRAM_DATA_3A:
    case CAMERA_NVRAM_DATA_SHADING:
	case CAMERA_NVRAM_DATA_LENS:
	case CAMERA_NVRAM_DATA_STROBE:
		err = readNvramData(a_eSensorType, a_eNvramDataType, a_pNvramData);
        if (err != NVRAM_NO_ERROR) {
		    NVRAM_DRV_ERR("readNvramData() error: ==> readDefaultData()\n");
			int para1;
		    if(a_eNvramDataType==CAMERA_NVRAM_DATA_STROBE)
		    	para1=a_eSensorType;
		    else
		    	para1=a_u4SensorID;
            err = readDefaultData(para1, a_eNvramDataType, a_pNvramData);
            if (err != NVRAM_NO_ERROR) {
		        NVRAM_DRV_ERR("readDefaultData() error:\n");
	        }
            break;
	    }

		if (checkDataVersion(a_eNvramDataType, a_pNvramData) != NVRAM_NO_ERROR) {
			int para1;
		    if(a_eNvramDataType==CAMERA_NVRAM_DATA_STROBE)
		    	para1=a_eSensorType;
		    else
		    	para1=a_u4SensorID;
			err = readDefaultData(para1, a_eNvramDataType, a_pNvramData);
			if (err != NVRAM_NO_ERROR) {
		        NVRAM_DRV_ERR("readDefaultData() error:\n");
	        }
		}
        break;
    case CAMERA_DATA_AE_PLINETABLE:
            err = readDefaultData(a_u4SensorID, a_eNvramDataType, a_pNvramData);
            if (err != NVRAM_NO_ERROR) {
		        NVRAM_DRV_ERR("readDefaultData() AE Pline table error:\n");
	     }
    	break;

    default:
        break;
    }

    return err;
}