#include "xm_type.h" #include "xm_comm_isp.h" #include "xm_comm_sns.h" #include "xm_sns_ctrl.h" #include "mpi_isp.h" #include "mpi_ae.h" #include "mpi_awb.h" #include "xm_awb_comm.h" #include "xm_print.h" #include "XAx_cmos.h" #include "xm530_isp.h" XM_U16 gu16FullLines = 750; XM_U32 gu32MaxAGainInit; XM_U8 gu8Fps; XM_U8 gu8MaxShutterOfst = 4; XM_SENSOR_CHIP gSensorChip = SENSOR_CHIP_UNKNOW; XM_U8 gu8Resolution = 1<stGamma.bValid = XM_TRUE; ExtCfg_GammaTab_Get(0, pstDef->stGamma.au16Gamma); pstDef->stGamma.bValid = XM_TRUE; XM_MPI_ISP_Memncpy((XM_U8 *)&(pstDef->stGamma),(XM_U8 *)&(gstIspGamma),sizeof(ISP_CMOS_GAMMA_S)); XM_MPI_ISP_Memncpy((XM_U8*)&(pstDef->stAgcTbl), (XM_U8*)pstAgcTab, sizeof(ISP_CMOS_AGC_TABLE_S)); return 0; } static XM_S32 cmos_get_ae_default(AE_SENSOR_DEFAULT_S *pstAeSnsDft) { AE_SENSOR_DEFAULT_V2_S stAeSnsDef; XM_S32 s32Ret; if (XM_NULL == pstAeSnsDft) { return -1; } pstAeSnsDft->u32FullLinesStd = HD720P_LINES-4; pstAeSnsDft->u8AeCompensation = 50; pstAeSnsDft->u32LinesPer500ms = pstAeSnsDft->u32FullLinesStd*25/2; pstAeSnsDft->u32FlickerFreq = 0; pstAeSnsDft->u32ISPDgainShift = 8; pstAeSnsDft->u32MinISPDgain = 1 << pstAeSnsDft->u32ISPDgainShift; pstAeSnsDft->u32InitExp[0] = 750; pstAeSnsDft->u32InitExp[1] = 750; pstAeSnsDft->u32InitExp[2] = 750; pstAeSnsDft->u32InitExp[3] = 750; pstAeSnsDft->u16AlgMode = 0x00; pstAeSnsDft->u32UpdateCfg = 0x01000003; if(ExtCfg_CheckFun(1, ROM_FUN_AEDEF) == XM_SUCCESS) { stAeSnsDef.u32MaxIntTime = 700; cmos_get_ae_default_ext(&stAeSnsDef); pstAeSnsDef = (const AE_SENSOR_DEFAULT_V2_S *)&stAeSnsDef; s32Ret = ExtCfg_Lum_Get(); if(s32Ret!= XM_FAILURE) pstAeSnsDft->u8AeCompensation = (XM_U8)s32Ret; } if(pstAeSnsDef != NULL) { pstAeSnsDft->u32MaxIntTime = pstAeSnsDef->u32MaxIntTime; pstAeSnsDft->u32MinIntTime = pstAeSnsDef->u32MinIntTime; pstAeSnsDft->u32MaxAgain = pstAeSnsDef->u32MaxAgain; pstAeSnsDft->u32MinAgain = pstAeSnsDef->u32MinAgain; pstAeSnsDft->u32MaxDgain = pstAeSnsDef->u32MaxDgain; pstAeSnsDft->u32MinDgain = pstAeSnsDef->u32MinDgain; pstAeSnsDft->u32MaxISPDgain= pstAeSnsDef->u32MaxISPDgain; pstAeSnsDft->u32UpdateCfg = pstAeSnsDef->u32UpdateCfg; pstAeSnsDft->u32InitExp[0] = pstAeSnsDef->u32InitExp[0]; pstAeSnsDft->u32InitExp[1] = pstAeSnsDef->u32InitExp[1]; pstAeSnsDft->u32InitExp[2] = pstAeSnsDef->u32InitExp[2]; pstAeSnsDft->u32InitExp[3] = pstAeSnsDef->u32InitExp[3]; pstAeSnsDft->u16AlgMode = pstAeSnsDef->u16AlgMode; } gu32MaxAGainInit = pstAeSnsDef->u32MaxAgain; return 0; } #if 0 XM_S32 cmos_set_gainMode_data(XM_U8 u8Mode, GAIN_MODE_DT *pstGainDt) { XM_U32 u32Len; u32Len = sizeof(GAIN_MODE_DT); XM_MPI_ISP_Memncpy((XM_U8*)&gstGainModeDt,(XM_U8*)pstGainDt, u32Len); #ifdef DEBUG_ON // 调试用 switch(u8Mode) { case SMS_LINE: case SOI_TAB: DEBUG("cmos_set_gainMode_data(Line):\n"); PrintInt(8,(XM_U32)gstGainModeDt.stLinear.u8AgainSft); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stLinear.u8AgainMin); DBG("\r\n"); break; case SMS_TAB: case SMS_TAB1: case SMS_TAB2: case SMS_TAB3: DEBUG("cmos_set_gainMode_data(SmsTab):\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u8En); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u8MinGain); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u16Reg[0]); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitUp); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitDn); DBG("\r\n"); break; case OV_TAB: case OV_LINE: DEBUG("cmos_set_gainMode_data(OV):\n"); PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Hold); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Again); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Dgain); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Blc); DBG("\r\n"); break; case PS_LINE: DEBUG("cmos_set_gainMode_data(PS):\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u8En); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u16Reg[0]); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u16Reg[1]); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitUp); DBG("\r\n"); PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitDn); DBG("\r\n"); break; default: DEBUG("cmos_set_gainMode_data: NotSupport\n"); break; } DEBUG("cmos_set_gainMode_data over!\n"); #endif return XM_SUCCESS; } #endif XM_S32 cmos_set_sns_attr(ISP_CMOS_SNS_ATTR_S *pstSnsAttr) { if(pstSnsAttr == NULL) { ERR("cmos_set_sns_attr failed!\n"); return XM_FAILURE; } XM_MPI_ISP_Memncpy((XM_U8*)&gstSnsAttr, (XM_U8*)pstSnsAttr, sizeof(ISP_CMOS_SNS_ATTR_S)); return XM_SUCCESS; } XM_S32 cmos_get_sns_attr(ISP_CMOS_SNS_ATTR_S *pstSnsAttr) { if(pstSnsAttr == NULL) { ERR("cmos_get_sns_attr failed!\n"); return XM_FAILURE; } XM_MPI_ISP_Memncpy((XM_U8*)pstSnsAttr, (XM_U8*)&gstSnsAttr, sizeof(ISP_CMOS_SNS_ATTR_S)); return XM_SUCCESS; } XM_VOID cmos_gain_calc_table_com(XM_U32 u32InTimes,AE_SENSOR_GAININFO_S *pstAeSnsGainInfo) { if(XM_NULL == pstAeSnsGainInfo) { return; } pstAeSnsGainInfo->u32GainDb = u32InTimes; pstAeSnsGainInfo->u32SnsTimes = u32InTimes; return; } static XM_S32 cmos_get_awb_default(AWB_SENSOR_DEFAULT_S *pstAwbSnsDft) { const AWB_COEF_TABLE_S* pstAwb; if (XM_NULL == pstAwbSnsDft) { return XM_FAILURE; } pstAwb = (AWB_COEF_TABLE_S*)pstAwbCal; // Awb pstAwbSnsDft->pstRbTable = pstAwb; // CCM if(ExtCfg_CCM_Set(&(pstAwbSnsDft->stCcm)) != XM_SUCCESS) { XM_MPI_ISP_Memncpy((XM_U8*)&(pstAwbSnsDft->stCcm), (XM_U8*)pstCcm, sizeof(ISP_COLORMATRIX_AUTO_S)); } return XM_SUCCESS; } /**************************************************************************** * callback structure * ****************************************************************************/ static XM_S32 cmos_init_sensor_exp_function(ISP_SENSOR_EXP_FUNC_S *pstSensorExpFunc) { pstSensorExpFunc->pfn_cmos_sensor_init = NULL; pstSensorExpFunc->pfn_cmos_get_isp_default = cmos_get_isp_default; pstSensorExpFunc->pfn_cmos_set_pixel_detect = NULL; pstSensorExpFunc->pfn_cmos_get_sensor_max_resolution = NULL; pstSensorExpFunc->pfn_cmos_set_mirror_flip = NULL; return 0; } static XM_S32 cmos_init_ae_exp_function(AE_SENSOR_EXP_FUNC_S *pstExpFuncs) { pstExpFuncs->pfn_cmos_get_ae_default = cmos_get_ae_default; pstExpFuncs->pfn_cmos_fps_get = NULL; pstExpFuncs->pfn_cmos_fps_set = NULL; pstExpFuncs->pfn_cmos_slow_framerate_set= NULL; pstExpFuncs->pfn_cmos_inttime_update = NULL; pstExpFuncs->pfn_cmos_gains_update = NULL; pstExpFuncs->pfn_cmos_again_calc_table = NULL; pstExpFuncs->pfn_cmos_dgain_calc_table = NULL; return 0; } static XM_S32 cmos_init_awb_exp_function(AWB_SENSOR_EXP_FUNC_S *pstExpFuncs) { pstExpFuncs->pfn_cmos_get_awb_default = cmos_get_awb_default; return 0; } void sensor_init() { XM_U32 u32Addr; XM_U16 u16Num; if(pfn_sensor_getlist == NULL) return; u32Addr = (*pfn_sensor_getlist)(&u16Num); if((gSnsRegAddrByte == 2) || (gSnsRegDataByte == 2)) sensor_input_2(u32Addr,u16Num); else sensor_input_1(u32Addr,u16Num); DEBUG("sensor_init Ok!\n"); } int sensor_register_callback(ISP_DEV IspDev) { XM_S32 s32Ret; ALG_LIB_S stLib; ISP_SENSOR_REGISTER_S stIspRegister; AE_SENSOR_REGISTER_S stAeRegister; AWB_SENSOR_REGISTER_S stAwbRegister; IspDev = (IspDev<0)?0:((IspDev>(ISP_NUM_MAX-1))?(ISP_NUM_MAX-1):IspDev); gu32AGainNow = 0; gu32AGainMin = 0; gu32DGainNow = 0; gu32DGainMin = 0; gu8BlcDpcFlg = 0; pstAwbCal = NULL; pstCcm = NULL; pstAgcTab = NULL; pstAeSnsDef = NULL; cmos_init_sensor_exp_function(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function(&(stAwbRegister.stSnsExp)); switch(gSensorChip) { #ifdef SENS_X1X_SOIH65 case SENSOR_CHIP_H65: cmos_init_sensor_exp_function_soi(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_soi(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_h65; pstCcm = &g_stAwbCcm_h65; pstAgcTab = &g_stIspAgcTable_h65; pstAeSnsDef = &gstAeSnsDef_h65; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_h65; #endif break; #endif #ifdef SENS_X1X_SP140A case SENSOR_CHIP_SP140A: cmos_init_sensor_exp_function_sp140A(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sp140A(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_sp140A; pstCcm = &g_stAwbCcm_sp140A; pstAgcTab = &g_stIspAgcTable_sp140A; pstAeSnsDef = &gstAeSnsDef_sp140A; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sp140A; #endif break; #endif #ifdef SENS_X1X_SOIH62 case SENSOR_CHIP_H62: cmos_init_sensor_exp_function_h62(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_h62(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_h62; pstCcm = &g_stAwbCcm_h62; pstAgcTab = &g_stIspAgcTable_h62; pstAeSnsDef = &gstAeSnsDef_h62; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_h62; #endif break; #endif #ifdef SENS_X1X_OV9732 case SENSOR_CHIP_OV9732: cmos_init_sensor_exp_function_OV9732(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_OV9732(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_OV9732; pstCcm = &g_stAwbCcm_OV9732; pstAgcTab = &g_stIspAgcTable_OV9732; pstAeSnsDef = &gstAeSnsDef_OV9732; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_OV9732; #endif break; #endif #ifdef SENS_X1X_SC1235 case SENSOR_CHIP_SC1235: cmos_init_sensor_exp_function_sc2235(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc1235(&(stAeRegister.stSnsExp)); pfn_gainLogic = gainLogic_sc1235; pfn_shutLogic = shutLogic_sc2235; #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_sc1235; pstCcm = &g_stAwbCcm_sc1235; pstAgcTab = &g_stIspAgcTable_sc1235; pstAeSnsDef = &gstAeSnsDef_sc1235; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc1235; #endif break; #endif #ifdef SENS_X1X_SC2145H case SENSOR_CHIP_SC2145H: cmos_init_sensor_exp_function_sc2145H(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc2145H(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) if(gu16SensorSwitch==2) { pstAwbCal = &gstAwbCal_sc2145H_A; } else { pstAwbCal = &gstAwbCal_sc2145H_B; } pstCcm = &g_stAwbCcm_sc2145H; pstAgcTab = &g_stIspAgcTable_sc2145H; pstAeSnsDef = &gstAeSnsDef_sc2235; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc2145H; #endif break; #endif #ifdef SENS_X20_IMX323 case SENSOR_CHIP_IMX323: cmos_init_sensor_exp_function_imx323(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_imx323(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_imx323; pstCcm = &g_stAwbCcm_imx323; pstAgcTab = &g_stIspAgcTable_imx323; pstAeSnsDef = &gstAeSnsDef_imx323; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_imx323; #endif break; #endif #ifdef SENS_X20_IMX307 case SENSOR_CHIP_IMX307: cmos_init_sensor_exp_function_imx307(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_imx307(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_imx307; pstCcm = &g_stAwbCcm_imx307; pstAgcTab = &g_stIspAgcTable_imx307; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_imx307; #endif break; #endif #ifdef SENS_X20_F37 case SENSOR_CHIP_F37: cmos_init_sensor_exp_function_F37(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_F37(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_F37; pstCcm = &g_stAwbCcm_F37; pstAgcTab = &g_stIspAgcTable_F37; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_F37; #endif break; #endif #ifdef SENS_X20_SC2335 case SENSOR_CHIP_SC2335: cmos_init_sensor_exp_function_sc2335(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc2335(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function_sc2335(&(stAwbRegister.stSnsExp)); gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc2335; break; #endif #ifdef SENS_X20_SP2305 case SENSOR_CHIP_SP2305: cmos_init_sensor_exp_function_SP2305(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_SP2305(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_SP2305; pstCcm = &g_stAwbCcm_SP2305; pstAgcTab = &g_stIspAgcTable_SP2305; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_SP2305; #endif break; #endif #ifdef SENS_X20_MIS2003 case SENSOR_CHIP_MIS2003: cmos_init_sensor_exp_function_MIS2003(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_MIS2003(&(stAeRegister.stSnsExp)); #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_MIS2003; pstCcm = &g_stAwbCcm_MIS2003; pstAgcTab = &g_stIspAgcTable_MIS2003; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_MIS2003; #endif break; #endif #ifdef SENS_X20_SC2235 case SENSOR_CHIP_SC2235: cmos_init_sensor_exp_function_sc2235(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc2235(&(stAeRegister.stSnsExp)); pfn_gainLogic = gainLogic_sc2235; pfn_shutLogic = shutLogic_sc2235; #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_sc2235; pstCcm = &g_stAwbCcm_sc2235; pstAgcTab = &g_stIspAgcTable_sc2235; pstAeSnsDef = &gstAeSnsDef_sc2235; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc2235; #endif break; #endif #ifdef SENS_X20_SC2235P case SENSOR_CHIP_SC2235P: cmos_init_sensor_exp_function_sc2235P(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc2235P(&(stAeRegister.stSnsExp)); pfn_gainLogic = gainLogic_sc2235P; pfn_shutLogic = shutLogic_sc2235; #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_sc2235P; pstCcm = &g_stAwbCcm_sc2235P; pstAgcTab = &g_stIspAgcTable_sc2235P; pstAeSnsDef = &gstAeSnsDef_sc2235p; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc2235P; #endif break; #endif #ifdef SENS_X20_SC307E case SENSOR_CHIP_SC307E: cmos_init_sensor_exp_function_sc307e(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc307e(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function_sc307e(&(stAwbRegister.stSnsExp)); gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc307e; break; #endif #ifdef SENS_X20_SC2235E case SENSOR_CHIP_SC2235E: cmos_init_sensor_exp_function_sc2235E(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc2235E(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function_sc2235E(&(stAwbRegister.stSnsExp)); gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc2235E; break; #endif #ifdef SENS_X20_SC2145 case SENSOR_CHIP_SC2145: cmos_init_sensor_exp_function_sc2145(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc2145(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function_sc2145(&(stAwbRegister.stSnsExp)); gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc2145; break; #endif #ifdef SENS_X20_SC3035 case SENSOR_CHIP_SC3035: cmos_init_sensor_exp_function_sc3035(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc3035(&(stAeRegister.stSnsExp)); break; #endif #ifdef SENS_X30_SC4236 case SENSOR_CHIP_SC4236: cmos_init_sensor_exp_function_sc4236(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc4236(&(stAeRegister.stSnsExp)); pfn_gainLogic = gainLogic_sc4236; pfn_shutLogic = shutLogic_sc4236; #if(defined SOC_SYSTEM) || (defined SOC_ALIOS) pstAwbCal = &gstAwbCal_sc4236; pstCcm = &g_stAwbCcm_sc4236; pstAgcTab = &g_stIspAgcTable_sc4236; pstAeSnsDef = &gstAeSnsDef_sc4236; gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_sc4236; #endif break; #endif #ifdef SENS_X30_AUGE case SENSOR_CHIP_AUGE: cmos_init_sensor_exp_function_auge(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_auge(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function_auge(&(stAwbRegister.stSnsExp)); gu8MaxShutterOfst = 4; pfn_sensor_getlist = sensor_getlist_auge; break; #endif #ifdef SENS_X30_SC3035 case SENSOR_CHIP_SC3035: cmos_init_sensor_exp_function_sc3035(&(stIspRegister.stSnsExp)); cmos_init_ae_exp_function_sc3035(&(stAeRegister.stSnsExp)); cmos_init_awb_exp_function_sc3035(&(stAwbRegister.stSnsExp)); pfn_sensor_getlist = sensor_getlist_sc3035; gu8MaxShutterOfst = 4; break; #endif default: #ifdef DEBUG_ON ERR("Not Support this sensor!\n"); #endif return XM_FAILURE; break; } if(ExtCfg_CheckFun(1, ROM_FUN_SNSINIT) == XM_SUCCESS) stIspRegister.stSnsExp.pfn_cmos_sensor_init = sensor_init_ext; else stIspRegister.stSnsExp.pfn_cmos_sensor_init = sensor_init; if(ExtCfg_CheckFun(1, ROM_FUN_FPS) == XM_SUCCESS) stAeRegister.stSnsExp.pfn_cmos_fps_set = cmos_fps_set_ex; if(ExtCfg_CheckFun(1, ROM_FUN_MF) == XM_SUCCESS) stIspRegister.stSnsExp.pfn_cmos_set_mirror_flip = cmos_set_mirror_flip_ex; if(ExtCfg_CheckFun(1, ROM_FUN_TABAGAIN) == XM_SUCCESS) stAeRegister.stSnsExp.pfn_cmos_again_calc_table = cmos_again_calc_table_ex; if(ExtCfg_CheckFun(1, ROM_FUN_TABDGAIN) == XM_SUCCESS) stAeRegister.stSnsExp.pfn_cmos_dgain_calc_table = cmos_dgain_calc_table_ex; #if 0 if(ExtCfg_CheckFun(1, ROM_FUN_UPDATEGAIN) == XM_SUCCESS) stAeRegister.stSnsExp.pfn_cmos_gains_update = cmos_gains_update_ex; if(ExtCfg_CheckFun(1, ROM_FUN_UPDATESHUT) == XM_SUCCESS) stAeRegister.stSnsExp.pfn_cmos_inttime_update = cmos_inttime_update_ex; #endif if(ExtCfg_CheckFun(1, ROM_FUN_GAINLOGIC) == XM_SUCCESS) pfn_gainLogic = gainLogic_ex; if(ExtCfg_CheckFun(1, ROM_FUN_SHUTLOGIC) == XM_SUCCESS) pfn_shutLogic = shutLogic_ex; if(ExtCfg_GetExtCfgFlg() && (stIspRegister.stSnsExp.pfn_cmos_sensor_init)) { stIspRegister.stSnsExp.pfn_cmos_sensor_init(); } s32Ret = XM_MPI_ISP_SensorRegCallBack((XM_S32)gSensorChip, (const ISP_SENSOR_REGISTER_S * const)&stIspRegister); if (s32Ret) { return s32Ret; } stLib.s32Id = (XM_S32)gSensorChip; XM_MPI_ISP_Memncpy((XM_U8*)stLib.acLibName, (XM_U8*)XM_AE_LIB_NAME, sizeof(XM_AE_LIB_NAME)); s32Ret = XM_MPI_AE_SensorRegCallBack(IspDev, &stLib, (XM_S32)gSensorChip, &stAeRegister); if (s32Ret) { return s32Ret; } stLib.s32Id = (XM_S32)gSensorChip; XM_MPI_ISP_Memncpy((XM_U8*)stLib.acLibName, (XM_U8*)XM_AWB_LIB_NAME, sizeof(XM_AWB_LIB_NAME)); s32Ret = XM_MPI_AWB_SensorRegCallBack(&stLib, (XM_S32)gSensorChip, &stAwbRegister); if (s32Ret) { return s32Ret; } return 0; } int sensor_unregister_callback(ISP_DEV IspDev) { XM_S32 s32Ret; ALG_LIB_S stLib; IspDev = (IspDev<0)?0:((IspDev>(ISP_NUM_MAX-1))?(ISP_NUM_MAX-1):IspDev); s32Ret = XM_MPI_ISP_SensorUnRegCallBack((XM_S32)gSensorChip); if (s32Ret) { return s32Ret; } stLib.s32Id = (XM_S32)gSensorChip; s32Ret = XM_MPI_AE_SensorUnRegCallBack(IspDev, &stLib, (XM_S32)gSensorChip); if (s32Ret) { return s32Ret; } return 0; } int sensor_mode_set(XM_U8 u8Mode) { return 0; } int sensor_mode_get() { int s32RsFlg = 1<dev_addr = gSnsDevAddr; pstI2CData->addr_byte_num = gSnsRegAddrByte; pstI2CData->data_byte_num = gSnsRegDataByte; return gSensorChip; } int sensor_get_chip(I2C_DATA_S *pstI2CData) { XM_U32 u32Addr; XM_U8 u8i; XM_U8 au8Data[4]; // 1. 获取I2C 地址 if(ExtCfg_BaseAddrGet(0, ROM_FUN_SNSI2C, &u32Addr) == XM_SUCCESS) { for(u8i=0;u8i<3;u8i++) { ExtCfg_Read_V2(1,u32Addr+u8i, &au8Data[u8i]); } gSnsDevAddr = au8Data[0]; gSnsRegAddrByte = (au8Data[1]>>4)&0x0F; gSnsRegDataByte = au8Data[1]&0x0F; gSensorChip = au8Data[2]; } else { sensor_get_chip_in(pstI2CData); } pstI2CData->dev_addr = gSnsDevAddr; pstI2CData->addr_byte_num = gSnsRegAddrByte; pstI2CData->data_byte_num = gSnsRegDataByte; #ifdef DEBUG_ON DEBUG("sensor_get_chip:\n"); PrintHex(8, gSnsDevAddr); DBG(" "); PrintHex(8, gSnsRegAddrByte);DBG(" "); PrintHex(8, gSnsRegDataByte);DBG(" "); PrintHex(8, gSensorChip); DBG("\r\n"); #endif return gSensorChip; } void sensor_set_chip(XM_S32 s32SnsChip) { gSensorChip = s32SnsChip; } XM_U16 gu16ObTemp = 0; int sensor_get_temp(XM_S16 *ps16Temp) { if(ps16Temp == NULL) return XM_FAILURE; *ps16Temp = gu16ObTemp; return XM_SUCCESS; } void sensor_set_dnMode(XM_U8 u8Mode) { ; } int sensor_set_encoderinfo(XM_U8 *u8pDta) { if(u8pDta == NULL) return XM_FAILURE; gAppEncoderinfo = *u8pDta; return XM_SUCCESS; } void sensor_set_fps(XM_U8 channel , XM_U8 frame) { return; } //u8Mode: 0:Normal 1:XM AHD 2: CVBS void sensor_set_isp_para(XM_U8 u8Mode) { return; } XM_S32 sensor_set_reslotionType(PROFILE enResType) { return XM_SUCCESS; } /************************************************************************************* 输入参数: u8Mode(0:Stop 1:Restart) *************************************************************************************/ void sensor_restart(XM_U8 u8Mode) { XM_MPI_ISP_SetVsyncIntEn(0,0); switch(gSensorChip) { #ifdef SENS_X20_SC2235P case SENSOR_CHIP_SC2235P: if(u8Mode != 1) { sensor_write_register(0x0103,0x01); sensor_write_register(0x0100,0x00); DEBUG("SC2235P stop stream!\n"); } break; #endif default: break; } XM_MPI_ISP_SetVsyncIntEn(0,2); }