VOS_UINT32 TAF_SPM_IsUsimServiceAvailable(VOS_VOID) { VOS_UINT32 ulRslt; /* 检查PIN状态 */ switch ( TAF_SDC_GetSimStatus() ) { case TAF_SDC_USIM_STATUS_ROMSIM: case TAF_SDC_USIM_STATUS_VALID: case TAF_SDC_USIM_STATUS_CS_UNVALID: /* 当PS业务无效时,在L下会disable LTE,因此此种场景下,后续允许被缓存 */ case TAF_SDC_USIM_STATUS_PS_UNVALID: ulRslt = VOS_TRUE; break; case TAF_SDC_USIM_STATUS_SIM_PIN: case TAF_SDC_USIM_STATUS_SIM_PUK: case TAF_SDC_USIM_STATUS_NET_LCOK: case TAF_SDC_USIM_STATUS_IMSI_LCOK: case TAF_SDC_USIM_STATUS_UNVALID: case TAF_SDC_USIM_STATUS_NO_PRESENT: case TAF_SDC_USIM_STATUS_BUTT: case TAF_SDC_USIM_STATUS_CS_PS_UNVALID: case TAF_SDC_USIM_STATUS_READY_TIMEROUT: ulRslt = VOS_FALSE; break; default: ulRslt = VOS_FALSE; TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_SPM_GetStatusOfUsimServiceAvailable(): something wrong!"); break; } return ulRslt; }
VOS_UINT32 TAF_SPM_IsPhoneEmergencyNum( MN_CALL_CALLED_NUM_STRU *pstDialNum ) { VOS_UINT32 ulLoop; VOS_CHAR **pucEmcNumsNoUsim = VOS_NULL_PTR; VOS_CHAR **pucEmcNumsWithUsim = VOS_NULL_PTR; VOS_INT8 acCalledNum[MN_CALL_MAX_CALLED_ASCII_NUM_LEN + 1]; /* 号码转换 BCD-> Ascii */ if (MN_ERR_NO_ERROR != TAF_STD_ConvertBcdNumberToAscii(pstDialNum->aucBcdNum, pstDialNum->ucNumLen, (VOS_CHAR *)acCalledNum)) { MN_WARN_LOG("TAF_SPM_IsPhoneEmergencyNum: BCD -> Ascii ERROR."); return VOS_FALSE; } pucEmcNumsNoUsim = TAF_SDC_GetCallEmerNumsNoUsimTblAddr(); pucEmcNumsWithUsim = TAF_SDC_GetCallEmerNumsWithUsimTblAddr(); if (TAF_SDC_USIM_STATUS_NO_PRESENT == TAF_SDC_GetSimStatus()) { for (ulLoop = 0; ulLoop < TAF_SDC_NUMOF_EMER_NUMS_NO_USIM; ulLoop++) { if (0 == VOS_StrCmp(pucEmcNumsNoUsim[ulLoop], (VOS_CHAR *)acCalledNum)) { return VOS_TRUE; } } } else { /* 有卡时检查手机中存储的紧急呼叫号码 */ for (ulLoop = 0; ulLoop < TAF_SDC_NUMOF_EMER_NUMS_WITH_USIM; ulLoop++ ) { if (0 == VOS_StrCmp(pucEmcNumsWithUsim[ulLoop], (VOS_CHAR *)acCalledNum)) { return VOS_TRUE; } } } return VOS_FALSE; }
VOS_VOID MN_CALL_LineInfo( MNPH_USIM_STATUS_ENUM_U32 enUsimStatus ) { MN_CALL_ALS_LINE_INFO_STRU stAlsInfo; VOS_UINT8 aucMmaImsi[9]; VOS_BOOL bWriteNvim; VOS_UINT32 ulLength; VOS_UINT32 ulGetCardImsiRslt; ulGetCardImsiRslt = USIMM_API_RESULT_BUTT; ulLength = 0; stAlsInfo.enAlsLine = MN_CALL_ALS_LINE_NO_BUTT; PS_MEM_SET(stAlsInfo.aucMmaImsi, 0x00, sizeof(stAlsInfo.aucMmaImsi)); if ( MNPH_USIM_STATUS_AVILABLE == enUsimStatus ) { bWriteNvim = VOS_FALSE; if ( NV_OK != NV_Read(en_NV_Item_ALS_LINE_Config,&stAlsInfo,sizeof(stAlsInfo))) { return; } ulGetCardImsiRslt = NAS_USIMMAPI_GetCardIMSI(aucMmaImsi); if ( USIMM_API_SUCCESS != ulGetCardImsiRslt) { if (VOS_TRUE == TAF_SDC_IsImsiAvailableInCurrSimStatus(TAF_SDC_GetSimStatus())) { #if (FEATURE_ON == FEATURE_PTM) /* 记录获取卡IMSI异常log */ TAF_SDC_GetCardImsiFailRecord(ulGetCardImsiRslt, aucMmaImsi); #endif } return ; } /*线路号值不在取值范围内*/ if ( ( MN_CALL_ALS_LINE_NO_1 != stAlsInfo.enAlsLine ) && ( MN_CALL_ALS_LINE_NO_2 != stAlsInfo.enAlsLine ) ) { stAlsInfo.enAlsLine = MN_CALL_ALS_LINE_NO_1; bWriteNvim = VOS_TRUE; } /*判断NV中当前使用线路号对应的IMSI和SIM卡中IMSI是否相同,若不同则清NV 项,并填入默认线路号1*/ if ( 0 != VOS_StrCmp( (VOS_CHAR *)aucMmaImsi, (VOS_CHAR *)stAlsInfo.aucMmaImsi) ) { stAlsInfo.enAlsLine = MN_CALL_ALS_LINE_NO_1; PS_MEM_CPY(stAlsInfo.aucMmaImsi,aucMmaImsi,9); bWriteNvim = VOS_TRUE; } /*需要更新NVIM*/ if ( VOS_TRUE == bWriteNvim ) { (VOS_VOID)NV_GetLength(en_NV_Item_ALS_LINE_Config, &ulLength); if (NV_OK != NV_Write(en_NV_Item_ALS_LINE_Config, &stAlsInfo, ulLength) ) { TAF_WARNING_LOG(WUEPS_PID_TAF, "MN_CALL_LineInfo: en_NV_Item_ALS_LINE_Config NV Write Fail!"); } } (VOS_VOID)MN_CALL_UpdateAlsLineInfo(stAlsInfo.enAlsLine,VOS_FALSE); } }
VOS_UINT32 TAF_SPM_IsEmergencyNum( MN_CALL_CALLED_NUM_STRU *pstDialNum, VOS_UINT32 ulCheckEfecc, MN_CALL_EMERGENCY_CAT_STRU *pstEmergencyCat ) { VOS_UINT8 ucEmergencyCall; ucEmergencyCall = VOS_FALSE; /* 检查是否(U)SIM卡中EFECC文件中的紧急呼叫号码 */ if (TAF_SDC_USIM_STATUS_NO_PRESENT != TAF_SDC_GetSimStatus()) { if (VOS_TRUE == ulCheckEfecc) { if (VOS_TRUE == TAF_SPM_IsUsimEmergencyNum(pstDialNum, &pstEmergencyCat->bExist, &pstEmergencyCat->ucEmergencyCat)) { /* 是USIM中的紧急呼叫,且CATEGORY有效则直接返回 */ if (VOS_TRUE == pstEmergencyCat->bExist) { return VOS_TRUE; } ucEmergencyCall = VOS_TRUE; } } /* 检查是否网络上报紧急呼叫号码列表中的紧急呼叫号码 */ if (VOS_TRUE == TAF_SPM_IsNetworkEmergencyNum(pstDialNum, &pstEmergencyCat->bExist, &pstEmergencyCat->ucEmergencyCat)) { /* 是网络中的紧急呼叫,且CATEGORY有效则直接返回 */ if (VOS_TRUE == pstEmergencyCat->bExist) { return VOS_TRUE; } ucEmergencyCall = VOS_TRUE; } } /* 检查是否运营商定制紧急呼叫号码列表中的紧急呼叫号码 */ if (VOS_TRUE == TAF_SPM_IsAppCustomEmergencyNum(pstDialNum, &pstEmergencyCat->bExist, &pstEmergencyCat->ucEmergencyCat)) { /* 是网络中的紧急呼叫,且CATEGORY有效则直接返回 */ if (VOS_TRUE == pstEmergencyCat->bExist) { return VOS_TRUE; } ucEmergencyCall = VOS_TRUE; } /* 检查是否协议定义的紧急呼叫号码 */ if (VOS_TRUE == TAF_SPM_IsPhoneEmergencyNum(pstDialNum)) { ucEmergencyCall = VOS_TRUE; } if (VOS_TRUE == ucEmergencyCall) { return VOS_TRUE; } return VOS_FALSE; }
VOS_UINT32 TAF_SPM_IsAppCustomEmergencyNum( MN_CALL_CALLED_NUM_STRU *pstDialNum, VOS_UINT32 *pulEmerCatExist, VOS_UINT8 *pucEmerCategory ) { TAF_SDC_USIM_STATUS_ENUM_UINT8 enSimStatus; TAF_SDC_CUSTOM_ECC_CTX_STRU *pstCustomCallEmerNumCtx = VOS_NULL_PTR; VOS_UINT8 i; pstCustomCallEmerNumCtx = TAF_SDC_GetCustomCallEccNumCtx(); /* 获取卡的状态,根据卡的存在与否做不同处理 */ enSimStatus = TAF_SDC_GetSimStatus(); /* 检查是否APP定制紧急呼号码 */ for (i = 0; i < pstCustomCallEmerNumCtx->stCustomEccNumList.ucEccNumCount; i++) { if (pstDialNum->ucNumLen != pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].ucEccNumLen) { continue; } if (0 == VOS_MemCmp(pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].aucEccNum, pstDialNum->aucBcdNum, pstDialNum->ucNumLen) ) { if (TAF_SDC_USIM_STATUS_NO_PRESENT == enSimStatus) { /* 号码是有卡时的紧急呼号码 */ if ((MN_CALL_ECC_NUM_VALID_SIM_ABSENT != pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].ucValidSimPresent)) { continue; } } else { /* 号码是无卡时的紧急呼号码 */ if ((MN_CALL_ECC_NUM_VALID_SIM_PRESENT != pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].ucValidSimPresent)) { continue; } /* 有卡时,号码是仅非正常服务时的紧急呼号码,若当前CS正常服务则不作为紧急呼号码 */ if ( (VOS_TRUE == TAF_SDC_IsCsNormalService()) && (pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].ucAbnormalServiceFlg == VOS_TRUE) ) { continue; } } *pulEmerCatExist = TAF_SPM_IsValidEmerCategory(pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].ucCategory); if (VOS_TRUE == *pulEmerCatExist) { *pucEmerCategory = (pstCustomCallEmerNumCtx->stCustomEccNumList.astCustomEccNumList[i].ucCategory & MN_CALL_EMER_CATEGORG_VAL_MAX); } return VOS_TRUE; } } return VOS_FALSE; }