VOS_UINT32 TAF_SPM_MsgProc( struct MsgCB *pstSrcMsg, struct MsgCB **ppstDestMsg ) { VOS_UINT32 ulEventType; VOS_UINT32 ulRet; TAF_SPM_ENTRY_MSG_STRU *pstEntryMsg = VOS_NULL_PTR; REL_TIMER_MSG *pstRcvTimerMsg = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; pstMsgHeader = (MSG_HEADER_STRU *)pstSrcMsg; /* 动作表里的时间消息不能靠消息头名称进行区分,依靠其结构体的ulName域进行区分 所以此处进行分别处理 */ if (VOS_PID_TIMER == pstMsgHeader->ulSenderPid) { pstRcvTimerMsg = (REL_TIMER_MSG *)pstSrcMsg; /* 只停止SPM自己的定时器,其它模块定时器在其内部自己停止 */ if (MN_TIMER_CLASS_SPM == (pstRcvTimerMsg->ulName & MN_TIMER_CLASS_MASK)) { TAF_SPM_StopTimer(pstRcvTimerMsg->ulName,(VOS_UINT16)pstRcvTimerMsg->ulPara); } } ulEventType = TAF_SPM_BuildEventType(pstSrcMsg); /* 如果已经预处理完成则直接返回 */ if (VOS_TRUE == TAF_SPM_PreProcessMsg(ulEventType, pstSrcMsg)) { return VOS_TRUE; } /* 如果已经处理完成则直接返回 */ ulRet = TAF_SPM_ProcessMsgInFsm(ulEventType, pstSrcMsg); /* 判断是否需要替换入口消息 */ if (VOS_TRUE == TAF_SPM_GetUpdateEntryMsgFlg()) { pstEntryMsg = TAF_SPM_GetServiceCtrlEntryMsgAddr(); *ppstDestMsg = (struct MsgCB *)pstEntryMsg->aucEntryMsgBuffer; /* 消息已经使用,回复设置标记位,但不能清除消息。 */ TAF_SPM_SetUpdateEntryMsgFlg(VOS_FALSE); } else { *ppstDestMsg = pstSrcMsg; } /* 继续处理处理 */ return ulRet; }
VOS_UINT32 TAF_SPM_RcvSpmServiceCtrlResultInd_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_SPM_SERVICE_CTRL_RSLT_STRU *pstServiceCtrlRslt = VOS_NULL_PTR; VOS_UINT8 ucOpId; VOS_UINT32 ulRet; VOS_UINT32 ulAppEventType; struct MsgCB *pstAppMsg = VOS_NULL_PTR; #if (FEATURE_IMS == FEATURE_ON) TAF_SPM_DOMAIN_SEL_RESULT_ENUM_UINT8 enDomainSelRslt; #endif ulRet = VOS_TRUE; pstServiceCtrlRslt = (TAF_SPM_SERVICE_CTRL_RSLT_STRU*)pstMsg; TAF_SPM_GetOpIdWithAppMsg((struct MsgCB*)pstServiceCtrlRslt->stEntryMsg.aucEntryMsgBuffer, &ucOpId); pstAppMsg = (struct MsgCB*)&(pstServiceCtrlRslt->stEntryMsg.aucEntryMsgBuffer[0]); ulAppEventType = pstServiceCtrlRslt->stEntryMsg.ulEventType; /* 检查结果为失败 */ if (TAF_SPM_SERVICE_CTRL_FAIL == pstServiceCtrlRslt->enResult) { /* 向AT或STK发送失败结果,携带cause,临时响应修改为正式响应 */ TAF_SPM_SendServiceRequetFail_Main(ulAppEventType, pstAppMsg, pstServiceCtrlRslt->ulCause); return VOS_TRUE; } #if (FEATURE_IMS == FEATURE_ON) enDomainSelRslt = TAF_SPM_ProcServiceRequestDomainSelection(ulAppEventType, pstAppMsg); ulRet = TAF_SPM_ProcInitialDomainSelectionResult(ulAppEventType, pstAppMsg, enDomainSelRslt); #else ulRet = TAF_SPM_ProcReqMsgBasedOnNasSignalling(ulAppEventType, pstAppMsg); #endif if (VOS_TRUE == ulRet) { return VOS_TRUE; } /* 检查结果为成功设置更新入口消息标记并保存修改后的入口消息到全局变量中 */ TAF_SPM_UpdateServiceCtrlEntryMsg(ulAppEventType, pstAppMsg); TAF_SPM_SetUpdateEntryMsgFlg(VOS_TRUE); return VOS_FALSE; }