VOS_VOID NAS_RABM_RcvGmmSysSrvChgInd(
    GMM_RABM_SYS_SRV_CHG_IND_STRU      *pstGmmSysSrvChgInd
)
{
    GMM_RABM_NET_RAT_ENUM_UINT32        enOldSysMode;

    /* 判断当前的系统模式是否有效 */
    enOldSysMode = NAS_RABM_GetCurrentSysMode();

    /* 根据挂起指示标志是否设置, 执行挂起或恢复处理 */
    if (VOS_TRUE == pstGmmSysSrvChgInd->bDataSuspendFlg)
    {
        NAS_RABM_RcvDataSuspendInd(pstGmmSysSrvChgInd->bRatChangeFlg);
        NAS_RABM_RcvSysModeChgInd(pstGmmSysSrvChgInd->enSysMode);
    }
    else
    {
        NAS_RABM_RcvSysModeChgInd(pstGmmSysSrvChgInd->enSysMode);

        /* GMM通知RABM模块进行恢复时需要通知RABM模块是否需要进行RAB的恢复,
           RABM模块进行恢复时,判断是否需要等待接入层进行RAB恢复 */
        NAS_RABM_RcvDataResumeInd(pstGmmSysSrvChgInd->ucRebuildRabFlag);
    }

    NAS_RABM_SysModeChgProcFastDorm(enOldSysMode,pstGmmSysSrvChgInd->enSysMode);

#if (FEATURE_ON == FEATURE_HUAWEI_VP)
    /* 离开或进入W模需要启动VP判决 */
    if  ( (NAS_MML_NET_RAT_TYPE_WCDMA == enOldSysMode)
            || (NAS_MML_NET_RAT_TYPE_WCDMA == pstGmmSysSrvChgInd->enSysMode))
    {
        NAS_RABM_VoicePreferActivateJudgeStepOne();
    }
#endif
}
VOS_VOID NAS_RABM_RcvSmBearerDeactivateInd(
    SM_RABM_BEARER_DEACTIVATE_IND_STRU *pstSmBearerDeactivateInd
)
{
    VOS_UINT8                           ucEntId;

    /* 获取PS域RABM实体指针 */
    ucEntId = (VOS_UINT8)(pstSmBearerDeactivateInd->ulNsapi - RABM_NSAPI_OFFSET);

    if (NAS_MML_NET_RAT_TYPE_GSM == NAS_RABM_GetCurrentSysMode())
    {
        /* G实体状态置为RABM_2G_NULL */
        RABM_SetGState((RABM_NSAPI_ENUM)ucEntId, RABM_2G_NULL);

        /* 清除G实体信息 */
        NAS_RABM_ClearRabmGPsEnt(ucEntId);
    }
    else
    {
        /* W实体状态置为RABM_NULL */
        RABM_SetWState(ucEntId, RABM_NULL);

        /* 清除G实体信息 */
        NAS_RABM_ClearRabmWPsEnt(ucEntId);
    }

    /* 删除RAB_MAP实体 */
    RABM_DelRabMap((VOS_UINT8)pstSmBearerDeactivateInd->ulNsapi);
}
VOS_VOID NAS_RABM_RcvBastetMsg(
    struct MsgCB                       *pstMsg
)
{
    MSG_HEADER_STRU                     *pstMsgHeader;
    GMM_RABM_NET_RAT_ENUM_UINT32         enCurrentSysMode;

    pstMsgHeader = (MSG_HEADER_STRU*)pstMsg;

    switch (pstMsgHeader->ulMsgName)
    {
        case ID_BASTET_RABM_SET_RELEASE_RRC_REQ:
            enCurrentSysMode = NAS_RABM_GetCurrentSysMode();

            /* 如果不在W网络下,则不能释放RRC连接 */
            if (NAS_MML_NET_RAT_TYPE_WCDMA == enCurrentSysMode)
            {
                NAS_RABM_SndGmmMmlProcStatusQryReq(RABM_RELEASE_RRC_ENUM);
            }
            break;
        default:
            break;
    }

    return;
}
VOS_UINT32 NAS_RABM_DL_DataInd(
    VOS_UINT8                           ucRabId,
    TTF_MEM_ST                         *pstData
)
{
    VOS_UINT32                  ulDataLen;
    CDS_RABM_TRANS_DATA_STRU    stCdsDlData;
    VOS_UINT16                  usModemid;

    /* 赋值 */
    ulDataLen = TTF_MemGetLen(WUEPS_PID_RABM, pstData);

    stCdsDlData.ucRabId     = ucRabId;
    stCdsDlData.pstSdu      = pstData;
    stCdsDlData.ulSduLen    = ulDataLen;

    stCdsDlData.aucRev[0]   = 0;
    stCdsDlData.aucRev[1]   = 0;
    stCdsDlData.aucRev[2]   = 0;

    usModemid = VOS_GetModemIDFromPid(WUEPS_PID_RABM);

    if (NAS_MML_NET_RAT_TYPE_WCDMA == NAS_RABM_GetCurrentSysMode())
    {
        /* 调用UMTS CDS API接口发送下行数据 */
        CDS_UMTS_DL_DataInd(&stCdsDlData, usModemid);
    }
    else
    {
        /* 调用GPRS CDS API接口发送下行数据 */
        CDS_GSM_DL_DataInd(&stCdsDlData, usModemid);
    }

    return VOS_OK;
}
RABM_RAB_STATUS_ENUM_UINT32 NAS_RABM_GetRabIdStatus(
    VOS_UINT8                           ucRabId
)
{
    VOS_UINT32                          ulEntId;
    RABM_RAB_STATUS_ENUM_UINT32         enRabStatus;
    GMM_RABM_NET_RAT_ENUM_UINT32        enCurrentSysMode;

    /* 初始化 */
    enRabStatus = RABM_RAB_STATUS_FAIL;

    /* 判断RABID是否有效 */
    if ((ucRabId < NAS_RABM_RAB_ID_MIN) || (ucRabId > NAS_RABM_RAB_ID_MAX))
    {
        return enRabStatus;
    }

    /* 获取当前的系统模式 */
    enCurrentSysMode = NAS_RABM_GetCurrentSysMode();
    ulEntId          = ucRabId - RABM_NSAPI_OFFSET;

    if (NAS_MML_NET_RAT_TYPE_GSM == enCurrentSysMode)
    {
        enRabStatus = NAS_RABM_GetGRabIdStatus(ulEntId);
    }

    if (NAS_MML_NET_RAT_TYPE_WCDMA == enCurrentSysMode)
    {
        enRabStatus = NAS_RABM_GetWRabIdStatus(ulEntId);
    }

    return enRabStatus;
}
VOS_UINT32 NAS_RABM_IsVpActivateMatchInStepOne(VOS_VOID)
{
    /* NV配置使能VP*/
    if (VOS_TRUE != NAS_RABM_VoicePreferGetNvEnableFlag())
    {
        return VOS_FALSE;
    }

    /* VP生效仅在W模下 */
    if (NAS_MML_NET_RAT_TYPE_WCDMA != NAS_RABM_GetCurrentSysMode())
    {
        return VOS_FALSE;
    }
    if (NAS_UTRANCTRL_UTRAN_MODE_FDD != NAS_UTRANCTRL_GetCurrUtranMode())
    {
        return VOS_FALSE;
    }

    /* VP 生效需要存在语音业务*/
    if (VOS_TRUE != NAS_RABM_VoicePreferGetVoiceCallExsitFlag())
    {
        return VOS_FALSE;
    }

    /* VP 生效需要PDP 处于激活态*/
    if (VOS_TRUE != NAS_RABM_VoicePreferIsPdpActive())
    {
        return VOS_FALSE;
    }

    /* AP满足VP生效条件 */
    if (VOS_TRUE != NAS_RABM_VoicePreferApStatusMatch())
    {
        return VOS_FALSE;
    }

    /* VP生效需要当前的注册网络是已经测试过的网络或制定测试网络*/
    if (VOS_TRUE != NAS_RABM_VoicePreferPlmnMatch())
    {
        return VOS_FALSE;
    }

    return VOS_TRUE;

}
VOS_VOID NAS_RABM_RcvSysModeChgInd(
    GMM_RABM_NET_RAT_ENUM_UINT32        enNewSysMode
)
{
    NAS_RABM_PROC_FUNC_TBL_STRU        *pstProcFuncTbl;
    GMM_RABM_NET_RAT_ENUM_UINT32        enOldSysMode;

    /* 判断当前的系统模式是否有效 */
    enOldSysMode = NAS_RABM_GetCurrentSysMode();

    /* 检测系统模式有效性, 若无效, 不更新系统模式 */
    if (NAS_MML_NET_RAT_TYPE_BUTT == enNewSysMode)
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvSysModeChgInd: Invalid System Mode.");
        return;
    }

    /* 更新系统模式 */
    NAS_RABM_SetSysMode(enNewSysMode);

    /* 根据当前系统模式获取对应的处理函数表的指针 */
    pstProcFuncTbl = NAS_RABM_GetProFuncTblAddr(enOldSysMode);

    /* 确认函数处理表已经注册 */
    if (VOS_NULL_PTR != pstProcFuncTbl)
    {
        if (VOS_NULL_PTR != pstProcFuncTbl->pSysModeChgIndProcFunc)
        {
            /* 调用对应模式的处理函数 */
            pstProcFuncTbl->pSysModeChgIndProcFunc(enOldSysMode, enNewSysMode);
        }
        else
        {
            NAS_WARNING_LOG(WUEPS_PID_RABM,
                            "NAS_RABM_RcvSysModeChgInd: pDataResumeIndProcFunc is not registered.");
        }
    }
    else
    {
        NAS_WARNING_LOG(WUEPS_PID_RABM,
                        "NAS_RABM_RcvSysModeChgInd: Message is received in wrong system mode.");
    }
}
VOS_VOID NAS_RABM_RcvDataSuspendInd(
    VOS_BOOL                            bRatChangeFlg
)
{
    NAS_RABM_PROC_FUNC_TBL_STRU        *pstProcFuncTbl;
    GMM_RABM_NET_RAT_ENUM_UINT32        enCurrentSysMode;

    /* 判断当前的系统模式是否有效 */
    enCurrentSysMode = NAS_RABM_GetCurrentSysMode();
    if (NAS_MML_NET_RAT_TYPE_BUTT == enCurrentSysMode)
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvDataSuspendInd: Invalid System Mode.");
        return;
    }

    /* 根据当前系统模式获取对应的处理函数表的指针 */
    pstProcFuncTbl = NAS_RABM_GetProFuncTblAddr(enCurrentSysMode);

    /* 确认函数处理表已经注册 */
    if (VOS_NULL_PTR != pstProcFuncTbl)
    {
        if (VOS_NULL_PTR != pstProcFuncTbl->pDataSuspendIndProcFunc)
        {
            /* 调用对应模式的处理函数 */
            pstProcFuncTbl->pDataSuspendIndProcFunc(bRatChangeFlg);
        }
        else
        {
            NAS_WARNING_LOG(WUEPS_PID_RABM,
                            "NAS_RABM_RcvDataSuspendInd: pDataSuspendIndProcFunc is not registered.");
        }
    }
    else
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvDataSuspendInd: Message is received in wrong system mode.");
    }
}
VOS_VOID NAS_RABM_RcvGmmReestablishCnf(
    GMMRABM_REESTABLISH_CNF_STRU       *pstGmmReestablishCnf
)
{
    NAS_RABM_PROC_FUNC_TBL_STRU        *pstProcFuncTbl;
    GMM_RABM_NET_RAT_ENUM_UINT32        enCurrentSysMode;

    /* 判断当前的系统模式是否有效 */
    enCurrentSysMode = NAS_RABM_GetCurrentSysMode();
    if (NAS_MML_NET_RAT_TYPE_BUTT == enCurrentSysMode)
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvGmmReestablishCnf: Invalid System Mode.");
        return;
    }

    /* 根据当前系统模式获取对应的处理函数表的指针 */
    pstProcFuncTbl = NAS_RABM_GetProFuncTblAddr(enCurrentSysMode);

    /* 确认函数处理表已经注册 */
    if (VOS_NULL_PTR != pstProcFuncTbl)
    {
        if (VOS_NULL_PTR != pstProcFuncTbl->pGmmReestablishCnfProcFunc)
        {
            /* 调用对应模式的处理函数 */
            pstProcFuncTbl->pGmmReestablishCnfProcFunc(pstGmmReestablishCnf);
        }
        else
        {
            NAS_WARNING_LOG(WUEPS_PID_RABM,
                            "NAS_RABM_RcvGmmReestablishCnf: pGmmReestablishCnfProcFunc is not registered.");
        }
    }
    else
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvGmmReestablishCnf: Message is received in wrong system mode.");
    }
}
VOS_VOID NAS_RABM_RcvSmDeactivateInd(
    RABMSM_DEACTIVATE_IND_STRU         *pstSmDeactivateInd
)
{
    NAS_RABM_PROC_FUNC_TBL_STRU        *pstProcFuncTbl;
    GMM_RABM_NET_RAT_ENUM_UINT32        enCurrentSysMode;

    /* 判断当前的系统模式是否有效 */
    enCurrentSysMode = NAS_RABM_GetCurrentSysMode();
    if (NAS_MML_NET_RAT_TYPE_BUTT == enCurrentSysMode)
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvSmDeactivateInd: Invalid System Mode.");
        return;
    }

    /* 根据当前系统模式获取对应的处理函数表的指针 */
    pstProcFuncTbl = NAS_RABM_GetProFuncTblAddr(enCurrentSysMode);

    /* 确认函数处理表已经注册 */
    if (VOS_NULL_PTR != pstProcFuncTbl)
    {
        if (VOS_NULL_PTR != pstProcFuncTbl->pSmDeactivateIndProcFunc)
        {
            /* 调用对应模式的处理函数 */
            pstProcFuncTbl->pSmDeactivateIndProcFunc(pstSmDeactivateInd);
        }
        else
        {
            NAS_WARNING_LOG(WUEPS_PID_RABM,
                            "NAS_RABM_RcvSmDeactivateInd: pSmDeactivateIndProcFunc is not registered.");
        }
    }
    else
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_RcvSmDeactivateInd: Msg is received in wrong system mode.");
    }
}
VOS_VOID NAS_RABM_RcvCommMsg(
    struct MsgCB                       *pMsg
)
{
    NAS_RABM_PROC_FUNC_TBL_STRU        *pstProcFuncTbl;
    GMM_RABM_NET_RAT_ENUM_UINT32        enCurrentSysMode;

    /* 判断当前的系统模式是否有效 */
    enCurrentSysMode = NAS_RABM_GetCurrentSysMode();
    if (NAS_MML_NET_RAT_TYPE_BUTT == enCurrentSysMode)
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_ProcSysSrvChgInd: Invalid System Mode.");
        return;
    }

    /* 根据当前系统模式获取对应的处理函数表的指针 */
    pstProcFuncTbl = NAS_RABM_GetProFuncTblAddr(enCurrentSysMode);
    if (VOS_NULL_PTR != pstProcFuncTbl)
    {
        if (VOS_NULL_PTR != pstProcFuncTbl->pTaskEntry)
        {
            /* 调用对应模式的处理函数 */
            pstProcFuncTbl->pTaskEntry(pMsg);
        }
        else
        {
            NAS_WARNING_LOG(WUEPS_PID_RABM,
                            "NAS_RABM_ProcessCommMsg: TaskEntry is not registered.");
        }
    }
    else
    {
        NAS_ERROR_LOG(WUEPS_PID_RABM,
                      "NAS_RABM_ProcessCommMsg: Msg is received in wrong system mode.");
    }
}