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_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_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_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_VOID NAS_UTRANCTRL_SaveCurEntryMsg( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; VOS_UINT32 ulLen; /* 获得当前UTRANCTRL模块状态机入口消息的缓冲区地址 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); pstMsgHeader = (MSG_HEADER_STRU*)pstMsg; /* 如果是空消息 */ if ( VOS_NULL_PTR == pstMsg ) { pstEntryMsg->ulEventType = ulEventType; NAS_WARNING_LOG( WUEPS_PID_MMC, "NAS_MMC_SaveCurEntryMsg Entry Message Pointer is NULL!" ); return; } ulLen = pstMsgHeader->ulLength + VOS_MSG_HEAD_LENGTH; /* 将当前处理的入口消息拷贝到Context对应的缓冲区 */ PS_MEM_CPY( pstEntryMsg->aucEntryMsgBuffer, pstMsg, ulLen ); /* 填写Context中的参数 */ pstEntryMsg->ulEventType = ulEventType; return; }
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_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; }
NAS_UTRANCTRL_MASTER_MODE_ENUM_UINT8 NAS_UTRANCTRL_GetMasterMode_ModeChange(VOS_VOID) { NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg; MSG_HEADER_STRU *pstHead; NAS_UTRANCTRL_MASTER_MODE_ENUM_UINT8 enMasterMode; /* 取保存的入口消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); pstHead = (MSG_HEADER_STRU *)(pstEntryMsg->aucEntryMsgBuffer); switch (pstHead->ulSenderPid) { case WUEPS_PID_WRR: enMasterMode = NAS_UTRANCTRL_MASTER_MODE_WCDMA; break; case TPS_PID_RRC: enMasterMode = NAS_UTRANCTRL_MASTER_MODE_TDSCDMA; break; case UEPS_PID_GAS: enMasterMode = NAS_UTRANCTRL_MASTER_MODE_GSM; break; #if (FEATURE_ON == FEATURE_LTE) case PS_PID_MM: enMasterMode = NAS_UTRANCTRL_MASTER_MODE_LTE; break; #endif default: /* 异常打印 */ NAS_WARNING_LOG(WUEPS_PID_MMC, "NAS_UTRANCTRL_RcvTiWaitSlaveModeUtranModeCnfExpired_ModeChange_WaitSlaveModeCnf: ENTERED"); enMasterMode = NAS_UTRANCTRL_MASTER_MODE_BUTT; break; } return enMasterMode; }
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_RcvRrmmSuspendCnf_PlmnSelection_WaitWasSuspendCnf( 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_WAS_SUSPEND_CNF); /* 状态机打断标记不存在 */ if (VOS_FALSE == NAS_UTRANCTRL_GetAbortFlg_PlmnSelection()) { /* 向TDRRC发送指定搜网请求 */ NAS_UTRANCTRL_SndGuAsSpecPlmnSearchReq(TPS_PID_RRC); /* 迁移状态到等到TDRRC搜网回复 */ NAS_UTRANCTRL_FSM_SetCurrState(NAS_UTRANCTRL_PLMN_SELECTION_STA_WAIT_TD_PLMN_SEARCH_CNF); /* 启动定时器 */ NAS_UTRANCTRL_StartTimer(TI_NAS_UTRANCTRL_WAIT_TD_PLMN_SEARCH_CNF, TI_NAS_UTRANCTRL_WAIT_TD_PLMN_SEARCH_CNF_LEN); /* 消息处理完成不需继续进入MMC状态机处理 */ return VOS_TRUE; } /* 取当前缓存的系统消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); /* 取得当前缓存消息的头 */ pstMsgHeader = (MSG_HEADER_STRU *)pstEntryMsg->aucEntryMsgBuffer; /* 如果当前的入口消息为定时器超时,或者MMC发送的内部SKIP 搜索W消息,则需要构造搜网回复失败消息 */ if ( (VOS_PID_TIMER == pstMsgHeader->ulSenderPid) || ( (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 ); } 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_RcvRrmmPlmnSearchCnf_PlmnSelection_WaitWasPlmnSearchCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { RRMM_PLMN_SEARCH_CNF_STRU *pstSrchCnfMsg; NAS_UTRANCTRL_ENTRY_MSG_STRU *pstEntryMsg = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; /* 取当前缓存的系统消息 */ pstEntryMsg = NAS_UTRANCTRL_GetCurrEntryMsgAddr(); /* 取得当前缓存消息的头 */ pstMsgHeader = (MSG_HEADER_STRU *)pstEntryMsg->aucEntryMsgBuffer; 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; } /* 根据搜网列表更新中国网络标记 */ if (MMCMMC_INTER_SKIP_SEARCH_TDS_IND != pstMsgHeader->ulMsgName) { 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; }