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;

}