VOS_UINT32 NAS_EMM_RcvSmsEstReqMsgProc(VOS_VOID) { VOS_UINT32 ulCurEmmStat; /* 获取当前状态 */ ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); /* EMM_SS_REG_NORMAL_SERVICE */ if (ulCurEmmStat == NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE)) { /* 不是数据连接态,进状态机处理 */ if(NAS_EMM_CONN_DATA != NAS_EMM_GetConnState()) { return NAS_LMM_MSG_DISCARD; } NAS_LMM_SndLmmSmsEstCnf(); NAS_LMM_SetConnectionClientId(NAS_LMM_CONNECTION_CLIENT_ID_SMS); return NAS_LMM_MSG_HANDLED; } else /* 其它状态进行与数据请求相同的处理 */ { return NAS_EMM_SomeStateRcvSmsMsgCommProc(); } }
VOS_UINT32 NAS_EMM_RcvSmsDataReqMsgProc(MsgBlock * pMsg) { VOS_UINT32 ulCurEmmStat; /* 获取当前状态 */ ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); /* EMM_SS_REG_NORMAL_SERVICE */ if (ulCurEmmStat == NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE)) { if (NAS_EMM_CONN_DATA == NAS_EMM_GetConnState()) { /*编码上行NAS透传消息,并且发送给RRC*/ NAS_EMM_SMS_SendMrrcDataReq_SmsData(pMsg); } else { NAS_LMM_SndLmmSmsErrInd(LMM_SMS_ERR_CAUSE_RRC_CONN_NOT_EXIST); } return NAS_LMM_MSG_HANDLED; } else /* 其它状态进行与建链请求相同的处理 */ { return NAS_EMM_SomeStateRcvSmsMsgCommProc(); } }
VOS_UINT32 NAS_EMM_PreProcMsgT3412Exp(MsgBlock * pMsg ) { /*VOS_UINT32 ulCurEmmStat = NAS_EMM_NULL;*/ (void)pMsg; NAS_LMM_PUBM_LOG_INFO("NAS_EMM_PreProcMsgT3412Exp enter!"); /*通知GU模t3412超时*/ NAS_EMM_SendTimerStateNotify(TI_NAS_EMM_PTL_T3412, LMM_MMC_TIMER_EXP); /* ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE( NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); */ /*当前的状态是NAS_EMM_CONN_ESTING,则说明正在建链过程中收到了周期性TAU超时 设置超时标记,该标记该如何处理呢?两种情况: 1. 在TAU或者service流程中,建链成功,TAU, SERVCIE成功会清该标示,不再发起周期TAU 2. 在TAU或者service流程中,如果建链失败,则转到相应的状态之后,等待RRC重新驻留, 上报系统消息之后,发起TAU之前会判断该标识,确定是否要发起周期TAU */ if(NAS_EMM_CONN_ESTING == NAS_EMM_GetConnState()) { /*设置周期TAU定时器标示*/ NAS_LMM_SetEmmInfoT3412ExpCtrl(NAS_EMM_T3412_EXP_YES_OTHER_STATE); return NAS_LMM_MSG_HANDLED; } /* 如果注册状态不为紧急注册,则需要进入状态机进行处理 */ if (NAS_LMM_REG_STATUS_EMC_REGED != NAS_LMM_GetEmmInfoRegStatus()) { return NAS_LMM_MSG_DISCARD; } /* 如果是紧急注册,本地DETACH */ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 本地DETACH释放资源:动态内存、赋初值 */ NAS_LMM_DeregReleaseResource(); /*向MMC发送本地LMM_MMC_DETACH_IND消息*/ NAS_EMM_MmcSendDetIndLocal( MMC_LMM_L_LOCAL_DETACH_OTHERS); #if (FEATURE_PTM == FEATURE_ON) NAS_EMM_LocalDetachErrRecord(EMM_ERR_LOG_LOCAL_DETACH_TYPE_OTHER); #endif return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { /*打印进入该函数*/ NAS_EMM_DETACH_LOG2_INFO("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp", ulMsgId, pMsgStru); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF)) { /*打印出错信息*/ NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*Detach attempt counter加1*/ NAS_EMM_GLO_AD_GetDetAtmpCnt()++; /*判断Detach attempt counter,分为小于5和大于等于5处理*/ if (NAS_EMM_GLO_AD_GetDetAtmpCnt() < 5) { /*发送DETACH REQUEST消息*/ NAS_EMM_SendImsiDetachReqMo(); return NAS_LMM_MSG_HANDLED; } NAS_EMM_DETACH_LOG_INFO("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp 5 times"); NAS_EMM_GLO_AD_GetDetAtmpCnt() = 0; /* 设置注册域为PS */ NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); /* 如果当前是数据连接态,则直接转到REG+NORMAL_SERVIC态,否则待释放RRC链路 后再转到REG+NORMAL_SERVIC态 */ if (NAS_EMM_CONN_DATA == NAS_EMM_GetConnState()) { NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /*向MMC发送本地LMM_MMC_DETACH_IND消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /* IMSI DETACH后释放资源 */ NAS_LMM_ImsiDetachReleaseResource(); return NAS_LMM_MSG_HANDLED; } NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); return NAS_LMM_MSG_HANDLED; }