/***************************************************************************** Function Name : NAS_ERABM_RcvCdsErabmServiceNotify Description : ERABM模块CDS_ERABM_SERVICE_NOTIFY消息分发处理 Input : CDS_ERABM_SERVICE_NOTIFY_STRU *pRcvMsg-----------消息指针 Output : VOS_VOID Return : VOS_VOID History : 1.lihong00150010 2011-12-06 Draft Enact 2.lihong00150010 2012-12-14 Modify:Emergency *****************************************************************************/ VOS_VOID NAS_ERABM_RcvCdsErabmServiceNotify ( const CDS_ERABM_SERVICE_NOTIFY_STRU *pRcvMsg ) { /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_RcvCdsErabmServiceNotify is entered."); (VOS_VOID)pRcvMsg; /* 承载没有对应的DRB的场景下,并且定时器没有启动时,向EMM发起请求 */ if (NAS_ERABM_SUCCESS == NAS_ERABM_IsAllActtiveBearerWithoutDrb()) { if(NAS_ERABM_TIMER_STATE_STOPED != NAS_ERABM_IsTimerRunning(NAS_ERABM_WAIT_RB_REEST_TIMER)) { NAS_ERABM_NORM_LOG("NAS_ERABM_RcvCdsErabmServiceNotify:Reest timer started!" ); return ; } /*发送EMM_ERABM_REEST_REQ消息后,设置服务请求启动*/ NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_INIT); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE == NAS_ERABM_IsEmcService(pRcvMsg->ucRabId)) { NAS_ERABM_SndRabmEmmReestReq(VOS_TRUE); NAS_ERABM_TimerStart( NAS_ERABM_WAIT_RB_REEST_LENGTH, NAS_ERABM_WAIT_RB_REEST_TIMER, VOS_TRUE); } else { NAS_ERABM_SndRabmEmmReestReq(VOS_FALSE); NAS_ERABM_TimerStart( NAS_ERABM_WAIT_RB_REEST_LENGTH, NAS_ERABM_WAIT_RB_REEST_TIMER, VOS_FALSE); } /* lihong00150010 emergency tau&service end */ } else { NAS_ERABM_NORM_LOG("NAS_ERABM_RcvCdsErabmServiceNotify:Already in Connect state!" ); NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /* 通知CDS启动二次过滤 */ NAS_ERABM_SndErabmCdsSndBuffDataInd(CDS_ERABM_SEND_BUFF_DATA_ALLOWED_TYPE_SERVICE_SUCC); } }
/*lint -e961*/ VOS_VOID NAS_ERABM_TcMsgDistr( VOS_VOID *pRcvMsg ) { PS_MSG_HEADER_STRU *pEmmMsg = VOS_NULL_PTR; pEmmMsg = (PS_MSG_HEADER_STRU*)pRcvMsg; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_TcMsgDistr is entered."); /*根据消息名,调用相应的消息处理函数*/ switch (pEmmMsg->ulMsgName) { /*如果收到的是ID_ETC_ERABM_ACTIVATE_TEST_MODE消息*/ case ID_ETC_ERABM_ACTIVATE_TEST_MODE: NAS_ERABM_RcvRabmTcActTestMode(); break; /*如果收到的是ID_ETC_ERABM_DEACTIVATE_TEST_MODE消息*/ case ID_ETC_ERABM_DEACTIVATE_TEST_MODE: NAS_ERABM_RcvRabmTcDeactTestMode(); break; /*如果收到的是ID_ETC_ERABM_REL_REQ消息*/ case ID_ETC_ERABM_REL_REQ: NAS_ERABM_RcvRabmTcRelReq(); break; /*如果收到的是ID_ETC_ERABM_SUSPEND_RSP消息*/ case ID_ETC_ERABM_SUSPEND_RSP: NAS_ERABM_NORM_LOG("NAS_ERABM_TcMsgDistr:receive ID_ETC_ERABM_SUSPEND_RSP!"); break; /*如果收到的是ID_ETC_ERABM_RESUME_RSP消息*/ case ID_ETC_ERABM_RESUME_RSP: NAS_ERABM_NORM_LOG("NAS_ERABM_TcMsgDistr:receive ID_ETC_ERABM_RESUME_RSP!"); break; default: NAS_ERABM_WARN_LOG("NAS_ERABM_TcMsgDistr:WARNING:TC->RABM Message name non-existent!"); break; } }
/***************************************************************************** Function Name : NAS_ERABM_IsTimerRunning Description : 查询定时器是否在运行 Input : None Output : None Return : NAS_ERABM_TIMER_STATE_ENUM_UINT32 History : 1.sunbing49683 2010-9-20 Draft Enact *****************************************************************************/ NAS_ERABM_TIMER_STATE_ENUM_UINT32 NAS_ERABM_IsTimerRunning( NAS_ERABM_TIMER_NAME_ENUM_UINT8 enTimerName ) { NAS_ERABM_START_TIMER_STRU *pstTimerInfo = VOS_NULL_PTR; /*如果ucTimerName对应的定时器处于启动状态,则停止;否则,忽略*/ pstTimerInfo = NAS_ERABM_GetRbTimer(enTimerName); if ( VOS_NULL_PTR == pstTimerInfo ) { NAS_ERABM_NORM_LOG("NAS_ERABM_IsTimerRunning: pstStateTimer NULL."); return NAS_ERABM_TIMER_STATE_BUTT; } /*检查该状态定时器是否在运行*/ if ( VOS_NULL_PTR != pstTimerInfo->stHTimer ) { return NAS_ERABM_TIMER_STATE_RUNNING; } else { return NAS_ERABM_TIMER_STATE_STOPED; } }
VOS_VOID NAS_ERABM_TimerStop( NAS_ERABM_TIMER_NAME_ENUM_UINT8 enTimerName ) { NAS_ERABM_START_TIMER_STRU *pstTimerInfo = VOS_NULL_PTR; VOS_UINT32 ulTimerRemainLen; /*如果ucTimerName对应的定时器处于启动状态,则停止;否则,忽略*/ pstTimerInfo = NAS_ERABM_GetRbTimer(enTimerName); if ( VOS_NULL_PTR == pstTimerInfo ) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStop: pstStateTimer NULL."); return ; } if (VOS_NULL_PTR != pstTimerInfo->stHTimer) { /* 获取当前定时器的剩余时间 */ if (VOS_OK != VOS_GetRelTmRemainTime(&(pstTimerInfo->stHTimer), &ulTimerRemainLen )) { ulTimerRemainLen = 0; } /*关闭失败,则报警返回*/ if (VOS_OK != PS_STOP_REL_TIMER(&(pstTimerInfo->stHTimer))) { NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStop: stop reltimer fail "); return; } /*更新定时器超时次数*/ pstTimerInfo->ucExpireTimes = 0; /*钩出当前的定时器信息 */ NAS_ERABM_SndOmErabmTimerStatus(NAS_ERABM_TIMER_STOPED, enTimerName, ulTimerRemainLen); /*根据定时器的不同类型,打印相应信息*/ switch (enTimerName) { case NAS_ERABM_WAIT_EPSB_ACT_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_RB_WAIT_EPSB_ACT_TIMER"); break; case NAS_ERABM_WAIT_RB_REEST_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_WAIT_RB_REEST_TIMER"); break; case NAS_ERABM_WAIT_RB_RESUME_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_WAIT_RB_RESUME_TIMER"); break; case NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER"); break; default: NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStop:ERROR: stop unreasonable reltimer."); break; } } }
VOS_VOID NAS_ERABM_TimerStart ( VOS_UINT32 ulTimerLen, NAS_ERABM_TIMER_NAME_ENUM_UINT8 enTimerName, VOS_UINT32 ulTimerPara ) { NAS_ERABM_START_TIMER_STRU *pstTimerInfo = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_TimerStart is entered."); /*获取RABM实体中的定时器结构地址指针*/ pstTimerInfo = NAS_ERABM_GetRbTimer(enTimerName); if ( VOS_NULL_PTR == pstTimerInfo ) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStart: pstStateTimer NULL."); return ; } /*判断定时器是否打开,打开则关闭*/ if (VOS_NULL_PTR != pstTimerInfo->stHTimer) { if (VOS_OK != PS_STOP_REL_TIMER(&(pstTimerInfo->stHTimer))) { NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStart: start reltimer error1 "); return; } NAS_ERABM_LOG1("(TimerType) Timer not close!", (VOS_INT32)enTimerName); } if(NAS_ERABM_NULL == ulTimerLen) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStart:WARN: TimerLen = 0"); return; } /* lihong00150010 emergency tau&service begin */ /*设定定时器LENGTH和NAME,打开失败则报警返回*/ if (VOS_OK != PS_START_REL_TIMER(&(pstTimerInfo->stHTimer),PS_PID_RABM, ulTimerLen,(VOS_UINT32)enTimerName, ulTimerPara, VOS_RELTIMER_NOLOOP)) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStart:WARN: start reltimer error2"); return; } /* lihong00150010 emergency tau&service end */ /*钩出当前的定时器信息 */ NAS_ERABM_SndOmErabmTimerStatus(NAS_ERABM_TIMER_RUNNING, enTimerName, ulTimerLen); /*更新定时器开启信息和定时器类别*/ pstTimerInfo->enName = enTimerName; /*根据定时器的不同类型,打印相应信息*/ switch (enTimerName) { case NAS_ERABM_WAIT_EPSB_ACT_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_RB_WAIT_EPSB_ACT_TIMER"); break; case NAS_ERABM_WAIT_RB_REEST_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_WAIT_RB_REEST_TIMER"); break; case NAS_ERABM_WAIT_RB_RESUME_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_WAIT_RB_RESUME_TIMER"); break; case NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER"); break; default: NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStart:ERROR: start unreasonable reltimer."); break; } }