VOS_VOID Ss_TaskEntry_T( struct MsgCB* pMsg ) { MSG_HEADER_STRU *pMsgHeader; REL_TIMER_MSG *pTimer; /* 定义TIMER消息指针 */ VOS_UINT16 usMsgType; VOS_UINT16 usClientId; VOS_UINT8 ucOpId; MN_APP_REQ_MSG_STRU *pMnAppReqMsg; pMsgHeader = ( MSG_HEADER_STRU* )pMsg; /* 得到消息头 */ pTimer = ( REL_TIMER_MSG* ) pMsg; /* 获取TIMER消息指针 */ pMnAppReqMsg = ( MN_APP_REQ_MSG_STRU* )pMsg; if (VOS_TRUE == TAF_SDC_GetSvlteSupportFlag()) { /* svlte特性开启时,modem1可能收到usim0的消息,需要将消息中send pid进行转换 */ pMsg->ulSenderPid = TAF_SDC_ConvertOamSendPid(pMsg->ulSenderPid); } if ( VOS_PID_TIMER == pMsg->ulSenderPid ) { Ss_RcvTimerOut((VOS_UINT8)pTimer->ulPara , (VOS_UINT8)pTimer->ulName); /* TIMER溢出消息分发函数 */ } else { switch( pMsgHeader->ulSenderPid ) { /* 根据Src Tsk Id分发消息 */ case WUEPS_PID_MM: /* MM 发来的消息 */ Ss_RcvMmMsg( pMsg ); /* 调用MM消息处理 */ break; case WUEPS_PID_ADMIN: break; /* Delete MAPS_STK_PID and WUEPS_PID_AT */ case WUEPS_PID_TAF: usMsgType = pMnAppReqMsg->usMsgName; /*usClientId*/ usClientId = pMnAppReqMsg->clientId; /*ucOpId*/ ucOpId = pMnAppReqMsg->opId; Taf_SsaProc(usMsgType, usClientId, ucOpId, pMnAppReqMsg->aucContent); break; default : /* 其他TASK发来的消息 */ SS_WARN_LOG( "\n [Error]SenderPid Error! \r" ); break; } } }
VOS_VOID TAF_MMA_MsgProc( struct MsgCB *pstMsg ) { VOS_UINT32 ulRet; VOS_UINT32 ulEventType; VOS_UINT16 usNewStackDepth; VOS_UINT16 usOldStackDepth; if ( VOS_NULL_PTR == pstMsg ) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_MsgProc:null pointer"); return; } /* svlte特性开启时,modem1可能收到usim0的消息,需要将消息中send pid进行转换 */ if (VOS_TRUE == TAF_SDC_GetSvlteSupportFlag()) { pstMsg->ulSenderPid = TAF_SDC_ConvertOamSendPid(pstMsg->ulSenderPid); } usOldStackDepth = TAF_MMA_GetFsmStackDepth(); ulEventType = TAF_MMA_BuildEventType(pstMsg); /* 如果已经预处理完成则直接返回 */ if (VOS_TRUE == TAF_MMA_PreProcessMsg(ulEventType, pstMsg)) { return; } /* 进入状态机处理 */ ulRet = TAF_MMA_ProcessMsgInFsm(ulEventType, pstMsg); /* 状态机中会收到连接释放、状态机退出等消息,所以不能直接返回 还需要判断能否处理缓存*/ usNewStackDepth = TAF_MMA_GetFsmStackDepth(); /* 如果栈的深度减少,说明肯定进行了退栈操作,需要优先处理该状态机的结果消息,直接返回 */ if ( usNewStackDepth < usOldStackDepth ) { /* 记录退栈操作,只要发生了退栈后续就可以处理缓存 */ TAF_MMA_SetFsmStackPopFlg(VOS_TRUE); return; } /* 该消息在状态机中已经处理完成,可尝试处理一下缓存 */ if ( VOS_TRUE == ulRet) { /* 当前仅收到状态机的退出消息才能够处理缓存 */ if (VOS_TRUE == TAF_MMA_GetFsmStackPopFlg()) { TAF_MMA_ProcessBufferMsg(); TAF_MMA_SetFsmStackPopFlg(VOS_FALSE); } } /* 在当前状态机中未处理完毕,判断消息是否需要打断当前的L2状态机,后处理 */ else { TAF_MMA_PostProcessMsg(ulEventType, pstMsg); } return; }
VOS_VOID MN_DispatchMsg (struct MsgCB * pstMsg) { struct MsgCB *pstSrcMsg = VOS_NULL_PTR; struct MsgCB *pstDestMsg = VOS_NULL_PTR; if (VOS_NULL_PTR == pstMsg) { return; } if (VOS_TRUE == TAF_SDC_GetSvlteSupportFlag()) { /* svlte特性开启时,modem1可能收到usim0的消息,需要将消息中send pid进行转换 */ pstMsg->ulSenderPid = TAF_SDC_ConvertOamSendPid(pstMsg->ulSenderPid); } /* 支持TD-SCDMA特性时,需对消息进行适配处理 */ if ( VOS_TRUE == NAS_UTRANCTRL_MsgProc(pstMsg, &pstDestMsg) ) { /* 消息在UTRANCTRL模块处理完成,直接返回,不进入后续处理 */ return; } pstSrcMsg = pstDestMsg; if (VOS_TRUE == TAF_SPM_MsgProc(pstSrcMsg, &pstDestMsg)) { /* 消息在SPM模块处理完成,直接返回,不需要进入后续处理 */ return; } /* 替换消息指针 */ switch (pstDestMsg->ulSenderPid) { case VOS_PID_TIMER: MN_ProcTimerMsg(pstDestMsg); break; case UEPS_PID_CST: MN_CALL_ProcCstCallPrimitive(pstDestMsg); break; case MAPS_STK_PID: MN_DispatchStkMsg(pstDestMsg); break; case WUEPS_PID_TAF: MN_DispatchTafMsg(pstDestMsg); break; case WUEPS_PID_AT: MN_DispatchAppMsg(pstDestMsg); break; case WUEPS_PID_CC: MN_CALL_ProcMnccPrimMsg(pstDestMsg); break; case WUEPS_PID_MMC: MN_ProcMmcMsg(pstDestMsg); break; case WUEPS_PID_MMA: MN_ProcMmaMsg(pstDestMsg); break; case WUEPS_PID_MM: break; case WUEPS_PID_SS: break; case WUEPS_PID_SMS: MN_MSG_ProcSmsMsg((VOS_VOID*)pstDestMsg); break; #if (FEATURE_IMS == FEATURE_ON) case PS_PID_IMSA: MN_DispatchImsaMsg((VOS_VOID*)pstDestMsg); break; #endif case WUEPS_PID_SM: TAF_APS_ProcMsg(pstDestMsg); break; #if (FEATURE_ON == FEATURE_LTE) case PS_PID_ESM: TAF_APS_ProcMsg(pstDestMsg); break; case MSP_L4_L4A_PID: TAF_APS_ProcMsg(pstDestMsg); break; #endif case WUEPS_PID_RABM: MN_DispatchRabmMsg(pstDestMsg); break; case UEPS_PID_SN: TAF_APS_ProcMsg(pstDestMsg); break; case WUEPS_PID_USIM: case MAPS_PB_PID: MN_ProcUsimMsg(pstDestMsg); break; case MAPS_PIH_PID: MN_ProcPihMsg(pstDestMsg); break; case WUEPS_PID_OM: MN_ProcOmMsg(pstDestMsg); break; case WUEPS_PID_VC: MN_CALL_ProcVCMsg(pstDestMsg); break; #if ((FEATURE_ON == FEATURE_GCBS) || (FEATURE_ON == FEATURE_WCBS)) case UEPS_PID_GAS: case WUEPS_PID_BMC: #if (FEATURE_ON == FEATURE_LTE) case PS_PID_ERRC: #endif case WUEPS_PID_WRR: TAF_CBA_MsgProc(pstDestMsg); break; #endif case UEPS_PID_NDCLIENT: TAF_APS_ProcMsg(pstDestMsg); break; case ACPU_PID_TAFAGENT: TAF_APS_ProcMsg(pstDestMsg); break; default: MN_ERR_LOG1("MN_DispatchMsg: Unknown message sender, SenderPid, ", (VOS_INT32)pstMsg->ulSenderPid); break; } }