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."); } }