VOS_UINT32 NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp(VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru) { NAS_EMM_CN_ATTACH_ACP_STRU *pRcvEmmMsg; NAS_LMM_NETWORK_INFO_STRU *pMmNetInfo = VOS_NULL_PTR; #if (VOS_OS_VER != VOS_WIN32) static VOS_UINT32 s_ulAttachAcpCnt = 1; #endif (VOS_VOID)ulMsgId; pRcvEmmMsg = (NAS_EMM_CN_ATTACH_ACP_STRU *)pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG_INIT,EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /* 如果ATTACH ACP消息内容不合法,不处理消息,直接丢弃*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_CnAttachAcpMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp: NAS_EMM_CN_ATTACH_ACC_STRU para err!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } NAS_EMM_SetLteNoSubscribeLteRegFlag(NAS_LMM_HAVE_REG_SUCC_ON_LTE); NAS_EMM_ResetRejCauseChangedCounter(); NAS_EMM_ResetHplmnAuthRejCout(); /*停止定时器T3410*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3410); /* 存储ATTACH ACCPET中携带的信元 */ NAS_EMM_SaveAttachAcpIe(pMsgStru); /*清除ATTACH ATTEMPTING COUNTER和TRACKING AREA UPDATING ATTEMPT计数器*/ /*NAS_EMM_GLO_AD_GetAttAtmpCnt() = 0;*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /* 美国AT&T定制需求: ATTACH成功清除CService计数,无论结果如何,PS域均已OK */ NAS_EMM_GetEmmInfoDamParaCserviceCnt() = 0; /*注册成功后,注册前的TAU/SERVICE/DETACH模块记录的历史信息不应该影响后续流程 清除TAU/service/detach资源 */ NAS_EMM_TAU_ClearResouce(); NAS_EMM_SER_ClearResource(); NAS_EMM_Detach_ClearResourse(); /*联合注册仅EPS ONLY成功*/ if ((MMC_LMM_ATT_TYPE_COMBINED_EPS_IMSI == NAS_EMM_GLO_GetCnAttReqType()) && (EMM_ATTACH_RST_PS == pRcvEmmMsg->ucAttachRst)) { NAS_EMM_ProcEpsOnlySucc(pMsgStru); } else { /*设置EPS UPDATE STAUS为EU1*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_UPDATED_EU1; /*启动定时器TI_NAS_EMM_WAIT_ESM_BEARER_CNF*/ NAS_LMM_StartStateTimer( TI_NAS_EMM_WAIT_ESM_BEARER_CNF); /*修改状态:进入主状态REG_INIT子状态ATTACH_WAIT_ESM_BEARER_CNF*/ NAS_EMM_AdStateConvert( EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_ESM_BEARER_CNF, TI_NAS_EMM_WAIT_ESM_BEARER_CNF); } /* lihong00150010 emergency tau&service begin */ /* 参照标杆做法,在收到ATTACH ACCEPT时就更新GUTI, LAST VISIT TAI,EU值, 并写卡或者NV */ pMmNetInfo = NAS_LMM_GetEmmInfoNetInfoAddr(); NAS_EMM_SetLVRTai( &pMmNetInfo->stPresentNetId); /* 判断没有放到函数NAS_LMM_WritePsLoc中来做,是由于紧急注册被拒或者尝试次数 达到5次时还是要删除参数 ,协议只规定是紧急注册成功后才不写卡或者NV项 */ if (NAS_LMM_REG_STATUS_EMC_REGING != NAS_LMM_GetEmmInfoRegStatus()) { /*保存PS LOC信息*/ NAS_LMM_WritePsLoc(NAS_NV_ITEM_UPDATE); } /* lihong00150010 emergency tau&service end */ /* 清除接入技术变化标识,在这里清除不考虑ATTACH失败的原因值 因为要么必然转入了DEREG态,要么MME已经查询完UE无线能力*/ NAS_EMM_ClearUeRadioAccCapChgFlag(); #if (VOS_OS_VER != VOS_WIN32) if(1 == s_ulAttachAcpCnt) { (VOS_VOID)ddmPhaseScoreBoot("UE attach success",__LINE__); s_ulAttachAcpCnt++; } #endif return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_LMM_PreProcMmcDisableReq( MsgBlock *pMsg ) { MMC_LMM_DISABLE_LTE_NOTIFY_STRU *pstMsg = NAS_LMM_NULL_PTR; NAS_LMM_PUBM_LOG_INFO("NAS_LMM_PreProcMmcDisableReq Enter."); /* 检查如果不是IDLE态,则直接丢弃*/ if (NAS_EMM_NO == NAS_LMM_IsRrcConnectStatusIdle()) { NAS_LMM_PUBM_LOG_ERR("NAS_LMM_PreProcMmcDisableReq:NOT IDLE."); return NAS_LMM_MSG_HANDLED; } pstMsg = (MMC_LMM_DISABLE_LTE_NOTIFY_STRU *)(VOS_VOID *)pMsg; /* 记录LTE接入技术为DISABLE态*/ NAS_EMM_SetLteEnableSta( NAS_LMM_LTE_DISABLED); /* 清空T3412Exp标志*/ NAS_LMM_SetEmmInfoT3412ExpCtrl( NAS_EMM_T3412_EXP_NO); /*NAS_LMM_SetEmmInfoUpdateMmFlag(NAS_EMM_UPDATE_MM_FLAG_INVALID);*/ /*清空DrxNetCapability标志*/ NAS_LMM_SetEmmInfoDrxNetCapChange(NAS_EMM_NO); /*清空RRC删除原因标识*/ NAS_LMM_SetEmmInfoTriggerTauRrcRel(NAS_EMM_TRIGGER_TAU_RRC_REL_NO); /* 清除GU发起过LAU或者联合RAU标识*/ NAS_LMM_SetEmmInfoLauOrComRauFlag(NAS_EMM_LAU_OR_COMBINED_RAU_NOT_HAPPENED); NAS_LMM_SetEmmInfoSrvccFlag(NAS_EMM_SRVCC_NOT_HAPPENED); /*清空 EPS 承载上下文变更标志*/ NAS_EMM_SetEpsContextStatusChange(NAS_EMM_EPS_BEARER_STATUS_NOCHANGE); NAS_LMM_SetEmmInfoTriggerTauSysChange(NAS_EMM_NO); /* 清除异系统变换触发和类型记录信息 */ NAS_EMM_ClearResumeInfo(); NAS_LMM_SetEmmInfoPsState(GMM_LMM_GPRS_NOT_SUSPENSION); if( (MMC_LMM_DISABLE_LTE_REASON_LTE_VOICE_NOT_AVAILABLE == pstMsg->enDisableLteReason) || (MMC_LMM_DISABLE_LTE_REASON_EMERGENCY_CALL == pstMsg->enDisableLteReason) || (MMC_LMM_DISABLE_LTE_REASON_LTE_REJ_CAUSE_14 == pstMsg->enDisableLteReason)) { /* 收到MMC的DISABLE LTE消息时,将CS域和PS服务状态设置成无服务,并上报给MMC */ NAS_LMM_SetNasMmcCSServiceState(MMC_LMM_SERVICE_STATUS_NO_SERVICE); NAS_LMM_SetNasMmcServiceState(MMC_LMM_SERVICE_STATUS_NO_SERVICE); NAS_EMM_SendMmcServiceStatInd(NAS_EMM_YES, NAS_EMM_YES); /* 给MMC上报无服务之后,将CS域和PS域的服务状态设置成BUTT,以便再次ENABLE LTE 时肯定会再上报服务状态 */ NAS_LMM_SetNasMmcCSServiceState(MMC_LMM_SERVICE_STATUS_TYPE_BUTT); NAS_LMM_SetNasMmcServiceState(MMC_LMM_SERVICE_STATUS_TYPE_BUTT); } NAS_EMM_ClrAllUlDataReqBufferMsg(); /*参考协议24301,5.5.3.3.4.2, 5.5.3.3.4.3, 5.5.1.3.4.2,当前设置位语音中心&IMS不可用, 如果 TAU 5次都是eps only成功,此时会disable LTE,此时 需要停止定时器3402,否则回到L的时候不会立即发起TAU */ /*NAS_LMM_StopPtlTimer(TI_NAS_EMM_PTL_T3402);*/ /* 美国AT&T定制需求: disable LTE清除CService计数 */ NAS_EMM_GetEmmInfoDamParaCserviceCnt() = 0; /* 通知LRRC当前LTE被disable */ NAS_LMM_SendRrcDisableLteNotify(); return NAS_LMM_MSG_HANDLED; }