VOS_UINT32 NAS_UTRANCTRL_RcvRrmmPlmnSearchCnf_PlmnSelection_WaitTdPlmnSearchCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_PLMN_SEARCH_CNF_STRU *pstSrchCnfMsg = VOS_NULL_PTR; pstSrchCnfMsg = (RRMM_PLMN_SEARCH_CNF_STRU *)pstMsg; /* 停止保护定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_PLMN_SEARCH_CNF); /* 如果搜网成功 */ if (RRC_PLMN_SEARCH_RLT_SPEC == pstSrchCnfMsg->ulSearchRlt) { /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 进MMC状态机处理 */ return VOS_FALSE; } /* 根据搜网列表更新中国网络标记 */ NAS_UTRANCTRL_UpdateSearchedSpecTdMccFLg(NAS_UTRANCTRL_GetSpecTdMccListNum(), NAS_UTRANCTRL_GetSpecTdMccList(), &(pstSrchCnfMsg->PlmnIdList)); /* 根据中国网络标记设置utran工作模式 */ if (VOS_TRUE == NAS_UTRANCTRL_GetSearchedSpecTdMccFlg()) { NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_TDD); } /* 根据当前工作模式为FDD则需要回到W下 */ if (NAS_UTRANCTRL_UTRAN_MODE_FDD == NAS_UTRANCTRL_GetCurrUtranMode()) { /* 挂起TD */ NAS_UTRANCTRL_SndGuAsSuspendReq(TPS_PID_RRC); /* 迁移状态到等待回W时TD的挂起回复状态 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_TD_SUSPEND_CNF_BACK_W); /* 启动保护定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF, TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF_LEN); /* 消息处理完成不需继续处理 */ return VOS_TRUE; } /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 消息处理完成继续进入MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiTdSysCfgCnfExpired_SysCfg_WaitTdSysCfgCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_SYS_CFG_CNF_STRU *pstSysCfgCnfMsg; NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg; pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); pstSysCfgCnfMsg = (RRMM_SYS_CFG_CNF_STRU *)pstEntryMsg->aucEntryMsgBuffer; /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTdSysCfgCnfExpired_SysCfg_WaitTdSysCfgCnf: ENTERED"); /* 认为当前SYSCFG设置失败 */ pstSysCfgCnfMsg->ulResult = RRMM_SYS_CFG_RESULT_FAILURE; /* 将SYSCFG设置失败消息放到输出队列中 */ NAS_UTRANCTRL_SaveBufferUtranSndMmcMsg(pstEntryMsg->ulEventType, (struct MsgCB *)pstEntryMsg->aucEntryMsgBuffer); /* 设置需要替换入口消息标记,这样MMC模块就会处理SYSCFG设置失败消息 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 回到main状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitMasterModeCnfExpired_ModeChange_WaitMasterModeCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg; /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitMasterModeCnfExpired_ModeChange_WaitMasterModeCnf: ENTERED"); /* 清除所有等待模式变更回复的标志 */ NAS_UTRANCTRL_ClearAllWaitAsUtranModeCnfFlg_ModeChange(); /* 取当前缓存的系统消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); NAS_UTRANCTRL_SaveBufferUtranSndMmcMsg( pstEntryMsg->ulEventType, (struct MsgCB *)pstEntryMsg->aucEntryMsgBuffer); /* 设置缓存消息有效标志 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 退出MODE CHANGE状态机,切换到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTdSysCfgCnf_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_SYS_CFG_CNF_STRU *pstSysCfgCnf; pstSysCfgCnf = (RRMM_SYS_CFG_CNF_STRU *)pstMsg; /* 如果当前UTRANCTRL模的等开机回复时状态定时器不运行认为异常 */ if ( NAS_MMC_TIMER_STATUS_RUNING != NAS_UTRANCTRL_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_TD_SYSCFG_CNF)) { /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTdSysCfgCnf_Main: Unexpected Plmnsrch msg!"); /* 丢弃该异常消息 */ return VOS_TRUE; } /* 停止MMC通过UTRANCTRL模块给UTRAN模发送SYSCFG设置消息时候起的定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_SYSCFG_CNF); if ( RRMM_SYS_CFG_RESULT_FAILURE == pstSysCfgCnf->ulResult) { /* 若syscfg设置失败,则直接进MMC状态机进行处理 */ return VOS_FALSE; } /* 切换到适配模块的SYSCFG状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_SYSCFG); /* Td的SYSCFG回复消息在适配模块的SYSCFG状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitTdPowerOffCnfExpired_PowerOff_WaitTdPowerOffCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_POWER_OFF_CNF_STRU stNasPowerOffCnf; VOS_UINT32 ulPowerOffEventType; /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitTdPowerOffCnfExpired_PowerOff_WaitTdPowerOffCnf: ENTERED"); /* 构造关机回复消息 */ NAS_UTRANCTRL_BuildRrMmPowerOffCnfMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, &stNasPowerOffCnf); ulPowerOffEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)&stNasPowerOffCnf ); /* 将更改过的超时消息放到输出队列中 */ NAS_UTRANCTRL_SaveBufferUtranSndMmcMsg(ulPowerOffEventType, (struct MsgCB *)&stNasPowerOffCnf); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 回到main状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvRrmmSuspendCnf_PlmnSelection_WaitTdSuspendCnfBackW( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg = VOS_NULL_PTR; RRMM_SUSPEND_CNF_ST *pstRrmmSuspendCnf = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; NAS_UTRANCTRL_ENTRY_MSG_STRU *pstBufferEntryMsg = VOS_NULL_PTR; /* 获得当前缓存的缓冲区地址 */ pstBufferEntryMsg = NAS_UTRANCTRL_GetBufferUtranSndMmcMsgAddr(); pstRrmmSuspendCnf = (RRMM_SUSPEND_CNF_ST*)pstMsg; if (MMC_AS_SUSPEND_FAILURE == pstRrmmSuspendCnf->ucResult) { /* 单板复位 */ NAS_MML_SoftReBoot(); return VOS_TRUE; } /* 停止保护定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF); /* 取当前缓存的系统消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); /* 取得当前缓存消息的头 */ pstMsgHeader = (MSG_HEADER_STRU *)pstEntryMsg->aucEntryMsgBuffer; /* 如果当前的入口消息为定时器超时,则需要构造搜网回复失败消息 */ if ( VOS_PID_TIMER == pstMsgHeader->ulSenderPid ) { /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); } else { /* 取缓存的状态机搜网回复失败消息给MMC模块 */ NAS_UTRANCTRL_SaveBufferUtranSndMmcMsg(pstEntryMsg->ulEventType, (struct MsgCB *)pstEntryMsg->aucEntryMsgBuffer); } /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 切换到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 消息处理完成继续进入MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTdStartCnf_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_START_CNF_STRU *pstRrStartCnfMsg; pstRrStartCnfMsg = (RRMM_START_CNF_STRU *)pstMsg; /* 如果当前UTRANCTRL模的等开机回复时状态定时器不运行认为异常 */ if ( NAS_MMC_TIMER_STATUS_RUNING != NAS_UTRANCTRL_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_TD_START_CNF)) { /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTdStartCnf_Main: Unexpected Plmnsrch msg!"); /* 丢弃该异常消息 */ return VOS_TRUE; } /* 停止MMC通过UTRANCTRL模块给UTRAN模发送开机消息时候起的定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_START_CNF); if (MMC_START_FAILURE == pstRrStartCnfMsg->ulResult) { /* 若UTRAN模块开机失败,则直接进MMC状态机进行处理 */ return VOS_FALSE; } /* 切换到适配模块的开机状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_SWITCH_ON); /* TD的开机回复消息在适配模块的开机状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTdSysInfo_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enPreUtranMode; enPreUtranMode = NAS_UTRANCTRL_GetPreUtranMode(); /* 自动模式收到TDS消息,可能是FDD 模式切换成TDD模式,需要更新当前模式 */ if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO == NAS_UTRANCTRL_GetCurUtranSwitchMode()) { NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_TDD); NAS_UTRANCTRL_SetSearchedSpecTdMccFlg(VOS_TRUE); } /* 模式不变不通知RRC */ if (enPreUtranMode == NAS_UTRANCTRL_GetCurrUtranMode()) { /* 消息未被处理完成需继续处理 */ return VOS_FALSE; } /* 把当前UtranMode写到NV中 */ NAS_UTRANCTRL_WriteUtranModeNvim(NAS_UTRANCTRL_UTRAN_MODE_TDD); /* 更新上次发给接入层的UtranMode */ NAS_UTRANCTRL_SetPreUtranMode(NAS_UTRANCTRL_GetCurrUtranMode()); /* 进入ModeChange状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MODE_CHANGE); return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvRrmmPlmnStopCnf_PlmnSelection_WaitTdPlmnStopCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstBufferEntryMsg = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg = VOS_NULL_PTR; /* 取当前缓存的系统消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); /* 取得当前缓存消息的头 */ pstMsgHeader = (MSG_HEADER_STRU *)pstEntryMsg->aucEntryMsgBuffer; /* 获得当前缓存的缓冲区地址 */ pstBufferEntryMsg = NAS_UTRANCTRL_GetBufferUtranSndMmcMsgAddr(); /* 停止保护定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_PLMN_STOP_CNF); /* 中国网络标记存在则退出当前状态机 */ if ( (VOS_TRUE == NAS_UTRANCTRL_GetSearchedSpecTdMccFlg()) || ( (WUEPS_PID_MMC == pstMsgHeader->ulSenderPid) && (MMCMMC_INTER_SKIP_SEARCH_W_IND == pstMsgHeader->ulMsgName) ) ) { /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 消息处理完成继续进入MMC状态机处理 */ return VOS_FALSE; } /* 此时需要回到W下,向TDRRC发送挂起请求 */ NAS_UTRANCTRL_SndGuAsSuspendReq(TPS_PID_RRC); /* 迁移状态到等到TDRRC挂起回复 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_TD_SUSPEND_CNF_BACK_W); /* 启动保护定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF, TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF_LEN); /* 消息处理完成不需继续处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvWasSysInfo_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enPreUtranMode; enPreUtranMode = NAS_UTRANCTRL_GetPreUtranMode(); /* 自动模式收到WAS消息,统一切换成FDD模式,写入NV中 */ if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO == NAS_UTRANCTRL_GetCurUtranSwitchMode()) { /* 更新当前的工作模式 */ NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_FDD); } /* 模式不变不通知RRC */ if (enPreUtranMode == NAS_UTRANCTRL_GetCurrUtranMode()) { /* 消息未被处理完成需继续进入MMC状态机处理 */ return VOS_FALSE; } /* 把当前UtranMode写到NV中 */ NAS_UTRANCTRL_WriteUtranModeNvim(NAS_UTRANCTRL_UTRAN_MODE_FDD); /* 更新上次发给接入层的UtranMode */ NAS_UTRANCTRL_SetPreUtranMode(NAS_UTRANCTRL_GetCurrUtranMode()); /* 进入ModeChange状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MODE_CHANGE); return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvWasRrMmRelInd_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* 如果当前UTRANCTRL模的等搜网回复时状态定时器运行,则停止定时器 */ if ( NAS_MMC_TIMER_STATUS_RUNING != NAS_UTRANCTRL_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_SEARCH_CNF)) { /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; } /* WAS搜网时接入层复位,搜TD模 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_SEARCH_CNF); if ( NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO == NAS_UTRANCTRL_GetCurUtranSwitchMode() ) { /* 切换到适配模块的选网状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_PLMN_SELECTION); /* 当前消息进入适配层选网状态机处理 */ return VOS_TRUE; } /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitWasStartCnfExpired_SwitchOn_WaitWasStartCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_START_CNF_STRU *pstRrMmStartCnfMsg; NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg; pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); pstRrMmStartCnfMsg = (RRMM_START_CNF_STRU *)pstEntryMsg->aucEntryMsgBuffer; /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitWasStartCnfExpired_SwitchOn_WaitWasStartCnf: ENTERED"); /* 认为当前开机失败 */ pstRrMmStartCnfMsg->ulResult = MMC_START_FAILURE; /* 将当前开机失败消息放到输出队列中 */ NAS_UTRANCTRL_SaveBufferUtranSndMmcMsg(pstEntryMsg->ulEventType, (struct MsgCB *)pstEntryMsg->aucEntryMsgBuffer); /* 设置需要替换入口消息标记,这样MMC模块就会处理开机回复失败消息 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* UTRANCTRL状态机回到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 消息未被处理完成需MMC继续处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitWasPlmnSearchCnfExpired_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstBufferEntryMsg = VOS_NULL_PTR; NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enUtranMode; enUtranMode = NAS_UTRANCTRL_GetCurrUtranMode(); /* 获得当前缓存的缓冲区地址 */ pstBufferEntryMsg = NAS_UTRANCTRL_GetBufferUtranSndMmcMsgAddr(); /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitWasPlmnSearchCnfExpired_Main: ENTERED"); /* CSFB标志存在时,并且当前是FDD模式,不再搜TD */ if ((VOS_TRUE == NAS_MML_IsCsfbServiceStatusExist()) && (NAS_UTRANCTRL_UTRAN_MODE_FDD == enUtranMode)) { /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; } /* 如果当前为UTRAN MODE AUTO SWITCH模式,则需要启动UTRANCTRL模块的搜网状态机 */ if ( NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO == NAS_UTRANCTRL_GetCurUtranSwitchMode() ) { /* 切换到适配模块的选网状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_PLMN_SELECTION); /* 进入适配层选网状态机处理 */ return VOS_TRUE; } /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvLmmSysInfo_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { LMM_MMC_SYS_INFO_IND_STRU *pstLmmSysInfoMsg; NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enPreUtranMode; NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enCurrUtranMode; MMC_LMM_PLMN_ID_STRU stLmmPlmn; NAS_MML_PLMN_ID_STRU stGUNasPlmn; pstLmmSysInfoMsg = (LMM_MMC_SYS_INFO_IND_STRU*)pstMsg; enPreUtranMode = NAS_UTRANCTRL_GetPreUtranMode(); stLmmPlmn = (pstLmmSysInfoMsg->stLteSysInfo.stSpecPlmnIdList.astSuitPlmnList[0]); /* 把LMM的PLMN转换成GU NAS的PLMN格式 */ NAS_MMC_ConvertLmmPlmnToGUNasFormat(&stLmmPlmn, &stGUNasPlmn); /* 自动模式收到GAS消息,需要更新当前模式 */ if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO == NAS_UTRANCTRL_GetCurUtranSwitchMode()) { /* 如果当前的MCC不在TD的PLMN LIST列表中,UTRAN MODE为FDD */ if (VOS_FALSE == NAS_MML_IsMccInDestMccList(stGUNasPlmn.ulMcc, NAS_UTRANCTRL_GetSpecTdMccListNum(), NAS_UTRANCTRL_GetSpecTdMccList())) { enCurrUtranMode = NAS_UTRANCTRL_UTRAN_MODE_FDD; } else { enCurrUtranMode = NAS_UTRANCTRL_UTRAN_MODE_TDD; NAS_UTRANCTRL_SetSearchedSpecTdMccFlg(VOS_TRUE); } NAS_UTRANCTRL_SetCurrUtranMode(enCurrUtranMode); } /* 模式不变不通知RRC */ if (enPreUtranMode == NAS_UTRANCTRL_GetCurrUtranMode()) { /* 消息未被处理完成需继续处理 */ return VOS_FALSE; } /* 把当前UtranMode写到NV中 */ NAS_UTRANCTRL_WriteUtranModeNvim(NAS_UTRANCTRL_GetCurrUtranMode()); /* 更新上次发给接入层的UtranMode */ NAS_UTRANCTRL_SetPreUtranMode(NAS_UTRANCTRL_GetCurrUtranMode()); /* 进入ModeChange状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MODE_CHANGE); return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitWasPlmnStopCnfExpired_PlmnSelection_WaitWasPlmnStopCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstBufferEntryMsg = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg = VOS_NULL_PTR; pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); /* 取得当前缓存消息的头 */ pstMsgHeader = (MSG_HEADER_STRU *)pstEntryMsg->aucEntryMsgBuffer; /* 获得当前缓存的缓冲区地址 */ pstBufferEntryMsg = NAS_UTRANCTRL_GetBufferUtranSndMmcMsgAddr(); /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitWasPlmnStopCnfExpired_PlmnSelection_WaitWasPlmnStopCnf: ENTERED"); if ((VOS_FALSE == NAS_UTRANCTRL_GetSearchedSpecTdMccFlg()) && (WUEPS_PID_MMC == pstMsgHeader->ulSenderPid) && (MMCMMC_INTER_SKIP_SEARCH_TDS_IND == pstMsgHeader->ulMsgName)) { /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 消息处理完成继续进入MMC状态机处理 */ return VOS_FALSE; } /* 此时需要回到TD下,向WAS发送挂起请求 */ NAS_UTRANCTRL_SndGuAsSuspendReq(WUEPS_PID_WRR); /* 迁移状态到等到was挂起回复 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_WAS_SUSPEND_CNF_BACK_TD); /* 启动保护定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_WAS_SUSPEND_CNF, TI_NAS_UTRANCTRL_WAIT_WAS_SUSPEND_CNF_LEN); /* 消息处理完成不需继续处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvWasStartCnf_SwitchOn_WaitWasStartCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* UTRANCTRL停止等待WAS回复定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_START_CNF); /* 适配模块状态机回到main状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 进入后续开机状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTdSysCfgCnf_SysCfg_WaitTdSysCfgCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* UTRANCTRL停止等待WAS回复定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_SYSCFG_CNF); /* 适配模块状态机回到main状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 进入后续开机状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTdPowerOffCnf_PowerOff_WaitTdPowerOffCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* UTRANCTRL停止等待TD回复定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_POWER_OFF_CNF); /* 回到main状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 当前消息进入后续MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvGasSysInfo_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { GRRMM_SYS_INFO_IND_ST *pstGrrSysInfo; NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enPreUtranMode; NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enCurrUtranMode; pstGrrSysInfo = (GRRMM_SYS_INFO_IND_ST *)pstMsg; enPreUtranMode = NAS_UTRANCTRL_GetPreUtranMode(); /* 自动模式收到GAS消息,解析系统消息中的MCC,更新当前模式并写NV */ if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO == NAS_UTRANCTRL_GetCurUtranSwitchMode()) { /* 如果当前的MCC不在TD的PLMN LIST列表中,UTRAN MODE为FDD */ if (VOS_FALSE == NAS_MML_IsMccInDestMccList(pstGrrSysInfo->PlmnId.ulMcc, NAS_UTRANCTRL_GetSpecTdMccListNum(), NAS_UTRANCTRL_GetSpecTdMccList())) { enCurrUtranMode = NAS_UTRANCTRL_UTRAN_MODE_FDD; } else { enCurrUtranMode = NAS_UTRANCTRL_UTRAN_MODE_TDD; NAS_UTRANCTRL_SetSearchedSpecTdMccFlg(VOS_TRUE); } NAS_UTRANCTRL_SetCurrUtranMode(enCurrUtranMode); } /* 模式不变不通知RRC */ if (enPreUtranMode == NAS_UTRANCTRL_GetCurrUtranMode()) { /* 消息未被处理完成需继续进入MMC状态机处理 */ return VOS_FALSE; } /* 把当前UtranMode写到NV中 */ NAS_UTRANCTRL_WriteUtranModeNvim(NAS_UTRANCTRL_GetCurrUtranMode()); /* 更新上次发给接入层的UtranMode */ NAS_UTRANCTRL_SetPreUtranMode(NAS_UTRANCTRL_GetCurrUtranMode()); /* 进入ModeChange状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MODE_CHANGE); return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitTdPowerOffCnfExpired_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitTdPowerOffCnfExpired_Main: ENTERED"); /* 切换到适配模块的关机状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_POWER_OFF); /* Td的关机回复消息在适配模块的关机状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvWasPowerOffCnf_PowerOff_WaitWasPowerOffCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* UTRANCTRL停止等待WAS回复定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_POWER_OFF_CNF); /* UTRANCTRL状态机回到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 进入后续MMC状态机处理 */ return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvMmcInterSkipSearchTdsIndMsg_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* SKIP TDS时候,则设置当前为FDD模式 */ NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_FDD); /* 切换到适配模块的选网状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_PLMN_SELECTION); /* tds的搜网回复消息在适配模块的选网状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvRrmmRelInd_PlmnSelection_WaitWasPlmnStopCnfSearchTD( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstBufferEntryMsg = VOS_NULL_PTR; /* 获得当前缓存的缓冲区地址 */ pstBufferEntryMsg = NAS_UTRANCTRL_GetBufferUtranSndMmcMsgAddr(); /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvRrmmRelInd_PlmnSelection_WaitWasPlmnStopCnfSearchTD: ENTERED"); /* 停止保护定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_STOP_CNF); if ( VOS_TRUE == NAS_UTRANCTRL_GetAbortFlg_PlmnSelection()) { /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 切换到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 将搜网失败消息发给MMC处理 */ return VOS_FALSE; } /* W下搜网失败需要在TD下继续搜网 挂起WAS */ NAS_UTRANCTRL_SndGuAsSuspendReq(WUEPS_PID_WRR); /* 迁移状态到等到WAS挂起回复 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_WAS_SUSPEND_CNF); /* 启动定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_WAS_SUSPEND_CNF, TI_NAS_UTRANCTRL_WAIT_WAS_SUSPEND_CNF_LEN); /* 消息处理完成不需继续进入MMC状态机处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitWasPowerOffCnfExpired_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitWasPowerOffCnfExpired_Main: ENTERED"); /* 如果当前为UTRAN MODE AUTO SWITCH模式,则需要启动UTRANCTRL模块的关机状态机 */ /* 切换到适配模块的关机状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_POWER_OFF); /* Was的关机回复消息在适配模块的关机状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTiWaitTdPlmnStopCnfExpired_PlmnSelection_WaitTdPlmnStopCnfSearchW( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstBufferEntryMsg = VOS_NULL_PTR; /* 获得当前缓存的缓冲区地址 */ pstBufferEntryMsg = NAS_UTRANCTRL_GetBufferUtranSndMmcMsgAddr(); /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitTdPlmnStopCnfExpired_PlmnSelection_WaitTdPlmnStopCnfSearchW: ENTERED"); /* 如果当前存在打断,则直接退出选网状态机 */ if ( VOS_TRUE == NAS_UTRANCTRL_GetAbortFlg_PlmnSelection()) { /* 构造指定搜网回复失败消息到内存的缓存区域 */ NAS_UTRANCTRL_BuildRrMmPlmnSearchCnfFailMsg(WUEPS_PID_WRR, WUEPS_PID_MMC, (RRMM_PLMN_SEARCH_CNF_STRU *)pstBufferEntryMsg->aucEntryMsgBuffer); /* 保存构造指定搜网回复失败消息事件类型 */ pstBufferEntryMsg->ulEventType = NAS_UTRANCTRL_GetMsgEventType( (struct MsgCB *)pstBufferEntryMsg->aucEntryMsgBuffer ); /* 设置需要替换入口消息标记 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 切换到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 将搜网失败消息发给MMC处理 */ return VOS_FALSE; } /* 此时需要回到w下搜网,向TD发送挂起请求 */ NAS_UTRANCTRL_SndGuAsSuspendReq(TPS_PID_RRC); /* 迁移状态到等到TD挂起回复 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_TD_SUSPEND_CNF); /* 启动保护定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF, TI_NAS_UTRANCTRL_WAIT_TD_SUSPEND_CNF_LEN); /* 消息处理完成不需继续处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvInterAbortUtranCtrlPlmnSearchReq_PlmnSelection_WaitWasPlmnSearchCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* 停止保护定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_SEARCH_CNF); /* 更新utran mode为fdd,utranctrl 搜网状态机退出,消息进mmc继续处理,通知接入层打断由mmc处理 */ NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_FDD); /* 通知mmc MMCMMC_INTER_ABORT_UTRAN_CTRL_PLMN_SEARCH_CNF*/ NAS_MMC_SndInterAbortUtranCtrlPlmnSearchCnfMsg(); /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvMmcInterSkipSearchWasIndMsg_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* 如果正在搜TD,就不需要进状态机处理,在搜到TD search cnf的时候会跳过W */ if (NAS_MMC_TIMER_STATUS_RUNING == NAS_MMC_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_TD_PLMN_SEARCH_CNF)) { return VOS_TRUE; } /* SKIP W时候,则设置当前为TDD模式 */ NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_TDD); /* 切换到适配模块的选网状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_PLMN_SELECTION); /* was的搜网回复消息在适配模块的选网状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvMasterModeCnf_ModeChange_WaitMasterModeCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg; /* 停等待主模回复定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_MASTERMODE_UTRAN_MODE_CNF); /* 取当前缓存的系统消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); NAS_UTRANCTRL_SaveBufferUtranSndMmcMsg( pstEntryMsg->ulEventType, (struct MsgCB *)pstEntryMsg->aucEntryMsgBuffer); /* 设置缓存消息有效标志 */ NAS_UTRANCTRL_SetReplaceMmcMsgFlg(VOS_TRUE); /* 退出MODE CHANGE状态机,切换到MAIN状态机 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); return VOS_FALSE; }
VOS_UINT32 NAS_UTRANCTRL_RcvTdPowerOffCnf_Main( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { /* 如果当前UTRANCTRL模的等开机回复时状态定时器不运行认为异常 */ if ( NAS_MMC_TIMER_STATUS_RUNING != NAS_UTRANCTRL_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_TD_POWER_OFF_CNF)) { /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTdPowerOffCnf_Main: Unexpected Plmnsrch msg!"); /* 丢弃该异常消息 */ return VOS_TRUE; } /* 停止MMC通过UTRANCTRL模块给UTRAN模发送关机消息时候起的定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_POWER_OFF_CNF); /* 切换到适配模块的关机状态机进行处理 */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_POWER_OFF); /* td的关机回复消息在适配模块的关机状态机进行处理 */ return VOS_TRUE; }
VOS_UINT32 NAS_UTRANCTRL_RcvRrmmPlmnSearchCnf_PlmnSelection_WaitWasPlmnSearchCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_PLMN_SEARCH_CNF_STRU *pstSrchCnfMsg; pstSrchCnfMsg = (RRMM_PLMN_SEARCH_CNF_STRU *)pstMsg; /* 停止保护定时器 */ NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_SEARCH_CNF); /* 如果搜网成功 */ if (RRC_PLMN_SEARCH_RLT_SPEC == pstSrchCnfMsg->ulSearchRlt) { /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 进MMC状态机处理 */ return VOS_FALSE; } /* 如果搜网失败,原因为NO RF,则直接进MMC处理,设置当前为FDD模式 */ if (RRC_PLMN_SEARCH_RLT_SPEC_NO_RF == pstSrchCnfMsg->ulSearchRlt) { NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_FDD); /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 进MMC状态机处理 */ return VOS_FALSE; } /* 根据搜网列表更新中国网络标记 */ NAS_UTRANCTRL_UpdateSearchedSpecTdMccFLg(NAS_UTRANCTRL_GetSpecTdMccListNum(), NAS_UTRANCTRL_GetSpecTdMccList(), &(pstSrchCnfMsg->PlmnIdList)); /* 根据中国网络标记设置utran工作模式 */ if (VOS_TRUE == NAS_UTRANCTRL_GetSearchedSpecTdMccFlg()) { NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_TDD); } else if ((0 != pstSrchCnfMsg->PlmnIdList.ulHighPlmnNum) || (0 != pstSrchCnfMsg->PlmnIdList.ulLowPlmnNum)) { /* 未搜到中国网络并且W携带非空列表,更新工作模式为FDD */ NAS_UTRANCTRL_SetCurrUtranMode(NAS_UTRANCTRL_UTRAN_MODE_FDD); } else { /* W携带空列表不修改工作模式 */ } /* 根据当前工作模式为TDD则需要回到TD下 */ if (NAS_UTRANCTRL_UTRAN_MODE_TDD == NAS_UTRANCTRL_GetCurrUtranMode()) { NAS_UTRANCTRL_SndGuAsSuspendReq(WUEPS_PID_WRR); /* 迁移状态到等待回TD时W的挂起回复状态 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_WAS_SUSPEND_CNF_BACK_TD); /* 启动保护定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_WAS_SUSPEND_CNF, TI_NAS_UTRANCTRL_WAIT_WAS_SUSPEND_CNF_LEN); /* 消息处理完成不需继续处理 */ return VOS_TRUE; } /* 状态机切换到MAIN */ NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_MAIN); /* 消息处理完成继续进入MMC状态机处理 */ return VOS_FALSE; }