VOS_UINT32 TAF_MMA_ProcMsgPrio( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_MMA_ABORT_FSM_TYPE_UINT8 enAbortType; TAF_MMA_MSG_COMPARE_PRIO_RSLT_ENUM_UINT32 enMsgPrio; enAbortType = TAF_MMA_ABORT_BUTT; enMsgPrio = TAF_MMA_GetMsgComparePrioRslt(ulEventType, pstMsg, &enAbortType); switch ( enMsgPrio ) { /* 缓存消息 */ case TAF_MMA_MSG_COMPARE_PRIO_RSLT_STORE : TAF_MMA_SaveCacheMsgInMsgQueue(ulEventType, (VOS_VOID *) pstMsg); return VOS_TRUE; case TAF_MMA_MSG_COMPARE_PRIO_RSLT_ABORT : return VOS_TRUE; case TAF_MMA_MSG_COMPARE_PRIO_RSLT_INITFSM : case TAF_MMA_MSG_COMPARE_PRIO_RSLT_DISCARD : default: NAS_WARNING_LOG1(WUEPS_PID_MMC, "TAF_MMA_ProcMsgPrio:invlid msg priority",ulEventType); return VOS_FALSE; } }
pNasMmPIdMsgProc NAS_MML_FindPidMsgProc( VOS_UINT32 ulRcvPid ) { pNasMmPIdMsgProc fReturnMsgProcHandle; fReturnMsgProcHandle = VOS_NULL_PTR; switch ( ulRcvPid ) { case WUEPS_PID_MM : fReturnMsgProcHandle = MmMsgProc; break; case WUEPS_PID_GMM : fReturnMsgProcHandle = GmmMsgProc; break; case WUEPS_PID_MMC : fReturnMsgProcHandle = NAS_MMC_MsgProc; break; #if (FEATURE_ON == FEATURE_LTE) case PS_PID_MM: fReturnMsgProcHandle = NAS_MM_PidMsgEntry; break; #endif default: NAS_WARNING_LOG1(WUEPS_PID_MMC, "NAS_MML_FindPidMsgProc:invalide rcv pid", ulRcvPid); break; } return fReturnMsgProcHandle; }
VOS_VOID NAS_RABM_RcvCdsServiceInd( CDS_RABM_SERVICE_IND_STRU *pstCdsServiceInd ) { /* 检查RABID有效性 */ if (!RAB_MAP_RAB_IS_VALID(pstCdsServiceInd->ucRabId)) { NAS_ERROR_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: Invalid RABID. <RABID>", pstCdsServiceInd->ucRabId); return; } switch (NAS_RABM_GetWPsEntState(pstCdsServiceInd->ucRabId - RABM_NSAPI_OFFSET)) { case RABM_NSAPI_ACTIVE_WITH_RAB: NAS_NORMAL_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: RABID is already active. <RABID>", pstCdsServiceInd->ucRabId); NAS_RABM_SndCdsSendBuffDataInd(pstCdsServiceInd->ucRabId, CDS_RABM_SEND_BUFF_DATA_ALLOWED_TYPE_SERVICE_SUCC); break; case RABM_NSAPI_ACTIVE_NO_RAB: if (VOS_TRUE == NAS_RABM_GetWPsEntRabReestFlg(pstCdsServiceInd->ucRabId - RABM_NSAPI_OFFSET)) { NAS_NORMAL_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: Reestablish is in process. <RABID>", pstCdsServiceInd->ucRabId); } else if (VOS_TRUE == NAS_RABM_IsDataServiceRequestPending()) { NAS_NORMAL_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: Data service request is sent, set reestablish flag. <RABID>", pstCdsServiceInd->ucRabId); NAS_RABM_SetWPsEntRabReestFlg(pstCdsServiceInd->ucRabId - RABM_NSAPI_OFFSET); } else if (VOS_TRUE == NAS_RABM_IsRabReestablishPending()) { NAS_NORMAL_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: Start RB setup protect timer. <RABID>", pstCdsServiceInd->ucRabId); NAS_RABM_SetWPsEntRabReestFlg(pstCdsServiceInd->ucRabId - RABM_NSAPI_OFFSET); NAS_RABM_StartReestRabPendingTmr(pstCdsServiceInd->ucRabId); } else { NAS_NORMAL_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: Send data service request. <RABID>", pstCdsServiceInd->ucRabId); NAS_RABM_SetWPsEntRabReestFlg(pstCdsServiceInd->ucRabId - RABM_NSAPI_OFFSET); NAS_RABM_SetRabRsestTimerFlg(); RABM_TimerStart(RABM_REESTABLISH_REQ_SENT, RABM_RABM_REEST_PROT_TIMER_LEN); RABM_SndRabReestReq(); } break; default: NAS_WARNING_LOG1(WUEPS_PID_RABM, "NAS_RABM_RcvCdsServiceInd: Can't reestablish RAB. <RABID>", pstCdsServiceInd->ucRabId); NAS_RABM_SndCdsFreeBuffDataInd(pstCdsServiceInd->ucRabId); break; } return; }
VOS_UINT32 NAS_MMC_ProcMsgPrio( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_MMC_ABORT_FSM_TYPE_UINT8 enAbortType; NAS_MMC_MSG_COMPARE_PRIO_RSLT_ENUM_UINT32 enMsgPrio; enAbortType = NAS_MMC_ABORT_BUTT; enMsgPrio = NAS_MMC_GetMsgComparePrioRslt(ulEventType, pstMsg, &enAbortType); switch ( enMsgPrio ) { /* 发送Abort消息,则当前已经打断状态机 */ case NAS_MMC_MSG_COMPARE_PRIO_RSLT_ABORT : NAS_MMC_SndAbortFsmMsg(ulEventType, enAbortType); NAS_MMC_SaveCacheMsg(ulEventType, (VOS_VOID *) pstMsg); return VOS_TRUE; /* 缓存消息 */ case NAS_MMC_MSG_COMPARE_PRIO_RSLT_STORE : NAS_MMC_SaveCacheMsg(ulEventType, (VOS_VOID *) pstMsg); return VOS_TRUE; /* 进状态机中Load 新的状态机 */ case NAS_MMC_MSG_COMPARE_PRIO_RSLT_INITFSM : return VOS_FALSE; /* 消息可直接丢弃 */ case NAS_MMC_MSG_COMPARE_PRIO_RSLT_DISCARD : return VOS_FALSE; default: NAS_WARNING_LOG1(WUEPS_PID_MMC, "NAS_MMC_ProcMsgPrio:invlid msg priority",ulEventType); return VOS_FALSE; } }
VOS_UINT32 TAF_MMA_ProcMsgPrio( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_MMA_ABORT_FSM_TYPE_UINT8 enAbortType; TAF_MMA_MSG_COMPARE_PRIO_RSLT_ENUM_UINT32 enMsgPrio; enAbortType = TAF_MMA_ABORT_BUTT; enMsgPrio = TAF_MMA_GetMsgComparePrioRslt(ulEventType, pstMsg, &enAbortType); switch ( enMsgPrio ) { /* 缓存消息 */ case TAF_MMA_MSG_COMPARE_PRIO_RSLT_STORE : if (VOS_FALSE == TAF_MMA_SaveCacheMsgInMsgQueue(ulEventType, (VOS_VOID *) pstMsg)) { /* 消息保存失败 */ TAF_MMA_RejectAppRequest(ulEventType, pstMsg); } return VOS_TRUE; case TAF_MMA_MSG_COMPARE_PRIO_RSLT_ABORT: TAF_MMA_SndInterMmaAbortInd(); TAF_MMA_ProcessComparePrioRsltAbort(ulEventType, (VOS_VOID *) pstMsg); return VOS_TRUE; case TAF_MMA_MSG_COMPARE_PRIO_RSLT_REJECT: /* 发送拒绝请求 */ TAF_MMA_ProcessComparePrioRsltReject(ulEventType, (VOS_VOID *) pstMsg); return VOS_FALSE; case TAF_MMA_MSG_COMPARE_PRIO_RSLT_INITFSM : case TAF_MMA_MSG_COMPARE_PRIO_RSLT_DISCARD : default: NAS_WARNING_LOG1(UEPS_PID_MSCC, "TAF_MMA_ProcMsgPrio:invlid msg priority",ulEventType); return VOS_FALSE; } }
VOS_UINT32 NAS_MMC_StartTimer( NAS_MMC_TIMER_ID_ENUM_UINT16 enTimerId, VOS_UINT32 ulLen ) { NAS_MMC_TIMER_CTX_STRU *pstMmcTimerCtx; VOS_UINT32 i; VOS_UINT32 ulRet; VOS_TIMER_PRECISION_ENUM_UINT32 ulPrecision; pstMmcTimerCtx = NAS_MMC_GetTimerAddr(); if (0 == ulLen) { NAS_INFO_LOG1(WUEPS_PID_MMC,"NAS_MMC_StartTimer:timer len is zero!", (VOS_INT32)enTimerId); return VOS_FALSE; } /* 如果缓存队列中该定时器已经启动则直接返回 */ for ( i = 0 ; i < NAS_MMC_MAX_TIMER_NUM ; i++ ) { if ( ( NAS_MMC_TIMER_STATUS_RUNING == pstMmcTimerCtx[i].enTimerStatus ) && ( enTimerId == pstMmcTimerCtx[i].enTimerId)) { NAS_INFO_LOG1(WUEPS_PID_MMC, "NAS_MMC_StartTimer:timer is running", enTimerId); return VOS_FALSE; } } for ( i = 0 ; i < NAS_MMC_MAX_TIMER_NUM ; i++ ) { if ( NAS_MMC_TIMER_STATUS_STOP == pstMmcTimerCtx[i].enTimerStatus ) { break; } } if ( i >= NAS_MMC_MAX_TIMER_NUM) { NAS_WARNING_LOG1(WUEPS_PID_MMC, "NAS_MMC_StartTimer:too many timer", enTimerId); return VOS_FALSE; } if ( ulLen >= VOS_TIMER_MAX_LENGTH ) { ulLen = VOS_TIMER_MAX_LENGTH - 1; } ulPrecision = NAS_MMC_GetTimerPrecision(enTimerId); ulRet = VOS_StartRelTimer(&(pstMmcTimerCtx[i].hTimer), WUEPS_PID_MMC, ulLen, enTimerId, 0, VOS_RELTIMER_NOLOOP, ulPrecision); if ( VOS_OK != ulRet) { NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_MMC_StartTimer:NAS_StartRelTimer failed"); return VOS_FALSE; } pstMmcTimerCtx[i].enTimerId = enTimerId; pstMmcTimerCtx[i].enTimerStatus = NAS_MMC_TIMER_STATUS_RUNING; /* 定时器状态勾包出来 */ NAS_MMC_SndOmMmcTimerStatus(NAS_MMC_TIMER_STATUS_RUNING, enTimerId, ulLen); NAS_TIMER_EventReport((VOS_UINT32)enTimerId, WUEPS_PID_MMC, NAS_OM_EVENT_TIMER_OPERATION_START); return VOS_TRUE; }