VOS_VOID MN_CALL_InitCtx(VOS_VOID)
{
    PS_MEM_SET(MN_CALL_GetCtx(), 0x0, sizeof(g_stMnCallCtx));

    #if (FEATURE_ON == FEATURE_IMS)
    TAF_CALL_SetSrvccState(MN_CALL_SRVCC_STATE_BUTT);

    TAF_CALL_SetCcwaiMode(VOS_TRUE);
    TAF_CALL_SetCcwaCtrlMode(TAF_CALL_CCWA_CTRL_BY_NW);
    TAF_WARNING_LOG2(WUEPS_PID_TAF, "MN_CALL_InitCtx ", TAF_CALL_CCWA_CTRL_BY_NW, VOS_TRUE);
#endif

#if (FEATURE_ON == FEATURE_ECALL)
    TAF_CALL_SetEcallMsdTransStatus(VC_CALL_ECALL_TRANS_STATUS_BUTT);
#endif
}
VOS_VOID  TAF_SPM_StopTimer(
    TAF_SPM_TIMER_ID_ENUM_UINT32        enTimerId,
    VOS_UINT16                          usClientId
)
{
    TAF_SPM_TIMER_CTX_STRU             *pstSpmTimerCtx = VOS_NULL_PTR;
    VOS_UINT32                          i;

    pstSpmTimerCtx   =  TAF_SPM_GetTimerCtxAddr();

    for (i = 0 ; i < TAF_SPM_MAX_TIMER_NUM ; i++)
    {
        if ((TAF_SPM_TIMER_STATUS_RUNING  == pstSpmTimerCtx[i].enTimerStatus)
         && (enTimerId                    == pstSpmTimerCtx[i].enTimerId)
         && (usClientId                   == pstSpmTimerCtx[i].usClientId))
        {
            break;
        }
    }

    if (i >= TAF_SPM_MAX_TIMER_NUM)
    {
        TAF_WARNING_LOG2(WUEPS_PID_TAF,"TAF_SPM_StopTimer:timer already stoppe", (VOS_INT32)enTimerId, usClientId);
        return;
    }

    /* 停止VOS定时器: 当定时器的指针已经为空的时候, 说明其已经停止或者超时 */
    if (VOS_NULL_PTR != pstSpmTimerCtx[i].hTimer)
    {
        VOS_StopRelTimer(&(pstSpmTimerCtx[i].hTimer));
    }

    pstSpmTimerCtx[i].hTimer            = VOS_NULL_PTR;
    pstSpmTimerCtx[i].enTimerId         = TI_TAF_SPM_TIMER_BUTT;
    pstSpmTimerCtx[i].enTimerStatus     = TAF_SPM_TIMER_STATUS_STOP;
    pstSpmTimerCtx[i].usClientId        = TAF_SPM_INVALID_CLIENT_ID;
    
    TAF_SPM_SndOmTimerStatus(TAF_SPM_TIMER_STATUS_STOP, enTimerId, 0, usClientId);  
}
VOS_VOID  TAF_SPM_StartTimer(
    TAF_SPM_TIMER_ID_ENUM_UINT32        enTimerId,
    VOS_UINT32                          ulLen,
    VOS_UINT16                          usClientId
)
{
    TAF_SPM_TIMER_CTX_STRU             *pstSpmTimerCtx = VOS_NULL_PTR;
    VOS_UINT32                          i;
    VOS_UINT32                          ulRet;

    pstSpmTimerCtx   =  TAF_SPM_GetTimerCtxAddr();

    if (0 == ulLen)
    {
        TAF_WARNING_LOG2(WUEPS_PID_TAF,"TAF_SPM_StartTimer:timer len is zero!", (VOS_INT32)enTimerId, usClientId);
        return;
    }
    
    if (ulLen >= VOS_TIMER_MAX_LENGTH)
    {
       ulLen = VOS_TIMER_MAX_LENGTH - 1;
    }

    /* 如果缓存队列中该定时器已经启动则直接返回 */
    for (i = 0 ; i < TAF_SPM_MAX_TIMER_NUM ; i++)
    {
        if ((TAF_SPM_TIMER_STATUS_RUNING == pstSpmTimerCtx[i].enTimerStatus)
         && (enTimerId                   == pstSpmTimerCtx[i].enTimerId)
         && (usClientId                  == pstSpmTimerCtx[i].usClientId))
        {
            TAF_WARNING_LOG2(WUEPS_PID_TAF,"TAF_SPM_StartTimer:timer is running!", (VOS_INT32)enTimerId, usClientId);
            return;
        }        
    }

    for (i = 0 ; i < TAF_SPM_MAX_TIMER_NUM ; i++)
    {
        if (TAF_SPM_TIMER_STATUS_STOP == pstSpmTimerCtx[i].enTimerStatus )
        {
            break;
        }
    }

    if (i >= TAF_SPM_MAX_TIMER_NUM)
    {
       TAF_WARNING_LOG2(WUEPS_PID_TAF, "TAF_SPM_StartTimer:too many timer", (VOS_INT32)enTimerId, usClientId);

       return;
    }

    /* 启动定时器 */
    ulRet = VOS_StartRelTimer(&(pstSpmTimerCtx[i].hTimer),
                              WUEPS_PID_TAF,
                              ulLen,
                              enTimerId,
                              usClientId,
                              VOS_RELTIMER_NOLOOP,
                              VOS_TIMER_PRECISION_5);

    if (VOS_OK != ulRet)
    {
        TAF_WARNING_LOG(WUEPS_PID_TAF,"TAF_SPM_StartTimer:VOS_StartRelTimer failed");
        return;
    }

    pstSpmTimerCtx[i].enTimerId             = enTimerId;
    pstSpmTimerCtx[i].enTimerStatus         = TAF_SPM_TIMER_STATUS_RUNING;
    pstSpmTimerCtx[i].usClientId            = usClientId;

    TAF_SPM_SndOmTimerStatus(TAF_SPM_TIMER_STATUS_RUNING, enTimerId, ulLen, usClientId);  
    
    return;
}