VOS_VOID MmMsgProc (struct MsgCB* pMsg) { VOS_VOID *pRcvMsg = VOS_NULL_PTR; /* 接收消息使用的头地址定义 */ MSG_HEADER_STRU *pMsgHeader; /* 定义MSG_HEADER_STRU类型指针 */ VOS_UINT32 aulRcvTimerMsg[4]; /* 接收消息使用的临时内存定义 */ REL_TIMER_MSG *pTimerMsg = VOS_NULL_PTR; VOS_UINT8 ucEventId = MM_EVENT_ID_INVALID; MM_MSG_MM_STATUS_STRU Msg; if (VOS_NULL_PTR == pMsg) { MM_WARN_LOG( "\nMM:MmMsgProc:MM Msg is null!"); return; } NAS_MM_LogMmStateInfo(g_MmGlobalInfo.ucState); #ifdef __PS_WIN32_RECUR__ if ((WUEPS_PID_MM == pMsg->ulSenderPid) && (WUEPS_PID_MM == pMsg->ulReceiverPid)) { NAS_MM_RestoreContextData(pMsg); } #endif if (g_NasMmImportFunc.ucFuncEnvironment != NAS_MML_GetCurrNetRatType() ) { MM_SndMsgFuncChg(); } /* 等待主Task发来的MM启动消息 */ switch (gucMmProcessFlg) { case WAIT_FOR_NORMAL_MSG: /* 等待处理正常消息: */ pRcvMsg = (VOS_VOID *)pMsg; if (PC_PID_TOOL == pMsg->ulSenderPid) { ucEventId = 78; } else if (VOS_PID_TIMER == pMsg->ulSenderPid) { pTimerMsg = (REL_TIMER_MSG *)pMsg; aulRcvTimerMsg[1] = pTimerMsg->ulName; aulRcvTimerMsg[2] = pTimerMsg->ulPara; ucEventId = Mm_Timer_Event_Analy(aulRcvTimerMsg); } else if ( WUEPS_PID_OM == pMsg->ulSenderPid ) { pMsgHeader = (MSG_HEADER_STRU *)pMsg; /*if (AGENT_MM_INQUIRE == ulMsgId )*/ if (AGENT_MM_INQUIRE == pMsgHeader->ulMsgName) { ucEventId = 78; } else { ucEventId = MM_EVENT_ID_INVALID; } } else if (WUEPS_PID_ADMIN == pMsg->ulSenderPid) { pMsgHeader = (MSG_HEADER_STRU *)pMsg; if (WUEPS_RESET_REQ == pMsgHeader->ulMsgName) { Mm_TimerStop(MM_TIMER_STOP_ALL); if (MM_TIMER_START == gstMmTimerSuspend.ucTimerStatus) { if (VOS_OK != Mm_StopRelTimer(WUEPS_PID_MM, MM_TIMER_PROTECT_SUSPEND, &(gstMmTimerSuspend.stTimer))) { PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "MmMsgProc:WARNING: Mm_StopRelTimer VOS_ERRNO_RELTM_STOP_TIMERINVALID."); } gstMmTimerSuspend.ucTimerStatus = MM_TIMER_STOPPED; } PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "MmMsgProc:WARNING: ADMIN Reset order."); gucMmProcessFlg = WAIT_FOR_WUEPS_START; /* 等待ADMIN发送启动原语 */ break; } } else { pMsgHeader = ( MSG_HEADER_STRU* )pMsg; /* 得到消息头 */ ucEventId = Mm_Event_Analy(pMsgHeader); } PS_LOG2(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "MmMsgProc:INFO: MM* Receive Msg,EventId,State:",ucEventId,g_MmGlobalInfo.ucState); if ( MM_EVENT_ID_STATUS_95 == ucEventId ) { PS_MEM_SET(&g_MmMsgMmInfo, 0, sizeof(MM_MSG_MM_INFO_STRU)); Msg.MmIeRjctCause.ucRejCause = NAS_MML_REG_FAIL_CAUSE_SEMANTICALLY_INCORRECT_MSG; Mm_ComMsgMmStatusSnd(&Msg); ucEventId = MM_EVENT_ID_INVALID; } if ( MM_EVENT_ID_STATUS_96 == ucEventId ) { PS_MEM_SET(&g_MmMsgMmInfo, 0, sizeof(MM_MSG_MM_INFO_STRU)); Msg.MmIeRjctCause.ucRejCause = NAS_MML_REG_FAIL_CAUSE_INVALID_MANDATORY_INF; Mm_ComMsgMmStatusSnd(&Msg); ucEventId = MM_EVENT_ID_INVALID; } g_MmSubLyrShare.MmShare.MmSuspendEvent = ucEventId; if ( MM_EVENT_ID_INVALID != ucEventId ) { gaMmStateTable[ucEventId - 1][g_MmGlobalInfo.ucState](pRcvMsg); } /* 收到GU模系统消息后,需要更新MM中保存的net type */ if ( 5 == ucEventId) { g_MmGlobalInfo.enPreRatType = NAS_MML_GetCurrNetRatType(); } break; case WAIT_FOR_WUEPS_START: /* 等待WUEPS_START_REQ消息 */ if (VOS_PID_TIMER == pMsg->ulSenderPid) { } else { pMsgHeader = ( MSG_HEADER_STRU* )pMsg; /* 得到消息头 */ if (( WUEPS_START_REQ == pMsgHeader->ulMsgName) && ( WUEPS_PID_ADMIN == pMsgHeader->ulSenderPid )) { /* 是WUEPS_START_REQ消息 */ #ifdef __PS_WIN32_RECUR__ Mm_ComInit(); #endif gucMmProcessFlg = WAIT_FOR_MMCMM_START_REQ; /* 状态迁移到"等待MMCMM_START_REQ消息" */ } else { /* 无操作; */ } } break; case WAIT_FOR_MMCMM_START_REQ: /* 等待MMCMM_START_REQ消息: */ if (VOS_PID_TIMER == pMsg->ulSenderPid) { } else { pRcvMsg = (VOS_VOID *)pMsg; /* 读取消息地址 */ pMsgHeader = ( MSG_HEADER_STRU* )pMsg; /* 得到消息头 */ if (( MMCMM_START_REQ == pMsgHeader->ulMsgName) && ( WUEPS_PID_MMC == pMsgHeader->ulSenderPid )) { /* 是MMCGMM_START_REQ消息 */ Mm_ComInit(); ucEventId = Mm_Event_Analy(pMsgHeader); if ( MM_EVENT_ID_INVALID != ucEventId ) { gaMmStateTable[ucEventId - 1] [g_MmGlobalInfo.ucState](pRcvMsg); gucMmProcessFlg = WAIT_FOR_NORMAL_MSG; /* 状态迁移到"等待处理正常消息" */ #ifndef __PS_WIN32_RECUR__ if ( VOS_TRUE == NAS_MML_IsSndOmPcRecurMsgValid() ) { NAS_MM_SndOutsideContextData(); } #endif } } /*A32D11534==>*/ else if ((( MMCC_EST_REQ == pMsgHeader->ulMsgName) && ( WUEPS_PID_CC == pMsgHeader->ulSenderPid )) || (( MMSS_EST_REQ == pMsgHeader->ulMsgName) && ( WUEPS_PID_SS == pMsgHeader->ulSenderPid )) || (( MMSMS_EST_REQ == pMsgHeader->ulMsgName) &&( WUEPS_PID_SMS == pMsgHeader->ulSenderPid ))) { ucEventId = Mm_Event_Analy(pMsgHeader); if ( MM_EVENT_ID_INVALID != ucEventId ) { gaMmStateTable[ucEventId - 1][MM_STATE_NULL](pRcvMsg); } } /*<==A32D11534*/ else { /* 无操作; */ } } break; default: PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "MmMsgProc:WARNING: gucMmProcessFlg is Abnormal"); break; } /* #ifndef __PS_WIN32_RECUR__ NAS_MML_SetUePcRecurFlg(VOS_TRUE); #endif */ }
VOS_VOID NAS_MML_MsgProc( struct MsgCB *pRcvMsg ) { NAS_MML_INTERNAL_MSG_BUF_STRU *pstNextMsg = VOS_NULL_PTR; pNasMmPIdMsgProc pMsgProc = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; #ifndef __PS_WIN32_RECUR__ VOS_UINT32 ulIsSndOmPcRecurMsgValid; #endif VOS_UINT32 ulRslt; struct MsgCB *pstNextDestMsg; /* 入口参数检查 */ if ( VOS_NULL_PTR == pRcvMsg ) { NAS_ERROR_LOG(WUEPS_PID_MMC, "NAS_MML_MsgProc:Empty Msg"); return; } if (VOS_TRUE == NAS_MML_GetSvlteSupportFlag()) { NAS_MML_ConvertOamSendPid(&pRcvMsg->ulSenderPid); } pMsgProc = NAS_MML_FindPidMsgProc(pRcvMsg->ulReceiverPid); /* 未找到处理函数直接返回 */ if ( VOS_NULL_PTR == pMsgProc ) { NAS_ERROR_LOG(WUEPS_PID_MMC, "NAS_MML_MsgProc:Invalid rcv pid"); return; } /* 先处理外部消息 */ pMsgProc(pRcvMsg); /* 外部消息处理完成后处理内部消息 */ pstNextMsg = NAS_MML_GetNextInternalMsg(); while (VOS_NULL_PTR != pstNextMsg) { #if (FEATURE_ON == FEATURE_LTE) if (PS_PID_MM == pstNextMsg->ulSenderPid) { pstMsgHeader = (MSG_HEADER_STRU *)pstNextMsg; NAS_MML_LogMsgInfo(pstMsgHeader); } #endif pMsgProc = NAS_MML_FindPidMsgProc(pstNextMsg->ulReceiverPid); /* 未找到处理函数直接返回 */ if ( VOS_NULL_PTR == pMsgProc ) { NAS_ERROR_LOG(WUEPS_PID_MMC, "NAS_MML_MsgProc:Invalid rcv pid"); } #if (FEATURE_ON == FEATURE_LTE) else if ((VOS_FALSE == NAS_MML_IsPlatformSupportLte()) && (PS_PID_MM == pstNextMsg->ulReceiverPid)) { NAS_INFO_LOG(WUEPS_PID_MMC, "NAS_MML_MsgProc:Platform not support Lte"); } #endif else { /* 将该消息钩出来,以便于在PSTAS中显示 */ DIAG_TraceReport(pstNextMsg); /* 将当前消息进入UTRANCTRL模块进行处理 */ ulRslt = NAS_UTRANCTRL_MsgProc((struct MsgCB *)pstNextMsg, &pstNextDestMsg); /* 消息在UTRANCTRL模块处理完成,直接返回,不进入后续处理 */ if ( VOS_FALSE == ulRslt ) { pMsgProc((struct MsgCB *)pstNextDestMsg); } } /* 寻找下一条内部消息 */ pstNextMsg = NAS_MML_GetNextInternalMsg(); } #ifndef __PS_WIN32_RECUR__ ulIsSndOmPcRecurMsgValid = NAS_MML_IsSndOmPcRecurMsgValid(); if ( (VOS_TRUE == NAS_MML_GetUePcRecurFlg()) && (VOS_TRUE == ulIsSndOmPcRecurMsgValid)) { NAS_MML_SetUePcRecurFlg(VOS_FALSE); NAS_MMC_SndOutsideContextData(); NAS_MM_SndOutsideContextData(); NAS_GMM_SndOutsideContextData(); } #endif return; }