VOS_VOID MN_CAL_ReadCallDeflectionNvim( VOS_VOID ) { MN_CALL_NVIM_CALL_DEFLECTION_SUPPORT_FLG_STRU stCallDeflectionSupportFlg; MN_CALL_CUSTOM_CFG_INFO_STRU *pstCallDeflectionSupportFlg = VOS_NULL_PTR; stCallDeflectionSupportFlg.ucCallDeflectionSupportFlg = MN_CALL_NV_ITEM_DEACTIVE; pstCallDeflectionSupportFlg = MN_CALL_GetCustomCfgInfo(); if (NV_OK != NV_Read(en_NV_Item_NVIM_CALL_DEFLECTION_SUPPORT_FLG, &stCallDeflectionSupportFlg, sizeof(MN_CALL_NVIM_CALL_DEFLECTION_SUPPORT_FLG_STRU))) { MN_WARN_LOG("MN_CAL_ReadCallDeflectionNvim():WARNING: en_NV_Item_NVIM_CALL_DEFLECTION_SUPPORT_FLG Error"); return; } if ((MN_CALL_NV_ITEM_ACTIVE != stCallDeflectionSupportFlg.ucCallDeflectionSupportFlg) && (MN_CALL_NV_ITEM_DEACTIVE != stCallDeflectionSupportFlg.ucCallDeflectionSupportFlg)) { pstCallDeflectionSupportFlg->ucCallDeflectionSupportFlg = MN_CALL_NV_ITEM_DEACTIVE; MN_WARN_LOG("MN_CAL_ReadCallDeflectionNvim():WARNING: NV parameter Error"); return; } pstCallDeflectionSupportFlg->ucCallDeflectionSupportFlg = stCallDeflectionSupportFlg.ucCallDeflectionSupportFlg; return; }
VOS_VOID TAF_CALL_SetCcwaCtrlMode( TAF_CALL_CCWA_CTRL_MODE_ENUM_U8 enCcwaCtrlMode ) { MN_CALL_GetCustomCfgInfo()->enCcwaCtrlMode = enCcwaCtrlMode; return; }
VOS_VOID MN_CALL_ReadReportEccNumSupportNvim( VOS_VOID ) { MN_CALL_NVIM_REPORT_ECC_NUM_SUPPORT_FLG_STRU stCustomSetEcc; MN_CALL_CUSTOM_CFG_INFO_STRU *pstCustomCfg = VOS_NULL_PTR; VOS_UINT32 ulLength; ulLength = 0; PS_MEM_SET(&stCustomSetEcc, 0x00, sizeof(stCustomSetEcc)); pstCustomCfg = MN_CALL_GetCustomCfgInfo(); /* 先获取NV的长度 */ NV_GetLength(en_NV_Item_REPORT_ECC_NUM_SUPPORT_FLAG, &ulLength); if (ulLength > sizeof(MN_CALL_NVIM_REPORT_ECC_NUM_SUPPORT_FLG_STRU)) { MN_WARN_LOG("MN_CALL_ReadReportEccNumSupportNvim():WARNING: en_NV_Item_REPORT_ECC_NUM_SUPPORT_FLAG length Error"); pstCustomCfg->ucReportEccNumFlg = VOS_FALSE; return; } NV_GetLength(en_NV_Item_REPORT_ECC_NUM_SUPPORT_FLAG, &ulLength); if (ulLength > sizeof(MN_CALL_NVIM_REPORT_ECC_NUM_SUPPORT_FLG_STRU)) { return; } /* 如果NV读取失败,则设置为不激活 */ if (NV_OK != NV_Read(en_NV_Item_REPORT_ECC_NUM_SUPPORT_FLAG, &stCustomSetEcc, ulLength)) { MN_WARN_LOG("MN_CAL_ReadReportEccNumSupportNvim():WARNING: en_NV_Item_REPORT_ECC_NUM_SUPPORT_FLAG Error"); pstCustomCfg->ucReportEccNumFlg = VOS_FALSE; return; } /* NV激活则设置主动上报激活标志为VOS_TRUE */ if (MN_CALL_NV_ITEM_ACTIVE == stCustomSetEcc.ucReportEccNumFlg) { pstCustomCfg->ucReportEccNumFlg = VOS_TRUE; } else { pstCustomCfg->ucReportEccNumFlg = VOS_FALSE; } return; }
VOS_VOID MN_ProcUsimStatus( struct MsgCB * pstMsg ) { MNPH_USIM_STATUS_IND_STRU *pstUsimStatus; MN_CALL_CUSTOM_CFG_INFO_STRU *pstCustomCfgAddr; /* 获取特性控制NV地址 */ pstCustomCfgAddr = MN_CALL_GetCustomCfgInfo(); MN_MSG_SetSmsFileRefreshFlag(EF_SMS_SMSS_ID, VOS_TRUE); MN_MSG_SetSmsFileRefreshFlag(EF_SMS_SMS_ID, VOS_TRUE); MN_MSG_SetSmsFileRefreshFlag(EF_SMS_SMSP_ID, VOS_TRUE); MN_MSG_SetSmsFileRefreshFlag(EF_SMS_SMSR_ID, VOS_TRUE); pstUsimStatus = (MNPH_USIM_STATUS_IND_STRU *)pstMsg; MN_MSG_CfgDataInit(pstUsimStatus->enUsimStatus); #if ((FEATURE_ON == FEATURE_GCBS) || (FEATURE_ON == FEATURE_WCBS)) TAF_CBA_MsgProc(pstMsg); #endif if (MN_CALL_NV_ITEM_ACTIVE == pstCustomCfgAddr->ucAlsSupportFlg ) { MN_CALL_LineInfo(pstUsimStatus->enUsimStatus); } /* 在PID init读取呼叫重建nv的时候判断是否是测试卡,但可能由于时序问题导致判断结果错误, 因此在运行时再读调用一次读取NV的函数,在函数中判断是否是测试卡 */ MN_CALL_ReadCallRedialCfgNvim(); /* 在PID init读取ss重建nv的时候判断是否是测试卡,但可能由于时序问题usim未初始化结束调用usim接口 获取是否是测试卡返回不准导致判断结果错误,因此在运行时再读调用一次读取NV的函数, 在函数中判断是否是测试卡 */ TAF_SSA_ReadSsRetryCfgNvim(); }
VOS_VOID TAF_CALL_ReadCallNotSupportedCause(VOS_VOID) { MN_CALL_CUSTOM_CFG_INFO_STRU *pstCustomCfg = VOS_NULL_PTR; TAF_CALL_NVIM_CALL_NOT_SUPPORTED_CAUSE_STRU stVoiceCallNotSupportedCause; if (NV_OK != NV_Read(en_NV_Item_CALL_CallNotSupportedCause, &stVoiceCallNotSupportedCause, sizeof(stVoiceCallNotSupportedCause))) { stVoiceCallNotSupportedCause.ucVoiceCallNotSupportedCause = MN_CALL_USER_BUSY; stVoiceCallNotSupportedCause.ucVideoCallNotSupportedCause = MN_CALL_INCOMPATIBLE_DESTINATION; } pstCustomCfg = MN_CALL_GetCustomCfgInfo(); pstCustomCfg->ucVoiceCallNotSupportedCause = stVoiceCallNotSupportedCause.ucVoiceCallNotSupportedCause; pstCustomCfg->ucVideoCallNotSupportedCause = stVoiceCallNotSupportedCause.ucVideoCallNotSupportedCause; return; }
VOS_VOID MN_CAL_ReadAlsSupportNvim( VOS_VOID ) { MN_CALL_NVIM_ALS_SUPPORT_FLG_STRU stAlsSupportFlg; MN_CALL_CUSTOM_CFG_INFO_STRU *pstCustomCfg = VOS_NULL_PTR; VOS_UINT32 ulLength; ulLength = 0; stAlsSupportFlg.ucAlsSupportFlg = MN_CALL_NV_ITEM_DEACTIVE; pstCustomCfg = MN_CALL_GetCustomCfgInfo(); NV_GetLength(en_NV_Item_NVIM_ALS_SUPPORT_FLG, &ulLength); if (ulLength > sizeof(MN_CALL_NVIM_ALS_SUPPORT_FLG_STRU)) { return; } if (NV_OK != NV_Read(en_NV_Item_NVIM_ALS_SUPPORT_FLG, &stAlsSupportFlg, ulLength)) { MN_WARN_LOG("MN_CAL_ReadAlsSupportNvim():WARNING: en_NV_Item_NVIM_ALS_SUPPORT_FLG Error"); return; } if ((MN_CALL_NV_ITEM_ACTIVE != stAlsSupportFlg.ucAlsSupportFlg) && (MN_CALL_NV_ITEM_DEACTIVE != stAlsSupportFlg.ucAlsSupportFlg)) { pstCustomCfg->ucAlsSupportFlg = MN_CALL_NV_ITEM_DEACTIVE; MN_WARN_LOG("MN_CAL_ReadAlsSupportNvim():WARNING: NV parameter Error"); return; } pstCustomCfg->ucAlsSupportFlg = stAlsSupportFlg.ucAlsSupportFlg; return; }
VOS_VOID MN_CALL_ReadCallRedialCfgNvim( VOS_VOID ) { MN_CALL_REDIAL_CFG_STRU stCallRedialCfg; MN_CALL_CUSTOM_CFG_INFO_STRU *pstCustomCfg = VOS_NULL_PTR; VOS_UINT32 ulLength; ulLength = 0; pstCustomCfg = MN_CALL_GetCustomCfgInfo(); /* GCF测试,短信重发功能需要关闭 */ if (VOS_TRUE == NAS_USIMMAPI_IsTestCard()) { pstCustomCfg->stCallRedialCfg.ucIsCallRedialSupportFlg = VOS_FALSE; pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod = 0; pstCustomCfg->stCallRedialCfg.ulCallRedialInterval = 0; MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDIAL_PERIOD, pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod); MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDAIL_INTERVAL, pstCustomCfg->stCallRedialCfg.ulCallRedialInterval); return; } /* 先获取NV的长度 */ NV_GetLength(en_NV_Item_CS_Call_Redial_CFG, &ulLength); PS_MEM_SET(&stCallRedialCfg, 0x0, sizeof(MN_CALL_REDIAL_CFG_STRU)); if (ulLength > sizeof(MN_CALL_REDIAL_CFG_STRU)) { MN_WARN_LOG("MN_CALL_ReadCallRedialCfgNvim():WARNING: en_NV_Item_CS_Call_Redial_CFG length Error"); pstCustomCfg->stCallRedialCfg.ucIsCallRedialSupportFlg = VOS_FALSE; pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod = 0; pstCustomCfg->stCallRedialCfg.ulCallRedialInterval = 0; MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDIAL_PERIOD, pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod); MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDAIL_INTERVAL, pstCustomCfg->stCallRedialCfg.ulCallRedialInterval); return; } /* 如果NV读取失败,则设置为不激活 */ if (NV_OK != NV_Read(en_NV_Item_CS_Call_Redial_CFG, &stCallRedialCfg, sizeof(MN_CALL_REDIAL_CFG_STRU))) { MN_WARN_LOG("MN_CALL_ReadCallRedialCfgNvim():WARNING: en_NV_Item_CS_Call_Redial_CFG Error"); pstCustomCfg->stCallRedialCfg.ucIsCallRedialSupportFlg = VOS_FALSE; pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod = 0; pstCustomCfg->stCallRedialCfg.ulCallRedialInterval = 0; MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDIAL_PERIOD, pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod); MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDAIL_INTERVAL, pstCustomCfg->stCallRedialCfg.ulCallRedialInterval); return; } if (MN_CALL_NV_ITEM_ACTIVE == stCallRedialCfg.ucIsCallRedialSupportFlg) { pstCustomCfg->stCallRedialCfg.ucIsCallRedialSupportFlg = VOS_TRUE; /* nv中存的时长为秒,需要转换为毫秒 */ pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod = MN_CALL_ONE_THOUSAND_MILLISECOND * stCallRedialCfg.ulCallRedialPeriod; pstCustomCfg->stCallRedialCfg.ulCallRedialInterval = MN_CALL_ONE_THOUSAND_MILLISECOND * stCallRedialCfg.ulCallRedialInterval; } else { pstCustomCfg->stCallRedialCfg.ucIsCallRedialSupportFlg = VOS_FALSE; pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod = 0; pstCustomCfg->stCallRedialCfg.ulCallRedialInterval = 0; } MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDIAL_PERIOD, pstCustomCfg->stCallRedialCfg.ulCallRedialPeriod); MN_CALL_UpdateTimerPeriod(MN_CALL_TID_WAIT_CALL_REDAIL_INTERVAL, pstCustomCfg->stCallRedialCfg.ulCallRedialInterval); return; }
TAF_CALL_CCWA_CTRL_MODE_ENUM_U8 TAF_CALL_GetCcwaCtrlMode(VOS_VOID) { return MN_CALL_GetCustomCfgInfo()->enCcwaCtrlMode; }
TAF_CALL_REDIAL_CFG_STRU *MN_CALL_GetCallRedialCfg(VOS_VOID) { return &(MN_CALL_GetCustomCfgInfo()->stCallRedialCfgInfo.stCallRedialCfg); }
VOS_VOID MN_CALL_ProcMnccPrimMsg( const VOS_VOID *pMsg ) { MNCC_IND_PRIM_MSG_STRU *pstMnccMsg; MN_CALL_CUSTOM_CFG_INFO_STRU *pstCustomCfgAddr; /* 获取特性控制NV地址 */ pstCustomCfgAddr = MN_CALL_GetCustomCfgInfo(); pstMnccMsg = (MNCC_IND_PRIM_MSG_STRU*)pMsg; MN_NORM_LOG1("MN_CALL_ProcAppReqMsg: enPrimName:", pstMnccMsg->enPrimName); /* 根据消息中的原语名,将消息交给相应的MNCC原语处理函数处理 */ switch(pstMnccMsg->enPrimName) { case MNCC_SETUP_IND: /*PC回放导出全局变量使用*/ #ifndef __PS_WIN32_RECUR__ NAS_CALL_SndOutsideContextData(); #endif MN_CALL_ProcMnccSetupInd(pstMnccMsg); break; case MNCC_SETUP_CNF: MN_CALL_ProcMnccSetupCnf(pstMnccMsg); break; case MNCC_SETUP_COMPL_IND: MN_CALL_ProcMnccSetupComplInd(pstMnccMsg); break; case MNCC_CALL_PROC_IND: MN_CALL_ProcMnccCallProcInd(pstMnccMsg); break; case MNCC_ALERT_IND: MN_CALL_ProcMnccAlertInd(pstMnccMsg); break; case MNCC_DISC_IND: MN_CALL_ProcMnccDiscInd(pstMnccMsg); break; case MNCC_REL_IND: MN_CALL_ProcMnccRelInd(pstMnccMsg); break; case MNCC_REL_CNF: MN_CALL_ModifyCallId(pstMnccMsg); MN_CALL_ProcMnccRelCnf(pstMnccMsg); break; case MNCC_REJ_IND: MN_CALL_ProcMnccRejInd(pstMnccMsg); break; case MNCC_FACILITY_IND: MN_CALL_ProcMnccFacilityInd(pstMnccMsg); break; case MNCC_FACILITY_LOCAL_REJ: MN_CALL_ProcMnccFacilityLocalRej(pstMnccMsg); break; case MNCC_HOLD_CNF: MN_CALL_ProcMnccHoldCnf(pstMnccMsg); break; case MNCC_HOLD_REJ: MN_CALL_ProcMnccHoldRej(pstMnccMsg); break; case MNCC_RETRIEVE_CNF: MN_CALL_ProcMnccRetrieveCnf(pstMnccMsg); break; case MNCC_RETRIEVE_REJ: MN_CALL_ProcMnccRetrieveRej(pstMnccMsg); break; case MNCC_START_DTMF_CNF: TAF_CALL_RcvCcStartDtmfCnf(pstMnccMsg); break; case MNCC_START_DTMF_REJ: TAF_CALL_RcvCcStartDtmfRej(pstMnccMsg); break; case MNCC_STOP_DTMF_CNF: TAF_CALL_RcvCcStopDtmfCnf(pstMnccMsg); break; case MNCC_MODIFY_IND: /* in-call modification, CC暂不支持 */ break; case MNCC_MODIFY_CNF: /* in-call modification, CC暂不支持 */ break; case MNCC_MODIFY_REJ_IND: /* in-call modification, CC暂不支持 */ break; case MNCC_SYNC_IND: MN_CALL_ProcMnccSyncInd(pstMnccMsg); break; case MNCC_PROGRESS_IND: MN_CALL_ProcMnccProgressInd(pstMnccMsg); break; case MNCC_CC_EST_IND: /*如果控制CCBS的NV打开,则处理*/ if (MN_CALL_NV_ITEM_ACTIVE == pstCustomCfgAddr->ucCcbsSupportFlg) { MN_CALL_ProcMnccEstInd(pstMnccMsg); } break; case MNCC_RECALL_IND: /*如果控制CCBS的NV打开,则处理*/ if (MN_CALL_NV_ITEM_ACTIVE == pstCustomCfgAddr->ucCcbsSupportFlg) { MN_CALL_ProcMnccRecallInd(pstMnccMsg); } break; case MNCC_UUSINFO_IND: MN_CALL_ProcUusInfoInd(pstMnccMsg); break; case MNCC_EMERGENCY_LIST_IND: MN_CALL_ProcEmergencyListInd(pstMnccMsg); break; #if (FEATURE_ON == FEATURE_IMS) case MNCC_SRVCC_STATUS_IND: TAF_CALL_ProcMnccSrvccStatusInd((MNCC_SRVCC_STATUS_IND_STRU*)&(pstMnccMsg->unParam.stSrvccStaInd)); break; #endif default: MN_WARN_LOG("MN_CALL_ProcAppReqMsg:Invalid Msg Name"); break; } }