VOS_VOID NAS_UTRANCTRL_InitCtx( VOS_UINT8 ucInitType ) { #if (FEATURE_ON == FEATURE_UE_MODE_TDS) NAS_UTRANCTRL_CTX_STRU *pstCtx; pstCtx = NAS_UTRANCTRL_GetUtranCtrlCtx(); /* 初始化MS配置信息 */ NAS_UTRANCTRL_InitMsCfgCtx(&(pstCtx->stMsCfgInfo)); /* 初始化UTRANCTRL当前状态机上下文 */ NAS_UTRANCTRL_InitCurrFsmCtx(&(pstCtx->stCurFsm)); /* 初始化UTRANCTRL模块主控信息 */ NAS_UTRANCTRL_InitMainCtrlInfo(&(pstCtx->stMainCtrlInfo)); /* 初始化UTRANCTRL状态机缓存消息队列上下文 */ NAS_UTRANCTRL_InitFsmBufferEntryMsgQueueCtx(&(pstCtx->stBufferEntryMsgQueue)); /* 初始化UTRANCTRL状态机搜网控制上下文 */ NAS_UTRANCTRL_InitFsmPlmnSearchCtrlCtx(&(pstCtx->stPlmnSearchCtrl)); /* 初始化可维可测信息 */ NAS_UTRANCTRL_InitMaintainInfo( ucInitType, &(pstCtx->stMaintainInfo)); /* 状态机表的初始化 */ NAS_UTRANCTRL_RegFsm(); #endif }
VOS_VOID NAS_UTRANCTRL_SetUtranTddPsSmcNeededFlg( VOS_UINT8 ucIsUtranTddPsSmcNeeded ) { NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.ucIsUtranTddPsSmcNeeded = ucIsUtranTddPsSmcNeeded; return; }
VOS_VOID NAS_UTRANCTRL_SetPreUtranMode( NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enUtranMode ) { NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.enPreUtranMode = enUtranMode; return; }
VOS_VOID NAS_UTRANCTRL_SetAbortFlg_PlmnSelection( VOS_UINT8 ucAbortFlg ) { (NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.unFsmCtx.stPlmnSelectionCtx.ucAbortFlg) = ucAbortFlg; return; }
VOS_VOID NAS_UTRANCTRL_SetSearchedSpecTdMccFlg( VOS_UINT8 ucFlg ) { #if (FEATURE_ON == FEATURE_UE_MODE_TDS) (NAS_UTRANCTRL_GetUtranCtrlCtx()->stPlmnSearchCtrl.ucSearchedSpecTdMccFlg) = ucFlg; #endif return; }
VOS_UINT32 NAS_UTRANCTRL_RestoreContextData_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_CTX_STRU *pstUtranCtrlCtx; NAS_MML_PC_REPLAY_COMPRESS_CONTEXT_STRU *pstRcMsg; VOS_UINT32 ulExpectCount; VOS_UINT32 ulCount; VOS_UINT32 ulItemCount; VOS_UINT8 *pucDest; VOS_UINT8 *pucSrc; VOS_UINT32 ulDestLen; pstUtranCtrlCtx = NAS_UTRANCTRL_GetUtranCtrlCtx(); ulExpectCount = 0; ulCount = 0; ulItemCount = 0; ulExpectCount = sizeof(NAS_UTRANCTRL_CTX_STRU); /*注册状态机*/ NAS_UTRANCTRL_RegFsm(); pstRcMsg = (NAS_MML_PC_REPLAY_COMPRESS_CONTEXT_STRU *)pstMsg; pucSrc = pstRcMsg->aucData; /* 解析总长度 */ PS_MEM_CPY(&ulCount, pucSrc, sizeof(VOS_UINT32)); pucSrc += sizeof(VOS_UINT32); if( ulExpectCount != ulCount ) { return VOS_FALSE; } /* g_stNasUtranCtrlCtx目标地址 */ pucDest = (VOS_UINT8 *)pstUtranCtrlCtx; ulDestLen = sizeof(NAS_UTRANCTRL_CTX_STRU); /* 解压缩 */ if (VOS_FALSE == NAS_MML_UnCompressData(pucDest, &ulDestLen, pucSrc, &ulItemCount) ) { return VOS_FALSE; } pucSrc += (ulItemCount); NAS_UTRANCTRL_ReloadFsmDesc(NAS_UTRANCTRL_GetCurFsmAddr(), pstUtranCtrlCtx->stCurFsm.enFsmId); NAS_INFO_LOG(WUEPS_PID_MMC, "UTRANCTRL: NAS_UTRANCTRL_RestoreContextData_Main - data is restored."); return VOS_TRUE; }
VOS_VOID NAS_UTRANCTRL_ClearAllWaitAsUtranModeCnfFlg_ModeChange(VOS_VOID) { /* 如果当前状态机不是MODE CHANGE状态机 */ if (NAS_UTRANCTRL_FSM_MODE_CHANGE != NAS_MMC_GetCurrFsmId()) { /* 异常事件 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_ClearAllWaitUtranModeCnfFlg_ModeChange:ENTERED"); } (NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.unFsmCtx.stModeChangeCtx.ucWaitSlaveModeUtranModeCnfFlg) = NAS_UTRANCTRL_WAIT_UTRAN_MODE_CNF_NULL; return; }
VOS_UINT8 NAS_UTRANCTRL_GetUtranTddPsSmcNeededFlg(VOS_VOID) { #if (FEATURE_ON == FEATURE_UE_MODE_TDS) return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.ucIsUtranTddPsSmcNeeded); #else /* 平台不开启TDD特性宏时候,则需要进行SMC */ return VOS_TRUE; #endif }
NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 NAS_UTRANCTRL_GetCurrUtranMode(VOS_VOID) { /* !!获取当前的UTRAN模式,如果外部模块调用需要确保为驻留状态,否则可能会不准确 */ #if (FEATURE_ON == FEATURE_UE_MODE_TDS) VOS_UINT32 ulSupportFddFlg; VOS_UINT32 ulSupportTddFlg; ulSupportTddFlg = NAS_MML_IsPlatformSupportUtranTdd(); ulSupportFddFlg = NAS_MML_IsPlatformSupportUtranFdd(); #endif /* 平台对W和TD都不支持时,UtranMode为BUTT */ if (VOS_FALSE == NAS_MML_IsPlatformSupportUtran()) { return NAS_UTRANCTRL_UTRAN_MODE_BUTT; } #if (FEATURE_ON == FEATURE_UE_MODE_TDS) /* 平台接入技术能力只支持W时,UtranMode为FDD */ if (VOS_FALSE == ulSupportTddFlg) { return NAS_UTRANCTRL_UTRAN_MODE_FDD; } /* 平台接入技术能力只支持TD时,UtranMode为TDD */ if (VOS_FALSE == ulSupportFddFlg) { return NAS_UTRANCTRL_UTRAN_MODE_TDD; } if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_FDD_ONLY == NAS_UTRANCTRL_GetCurUtranSwitchMode()) { return NAS_UTRANCTRL_UTRAN_MODE_FDD; } if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_TDD_ONLY == NAS_UTRANCTRL_GetCurUtranSwitchMode()) { return NAS_UTRANCTRL_UTRAN_MODE_TDD; } return NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.enCurrUtranMode; #else return NAS_UTRANCTRL_UTRAN_MODE_FDD; #endif }
NAS_UTRANCTRL_ENTRY_MSG_STRU* NAS_UTRANCTRL_GetBufferedSndUtranReqMsgAddr(VOS_VOID) { return &(NAS_UTRANCTRL_GetUtranCtrlCtx()->stMainCtrlInfo.stBufferMmcSndUtranMsg); }
VOS_UINT32 NAS_UTRANCTRL_GetCurrFsmEventType(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.stEntryMsg.ulEventType); }
NAS_UTRANCTRL_MSG_QUEUE_STRU* NAS_UTRANCTRL_GetCachMsgBufferAddr(VOS_VOID) { return &(NAS_UTRANCTRL_GetUtranCtrlCtx()->stBufferEntryMsgQueue); }
VOS_UINT8 NAS_UTRANCTRL_GetCurUtranSwitchMode(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.enCurUtranSwitchMode); }
VOS_UINT8 NAS_UTRANCTRL_GetUePcRecurFlg(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stMaintainInfo.stUeMaintainInfo.ucUeSndPcRecurFlg); }
VOS_UINT32* NAS_UTRANCTRL_GetSpecTdMccList(VOS_VOID) { return NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.stUtranModeAutoSwitch.aulTdMccList; }
NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 NAS_UTRANCTRL_GetPreUtranMode(VOS_VOID) { return NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.enPreUtranMode; }
VOS_UINT8 NAS_UTRANCTRL_GetReplaceMmcMsgFlg(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stMainCtrlInfo.ucReplaceMmcMsgFlg); }
VOS_VOID NAS_UTRANCTRL_SetReplaceMmcMsgFlg( VOS_UINT8 ucReplaceFlg ) { NAS_UTRANCTRL_GetUtranCtrlCtx()->stMainCtrlInfo.ucReplaceMmcMsgFlg = ucReplaceFlg; }
VOS_UINT8 NAS_UTRANCTRL_GetSwithOnPlmnSearchFlag(VOS_VOID) { return NAS_UTRANCTRL_GetUtranCtrlCtx()->stMainCtrlInfo.ucSwitchOnPlmnSearchFlag; }
VOS_VOID NAS_UTRANCTRL_SetSwithOnPlmnSearchFlag( VOS_UINT8 ucSwitchOnPlmnSearchFlag ) { NAS_UTRANCTRL_GetUtranCtrlCtx()->stMainCtrlInfo.ucSwitchOnPlmnSearchFlag = ucSwitchOnPlmnSearchFlag; }
VOS_VOID NAS_UTRANCTRL_SwitchCurrFsmCtx( NAS_UTRANCTRL_FSM_ID_ENUM_UINT32 enNewFsmId ) { NAS_UTRANCTRL_FSM_CTX_STRU *pstCurFsmCtx; NAS_UTRANCTRL_CTX_STRU *pstCtx; pstCtx = NAS_UTRANCTRL_GetUtranCtrlCtx(); pstCurFsmCtx = &(pstCtx->stCurFsm); if (VOS_NULL_PTR == pstCurFsmCtx->pstFsmDesc) { NAS_ERROR_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_SwitchCurrFsmCtx:Invalid pstFsmDesc"); } switch (enNewFsmId) { case NAS_UTRANCTRL_FSM_MAIN: pstCurFsmCtx->enFsmId = enNewFsmId; pstCurFsmCtx->pstFsmDesc = NAS_UTRANCTRL_GetMainFsmDescAddr(); pstCurFsmCtx->ulState = NAS_UTRANCTRL_MAIN_STA_INIT; break; case NAS_UTRANCTRL_FSM_SWITCH_ON: pstCurFsmCtx->enFsmId = enNewFsmId; pstCurFsmCtx->pstFsmDesc = NAS_UTRANCTRL_GetSwitchOnFsmDescAddr(); pstCurFsmCtx->ulState = NAS_UTRANCTRL_SWITCH_ON_STA_INIT; break; case NAS_UTRANCTRL_FSM_POWER_OFF: pstCurFsmCtx->enFsmId = enNewFsmId; pstCurFsmCtx->pstFsmDesc = NAS_UTRANCTRL_GetPowerOffFsmDescAddr(); pstCurFsmCtx->ulState = NAS_UTRANCTRL_POWER_OFF_STA_INIT; break; case NAS_UTRANCTRL_FSM_PLMN_SELECTION: pstCurFsmCtx->enFsmId = enNewFsmId; pstCurFsmCtx->pstFsmDesc = NAS_UTRANCTRL_GetPlmnSelectionFsmDescAddr(); pstCurFsmCtx->ulState = NAS_UTRANCTRL_PLMN_SELECTION_STA_INIT; break; case NAS_UTRANCTRL_FSM_SYSCFG: pstCurFsmCtx->enFsmId = enNewFsmId; pstCurFsmCtx->pstFsmDesc = NAS_UTRANCTRL_GetSysCfgFsmDescAddr(); pstCurFsmCtx->ulState = NAS_UTRANCTRL_SYSCFG_STA_INIT; break; case NAS_UTRANCTRL_FSM_MODE_CHANGE: pstCurFsmCtx->enFsmId = enNewFsmId; pstCurFsmCtx->pstFsmDesc = NAS_UTRANCTRL_GetModeChangeFsmDescAddr(); pstCurFsmCtx->ulState = NAS_UTRANCTRL_MODE_CHANGE_STA_INIT; break; default: NAS_ERROR_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_SwitchCurrFsmCtx:Invalid Fsm Id"); return; } /* 初始化UTRANCTRL状态机上下文 */ pstCurFsmCtx->pstFsmDesc->pfInitHandle(); /* 可维可测状态机信息打印 */ NAS_UTRANCTRL_SndOmUtranCtrlFsmInfo(); return; }
VOS_UINT8 NAS_UTRANCTRL_GetSearchedSpecTdMccFlg(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stPlmnSearchCtrl.ucSearchedSpecTdMccFlg); }
VOS_UINT8 NAS_UTRANCTRL_GetSpecTdMccListNum(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.stUtranModeAutoSwitch.ucTdMccListNum); }
VOS_VOID NAS_UTRANCTRL_SetWaitSlaveModeUtranModeCnfFlg_ModeChange( VOS_UINT8 ucWaitSlaveModeUtranModeCnfFlg ) { (NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.unFsmCtx.stModeChangeCtx.ucWaitSlaveModeUtranModeCnfFlg) |= ucWaitSlaveModeUtranModeCnfFlg; }
VOS_VOID NAS_UTRANCTRL_SetCurUtranSwitchMode( VOS_UINT8 ucSwitchMode ) { (NAS_UTRANCTRL_GetUtranCtrlCtx()->stMsCfgInfo.stCustomCfg.enCurUtranSwitchMode) = ucSwitchMode; }
NAS_FSM_DESC_STRU* NAS_UTRANCTRL_GetCurFsmDesc(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.pstFsmDesc); }
VOS_VOID NAS_UTRANCTRL_SetUePcRecurFlg( VOS_UINT8 ucUePcRecurFlg ) { NAS_UTRANCTRL_GetUtranCtrlCtx()->stMaintainInfo.stUeMaintainInfo.ucUeSndPcRecurFlg = ucUePcRecurFlg; }
NAS_UTRANCTRL_ENTRY_MSG_STRU* NAS_UTRANCTRL_GetCurrEntryMsgAddr(VOS_VOID) { return &(NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.stEntryMsg); }
NAS_UTRANCTRL_FSM_CTX_STRU* NAS_UTRANCTRL_GetCurFsmAddr(VOS_VOID) { return &(NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm); }
NAS_UTRANCTRL_FSM_ID_ENUM_UINT32 NAS_UTRANCTRL_GetCurrFsmId(VOS_VOID) { return (NAS_UTRANCTRL_GetUtranCtrlCtx()->stCurFsm.enFsmId); }