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; }
VOS_UINT32 TAF_SSA_StartTimer( TAF_SSA_TIMER_ID_ENUM_UINT8 enTimerId, VOS_UINT32 ulLen, VOS_UINT8 ucTi ) { TAF_SSA_TIMER_CXT_STRU *pstSsaTimerCtx = VOS_NULL_PTR; VOS_UINT32 i; VOS_UINT32 ulRet; VOS_TIMER_PRECISION_ENUM_UINT32 ulPrecision; NAS_TIMER_OPERATION_STRU stTimer; /*TI有效范围是0-6,8-14*/ if (VOS_FALSE == TAF_SSA_IsTiValid(ucTi)) { SSA_LOG(WARNING_PRINT, "TAF_SSA_StopTimer: Ti invalid!"); return VOS_FALSE; } pstSsaTimerCtx = gastSsaStatetable[ucTi].astSsaTimerCtx; if (0 == ulLen) { SSA_LOG(WARNING_PRINT, "TAF_SSA_StartTimer: timer len is zero!"); return VOS_FALSE; } /* 如果该定时器已经启动则直接返回 */ for ( i = 0 ; i < TAF_SSA_MAX_TIMER_NUM ; i++ ) { if ( ( TAF_SSA_TIMER_STATUS_RUNING == pstSsaTimerCtx[i].enTimerStatus ) && ( enTimerId == pstSsaTimerCtx[i].enTimerId)) { SSA_LOG1(WARNING_PRINT, "TAF_SSA_StartTimer:timer is running", enTimerId); return VOS_FALSE; } } for ( i = 0 ; i < TAF_SSA_MAX_TIMER_NUM ; i++ ) { if ( TAF_SSA_TIMER_STATUS_STOP == pstSsaTimerCtx[i].enTimerStatus ) { break; } } if ( i >= TAF_SSA_MAX_TIMER_NUM) { SSA_LOG1(WARNING_PRINT, "TAF_SSA_StartTimer:too many timer", enTimerId); return VOS_FALSE; } if ( ulLen >= VOS_TIMER_MAX_LENGTH ) { ulLen = VOS_TIMER_MAX_LENGTH - 1; } ulPrecision = NAS_GetTimerPrecision(WUEPS_PID_SS, enTimerId); ulRet = VOS_StartRelTimer(&(pstSsaTimerCtx[i].hTimer), WUEPS_PID_SS, ulLen, enTimerId, ucTi, VOS_RELTIMER_NOLOOP, ulPrecision); if ( VOS_OK != ulRet) { SSA_LOG(WARNING_PRINT, "TAF_SSA_StartTimer: start timer failed!"); return VOS_FALSE; } pstSsaTimerCtx[i].enTimerId = enTimerId; pstSsaTimerCtx[i].enTimerStatus = TAF_SSA_TIMER_STATUS_RUNING; /* 定时器状态勾包出来 */ stTimer.MsgHeader.ulSenderCpuId = VOS_LOCAL_CPUID; stTimer.MsgHeader.ulSenderPid = WUEPS_PID_SS; stTimer.MsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; stTimer.MsgHeader.ulReceiverPid = VOS_PID_TIMER; stTimer.MsgHeader.ulLength = sizeof(NAS_TIMER_OPERATION_STRU) - VOS_MSG_HEAD_LENGTH; stTimer.MsgHeader.ulMsgName = enTimerId; stTimer.ulTimeAction = NAS_TIMER_OPERATION_START; stTimer.ulTimeLen = ulLen; DIAG_TraceReport(&stTimer); NAS_TIMER_EventReport(stTimer.MsgHeader.ulMsgName, WUEPS_PID_SS, NAS_OM_EVENT_TIMER_OPERATION_START); return VOS_TRUE; }
VOS_VOID NAS_MMC_StopTimer( NAS_MMC_TIMER_ID_ENUM_UINT16 enTimerId ) { NAS_MMC_TIMER_CTX_STRU *pstMmcTimerCtx; VOS_UINT32 i; VOS_UINT32 ulTimerRemainLen; ulTimerRemainLen = 0; pstMmcTimerCtx = NAS_MMC_GetTimerAddr(); for ( i = 0 ; i < NAS_MMC_MAX_TIMER_NUM ; i++ ) { if ( ( NAS_MMC_TIMER_STATUS_RUNING == pstMmcTimerCtx[i].enTimerStatus ) && ( enTimerId == pstMmcTimerCtx[i].enTimerId)) { break; } } if ( i >= NAS_MMC_MAX_TIMER_NUM) { NAS_NORMAL_LOG1(WUEPS_PID_MMC, "NAS_MMC_StopTimer:Timer not running", enTimerId); return; } /* 停止VOS定时器: 当定时器的指针已经为空的时候, 说明其已经停止或者超时 */ if (VOS_NULL_PTR != pstMmcTimerCtx[i].hTimer) { /* 获取当前定时器的剩余时间 */ if (VOS_OK != VOS_GetRelTmRemainTime(&(pstMmcTimerCtx[i].hTimer), &ulTimerRemainLen )) { ulTimerRemainLen = 0; } (VOS_VOID)VOS_StopRelTimer(&(pstMmcTimerCtx[i].hTimer)); } pstMmcTimerCtx[i].hTimer = VOS_NULL_PTR; pstMmcTimerCtx[i].enTimerId = TI_NAS_MMC_TIMER_BUTT; pstMmcTimerCtx[i].enTimerStatus = NAS_MMC_TIMER_STATUS_STOP; if (0!=ulTimerRemainLen) { NAS_TIMER_EventReport(enTimerId, WUEPS_PID_MMC, NAS_OM_EVENT_TIMER_OPERATION_STOP); } /* 定时器状态勾包出来 */ NAS_MMC_SndOmMmcTimerStatus(NAS_MMC_TIMER_STATUS_STOP, enTimerId, ulTimerRemainLen * 10); }
VOS_UINT8 Mm_Timer_Event_Analy(VOS_UINT32 *aulRcvMsg) { VOS_UINT8 ucEventId = MM_EVENT_ID_INVALID; VOS_UINT8 ucTimerId; PS_LOG1(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: TimerExpired: ", (VOS_UINT8)aulRcvMsg[1]); if (MM_TIMER_PROTECT_SUSPEND != aulRcvMsg[1]) { ucTimerId = (VOS_UINT8)aulRcvMsg[1]; if (ucTimerId >= MM_TIMER_NUM) { PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "Mm_Timer_Event_Analy:WARNING: TIMER ID is illegal."); return ucEventId; } if (MM_TIMER_STOP == gstMmTimer[ucTimerId].ucTimerStatus) { PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "Mm_Timer_Event_Analy:WARNING: The TIMER has been stopped."); if( VOS_ERRNO_RELTM_STOP_TIMERINVALID == Mm_StopRelTimer(WUEPS_PID_MM, ucTimerId, &gstMmTimer[ucTimerId].hTimer)) { /* 停止失败:已经停止或Timer不存在 */ PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "Mm_Timer_Event_Analy:WARNING: TIMER STOP FAILURE!"); } return ucEventId; } else { Mm_TimerStop( (VOS_UINT8)aulRcvMsg[1] ); } } NAS_TIMER_EventReport(aulRcvMsg[1], WUEPS_PID_MM, NAS_OM_EVENT_TIMER_OPERATION_EXPIRED); switch ( aulRcvMsg[1] ) { case MM_TIMER_T3210: ucEventId = 51; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3210 TIME OUT"); break; case MM_TIMER_T3211: ucEventId = 52; g_T3211Flag = 0; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3211 TIME OUT"); break; case MM_TIMER_T3212: ucEventId = 53; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3212 TIME OUT"); break; case MM_TIMER_T3213: ucEventId = 54; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3213 TIME OUT"); break; case MM_TIMER_T3214: ucEventId = 55; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3214 TIME OUT"); break; case MM_TIMER_T3216: ucEventId = 56; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3216 TIME OUT"); break; case MM_TIMER_T3218: ucEventId = 57; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3218 TIME OUT"); break; case MM_TIMER_T3220: ucEventId = 58; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3220 TIME OUT"); break; case MM_TIMER_T3230: ucEventId = 59; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3230 TIME OUT"); break; case MM_TIMER_T3240: ucEventId = 60; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM T3240 TIME OUT"); break; case MM_TIMER_PROTECT_AGENT: ucEventId = 75; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM_TIMER_PROTECT_AGENT TIME OUT"); break; case MM_TIMER_PROTECT_DETACH: ucEventId = 76; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM_TIMER_PROTECT_DETACH TIME OUT"); break; case MM_TIMER_PROTECT_SIGNALLING: ucEventId = 77; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM_TIMER_PROTECT_SIGNALLING TIME OUT"); break; case MM_TIMER_PROTECT_CC: ucEventId = 79; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM_TIMER_PROTECT_CC TIME OUT"); break; case MM_TIMER_PROTECT_CCBS: ucEventId = 82; PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_INFO, "Mm_Timer_Event_Analy:INFO: MM_TIMER_PROTECT_CCBS TIME OUT"); break; case MM_TIMER_PROTECT_SUSPEND: /* 调用保护定时器的超时处理 */ MM_SuspendTimeout(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_DELAY_LU_GSM: MM_DelayLuGsmTimeout(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_DELAY_CS_SERVICE_GSM: MM_DelayCsServiceGsmTimeout(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_WAIT_CONNECT_REL: NAS_MM_WaitConnectRelTimeOut(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_NORMAL_CSFB_HO_WAIT_SYSINFO: NAS_MM_NormalCsfbHoWaitSysinfoTimeOut(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_EMERGENCY_CSFB_HO_WAIT_SYSINFO: #if (FEATURE_ON == FEATURE_LTE) NAS_MM_EmergencyCallCsfbWaitHoSysInfoTimeOut(); #endif ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_CS_HO_WAIT_SYSINFO: NAS_MM_CsHoWaitSysinfoTimeOut(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_MODE_I_CS_PS_POWER_OFF_PROTECT: NAS_MM_ModeICsPsPowerOffProtectTimeOut(); break; case MM_TIMER_PROTECT_CS_DETACH: NAS_MM_RcvMmTimerProtectCsDetachExpired(); ucEventId = MM_EVENT_ID_INVALID; break; case MM_TIMER_WAIT_GET_HO_SECU_INFO_CNF: #if (FEATURE_ON == FEATURE_LTE) NAS_MM_RcvMmTimerGetHoSecuInfoCnfExpired(); #endif break; case MM_TIMER_PROTECT_LAU_CSMT_FLG: NAS_MM_RcvProtectingLauCsmtFlgExpired(); break; default: PS_LOG(WUEPS_PID_MM, VOS_NULL, PS_PRINT_WARNING, "Mm_Timer_Event_Analy:WARNING: TimerId is Error"); break; } return ucEventId; }