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;
}
Exemple #2
0
VOS_VOID NAS_MM_NormalCsfbHoWaitSysinfoTimeOut(VOS_VOID)
{

#if (FEATURE_ON == FEATURE_LTE)    
    /* 处于CSFB流程发起LAU流程 */
    if ( VOS_TRUE == NAS_MML_IsCsfbServiceStatusExist())
    {
        g_MmGlobalInfo.LuInfo.ucLuType = MM_IE_LUT_NORMAL_LU;
        Mm_ComLuOnly();
    }
#endif
    
    return;
}
VOS_UINT32 NAS_UTRANCTRL_RcvWasPlmnSrchCnf_Main(
    VOS_UINT32                          ulEventType,
    struct MsgCB                       *pstMsg
)
{
    RRMM_PLMN_SEARCH_CNF_STRU          *pstSrchCnfMsg;
    NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enUtranMode;

    VOS_UINT32                          ulExistHongKongMcc;
    NAS_MMC_DPLMN_NPLMN_CFG_INFO_STRU  *pstDPlmnNPlmnInfo = VOS_NULL_PTR;
    VOS_UINT8                           ucSwitchOnPlmnSearchFlag;

    ulExistHongKongMcc = VOS_FALSE;
    pstDPlmnNPlmnInfo  = NAS_MMC_GetDPlmnNPlmnCfgInfo();
    ucSwitchOnPlmnSearchFlag = NAS_UTRANCTRL_GetSwithOnPlmnSearchFlag();

    enUtranMode     = NAS_UTRANCTRL_GetCurrUtranMode();

    pstSrchCnfMsg   = (RRMM_PLMN_SEARCH_CNF_STRU *)pstMsg;



    /* 如果是LIST搜网的结果回复则直接透传到MMC状态机处理 */
    /* 降圈复杂度 */
    if (VOS_TRUE == NAS_MML_IsPlmnListSrchRslt(pstSrchCnfMsg->ulSearchRlt))
    {
    
        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 如果当前UTRANCTRL模的等指定搜网回复时状态定时器运行则停止定时器 */
    if (NAS_MMC_TIMER_STATUS_RUNING == NAS_UTRANCTRL_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_SEARCH_CNF))
    {
        NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_WAS_PLMN_SEARCH_CNF);
    }

    /* 非自动切换模式,消息直接透传到MMC状态机处理 */
    if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO != NAS_UTRANCTRL_GetCurUtranSwitchMode())
    {
        /* 清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }


    /* 自动切换模式下如果是搜网失败NORF/快速指定搜网或指定搜网成功直接透传快速指定搜网回复到MMC状态机处理 */
    if ((RRC_PLMN_SEARCH_SPEC_FAST      == NAS_UTRANCTRL_GetBufferedPlmnSearchReqType())
     || (RRC_PLMN_SEARCH_RLT_SPEC       == pstSrchCnfMsg->ulSearchRlt)
     || (RRC_PLMN_SEARCH_RLT_SPEC_NO_RF == pstSrchCnfMsg->ulSearchRlt))
    {

        /* 清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 自动切换模式下,CSFB标志存在时,并且当前是FDD模式,不再搜TD */
    if ((VOS_TRUE                       == NAS_MML_IsCsfbServiceStatusExist())
     && (NAS_UTRANCTRL_UTRAN_MODE_FDD   == enUtranMode))
    {
        /* 清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入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);
    }


    ulExistHongKongMcc = NAS_UTRANCTRL_IsSpecPlmnMccInGuRrcPlmnIdList(NAS_UTRANCTRL_HONGKONG_MCC, &(pstSrchCnfMsg->PlmnIdList));

    if ((NAS_UTRANCTRL_UTRAN_MODE_FDD == NAS_UTRANCTRL_GetCurrUtranMode())
     && (VOS_FALSE == ulExistHongKongMcc)
     && (VOS_TRUE == pstDPlmnNPlmnInfo->ucActiveFlg)
     && (VOS_TRUE == ucSwitchOnPlmnSearchFlag)
     && ((pstSrchCnfMsg->PlmnIdList.ulHighPlmnNum != 0)
      || (pstSrchCnfMsg->PlmnIdList.ulLowPlmnNum != 0)))
    {
        /* 开机搜网场景,如果was搜网结果中没有一个网络mcc在tds mcc列表中且不包括香港网络,且高低质量网络个数不全为0,
           则跳过tds搜网,清除缓存*/
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 切换到适配模块的选网状态机进行处理 */
    NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_PLMN_SELECTION);

    /* was的搜网回复消息在适配模块的选网状态机进行处理  */
    return VOS_TRUE;
}
VOS_UINT32 NAS_UTRANCTRL_RcvTdPlmnSrchCnf_Main(
    VOS_UINT32                          ulEventType,
    struct MsgCB                       *pstMsg
)
{
    RRMM_PLMN_SEARCH_CNF_STRU          *pstSrchCnfMsg = VOS_NULL_PTR;

    VOS_UINT32                          ulIsOtherModemPlmnInTdMccList;
    NAS_MML_PLMN_ID_STRU               *pstOtherModemPlmnId = VOS_NULL_PTR;
    NAS_UTRANCTRL_UTRAN_MODE_ENUM_UINT8 enUtranMode;

    enUtranMode     = NAS_UTRANCTRL_GetCurrUtranMode();

    pstSrchCnfMsg   = (RRMM_PLMN_SEARCH_CNF_STRU *)pstMsg;

    /* 如果是LIST搜网的结果回复则直接透传到MMC状态机处理 */
    /* 降圈复杂度 */
    if (VOS_TRUE == NAS_MML_IsPlmnListSrchRslt(pstSrchCnfMsg->ulSearchRlt))
    {
        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 如果当前UTRANCTRL模的等指定搜网回复时状态定时器运行则停止定时器 */
    if (NAS_MMC_TIMER_STATUS_RUNING == NAS_UTRANCTRL_GetTimerStatus(TI_NAS_UTRANCTRL_WAIT_TD_PLMN_SEARCH_CNF))
    {
        NAS_UTRANCTRL_StopTimer(TI_NAS_UTRANCTRL_WAIT_TD_PLMN_SEARCH_CNF);
    }

    /* 非自动切换模式,消息直接透传到MMC状态机处理 */
    if (NAS_UTRANCTRL_UTRAN_SWITCH_MODE_AUTO != NAS_UTRANCTRL_GetCurUtranSwitchMode())
    {
        /* 清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 自动切换模式下如果是快速指定搜网或指定搜网成功直接透传快速指定搜网回复到MMC状态机处理 */
    if ((RRC_PLMN_SEARCH_SPEC_FAST == NAS_UTRANCTRL_GetBufferedPlmnSearchReqType())
     || (RRC_PLMN_SEARCH_RLT_SPEC  == pstSrchCnfMsg->ulSearchRlt))
    {
        /* 清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 自动切换模式下,CSFB标志存在时,并且当前是FDD模式,不再搜TD */
    if ((VOS_TRUE                       == NAS_MML_IsCsfbServiceStatusExist())
     && (NAS_UTRANCTRL_UTRAN_MODE_TDD   == enUtranMode))
    {
        /* 清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入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);

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    pstOtherModemPlmnId = NAS_MMC_GetOtherModemPlmnId();
    ulIsOtherModemPlmnInTdMccList = NAS_MML_IsMccInDestMccList(pstOtherModemPlmnId->ulMcc,
                                                NAS_UTRANCTRL_GetSpecTdMccListNum(),
                                                NAS_UTRANCTRL_GetSpecTdMccList());

    if ((VOS_TRUE == NAS_MMC_GetUtranSkipWPlmnSearchFlag())
     && (VOS_TRUE == ulIsOtherModemPlmnInTdMccList))
    {
        /* 如果副卡已驻留中国网络跳过搜w网络,清除缓存的搜网请求消息 */
        NAS_UTRANCTRL_ClearBufferedSndUtranReqMsg();

        /* 进入MMC状态机处理 */
        return VOS_FALSE;
    }

    /* 切换到适配模块的选网状态机进行处理 */
    NAS_UTRANCTRL_SwitchCurrFsmCtx(NAS_UTRANCTRL_FSM_PLMN_SELECTION);

    /* tdrrc的搜网回复消息在适配模块的选网状态机进行处理 */
    return VOS_TRUE;
}