예제 #1
0
VOS_VOID NAS_GMM_ResumeCcoFallbackCtx(VOS_VOID)
{

    /* 对g_GmmGlobalCtrl的成员变量赋值,赋值的来源
       来自于g_GmmGlobalCtrl.stBackupShare */

    NAS_MML_EQUPLMN_INFO_STRU          *pstBackupEplmnList;
    NAS_MML_EQUPLMN_INFO_STRU          *pstCurrentEplmnList;

#if (FEATURE_ON == FEATURE_LTE)
    NAS_MML_RPLMN_CFG_INFO_STRU        *pstRplmnCfgInfo = VOS_NULL_PTR;

    pstRplmnCfgInfo = NAS_MML_GetRplmnCfg();
#endif


    g_GmmGlobalCtrl.ucState                                 = g_GmmGlobalCtrl.stBackupShare.ucState;

    g_GmmGlobalCtrl.ucNetMod                                = g_GmmGlobalCtrl.stBackupShare.ucNtMod;

    g_GmmGlobalCtrl.ucSigConFlg                             = g_GmmGlobalCtrl.stBackupShare.ucPsSigConnFlg;

    g_MmSubLyrShare.GmmShare.ucPsIntegrityProtect           = g_GmmGlobalCtrl.stBackupShare.enPsIntegrityProtect;

    g_GmmRauCtrl.ucRauAttmptCnt                             = g_GmmGlobalCtrl.stBackupShare.ucRauAttmptCnt;

    gstGmmCasGlobalCtrl.GmmSrvState                         = g_GmmGlobalCtrl.stBackupShare.ucSrvState;

    /* PS域的security information */
    g_GmmGlobalCtrl.PsSecutityInfo = g_GmmGlobalCtrl.stBackupShare.stPsSecutityInfo;

    /* 上次驻留的系统信息  */
    g_GmmGlobalCtrl.SysInfo = g_GmmGlobalCtrl.stBackupShare.stSysInfo;

    /* UE 信息 */
    g_GmmGlobalCtrl.UeInfo = g_GmmGlobalCtrl.stBackupShare.stUeInfo;

    NAS_MML_SetPsUpdateStatus(g_GmmGlobalCtrl.stBackupShare.stUeInfo.ucUpdateSta);


    NAS_GMM_LogGmmStateInfo(g_GmmGlobalCtrl.ucState);

    GMM_ResumeTimer(GMM_TIMER_NOT_RESUME);

    pstBackupEplmnList  = &(g_GmmGlobalCtrl.stBackupShare.stBackupEquPlmnInfo);

    pstCurrentEplmnList = NAS_MML_GetEquPlmnList();

    if (VOS_TRUE == NAS_MML_IsEquPlmnInfoChanged(pstBackupEplmnList))
    {
        /* 将EPLMN保存到MML全局变量 */
        PS_MEM_CPY(pstCurrentEplmnList, pstBackupEplmnList, sizeof(NAS_MML_EQUPLMN_INFO_STRU));

        /* 将EPLMN更新到NV中 */
        NAS_GMM_WriteEplmnNvim(pstCurrentEplmnList);
    }


 #if (FEATURE_ON == FEATURE_LTE)
    NAS_GMM_WriteTinInfoNvim(g_GmmGlobalCtrl.stBackupShare.enTinType, pstRplmnCfgInfo->aucLastImsi);
    if (NAS_MML_TIN_TYPE_RAT_RELATED_TMSI != g_GmmGlobalCtrl.stBackupShare.enTinType)
    {
        Gmm_TimerStop(GMM_TIMER_T3323);

        /* ISR去激活,需要更新pdp激活是在ISR激活前激活的 */
        NAS_MML_UpdateAllPsBearIsrFlg(NAS_MML_PS_BEARER_EXIST_BEFORE_ISR_ACT);
    }

 #endif

    /* 根据备份前的3311定时器状态恢复启动 */
    if (0 != (g_GmmGlobalCtrl.stBackupShare.ucT3311Status & (0x00000001 << GMM_TIMER_T3311)))
    {
        Gmm_TimerStart(GMM_TIMER_T3311);
    }
	
	    
#if (defined(__PS_WIN32_RECUR__)) || ( VOS_WIN32 == VOS_OS_VER )
#else
{
    /* W下PMM-CONNECTED态需要停止3312 */
    if ((NAS_MML_NET_RAT_TYPE_WCDMA == NAS_MML_GetCurrNetRatType())
     && (GMM_TRUE == g_GmmGlobalCtrl.ucSigConFlg))
    {
#if (FEATURE_LTE == FEATURE_ON)
        NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_STOP);
#endif
        Gmm_TimerStop(GMM_TIMER_T3312);
    }

    /* G下ready timer在运行则停止3312 */
    if ((NAS_MML_NET_RAT_TYPE_WCDMA == NAS_MML_GetCurrNetRatType())
     && (GMM_TIMER_T3314_FLG == (g_GmmTimerMng.ulTimerRunMask & GMM_TIMER_T3314_FLG)))
    {
#if (FEATURE_LTE == FEATURE_ON)
        NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_STOP);
#endif
        Gmm_TimerStop(GMM_TIMER_T3312);
    }
}
    
#endif
}
예제 #2
0
VOS_VOID GMM_RcvMmcResumeInd(VOS_VOID* pRcvMsg)
{
    MMCGMM_RESUME_IND_ST                *pResumeIndMsg;
    RRMM_REL_IND_STRU                    stRrMmRelIndMsg;
    NAS_MML_NET_RAT_TYPE_ENUM_UINT8      enCurrNetType;

    VOS_UINT8                            ulFallBackFlg;

#if (FEATURE_ON == FEATURE_LTE)
    VOS_UINT32                           ulIsNeedDeactiveIsrFlg;
    NAS_MML_RPLMN_CFG_INFO_STRU         *pstRplmnCfgInfo;

    pstRplmnCfgInfo = NAS_MML_GetRplmnCfg();
#endif

    ulFallBackFlg = VOS_FALSE;

    enCurrNetType = NAS_MML_GetCurrNetRatType();
    /* GSM模式处理过程 */
    pResumeIndMsg = (MMCGMM_RESUME_IND_ST *)pRcvMsg;

    /* 如果在W下指示RABM当前系统模式, 根据PsResumeResult挂起或恢复RABM, bRatChangeFlg为TRUE,
       如果在G下等到收到系统消息后恢复RABM */
    if (NAS_MML_NET_RAT_TYPE_WCDMA == enCurrNetType)
    {
        /* L到W的HO成功, 需通知 RABM 等待等待W接入层RAB的恢复; */
        /* CCO回退过程中, 接入层会上报RAB SETUP和SUCCESS, 也需通知 RABM 等待等待W接入层RAB的恢复; */
        if ( MMC_SUSPEND_CAUSE_CELLCHANGE_FALLBACK == gstGmmSuspendCtrl.ucSuspendCause
#if   (FEATURE_ON == FEATURE_LTE)
          || ( (MMC_SUSPEND_CAUSE_HANDOVER == gstGmmSuspendCtrl.ucSuspendCause)
             &&(NAS_MML_NET_RAT_TYPE_LTE   == gstGmmSuspendCtrl.ucPreRat) )
#endif
        )
        {
            NAS_GMM_SndRabmSysSrvChgInd(enCurrNetType,
                                        VOS_TRUE,
                                        VOS_FALSE,
                                        VOS_FALSE);
        }
        else
        {
            NAS_GMM_SndRabmSysSrvChgInd(enCurrNetType,
                                        VOS_TRUE,
                                        VOS_FALSE,
                                        VOS_TRUE);
        }
    }
    else
    {
        NAS_GMM_SndRabmSysSrvChgInd(enCurrNetType,
                                        VOS_TRUE,
                                        VOS_TRUE,
                                        VOS_TRUE);
    }

    /* 接入技术发生改变 删除PS信令链接 */
    if ((gstGmmSuspendCtrl.ucPreRat != enCurrNetType)
     && (MMC_SUSPEND_CAUSE_HANDOVER != gstGmmSuspendCtrl.ucSuspendCause))
    {
        NAS_MML_SetPsSigConnStatusFlg(VOS_FALSE);

        g_GmmGlobalCtrl.ucSigConFlg = VOS_FALSE;
    }

    if ((VOS_TRUE                   == pResumeIndMsg->ucPsSigExistFlg)
     && (MMC_SUSPEND_CAUSE_HANDOVER == gstGmmSuspendCtrl.ucSuspendCause))
    {
        NAS_MML_SetPsSigConnStatusFlg(VOS_TRUE);
        g_GmmGlobalCtrl.ucSigConFlg = GMM_TRUE;
    }


    /* GMM向mmc发送resume rsp */
    NAS_GMM_SndMmcResumeRsp();


    if (GMM_SUSPENDED_NORMAL_SERVICE != g_GmmGlobalCtrl.ucState)
    {
        GMM_LOG_WARN("GMM_RcvMmcResumeInd:Receive MMCGMM_RESUME_IND in abnormal State.");
        return;
    }

    if (MMC_SUSPEND_CAUSE_CELLCHANGE_FALLBACK == gstGmmSuspendCtrl.ucSuspendCause )
    {
        NAS_GMM_ResumeCcoFallbackCtx();

        /* 在CCO过程中T3314可能超时,所以需要根据T3314的运行状态调整服务状态 */
        if ((VOS_FALSE == NAS_GMM_QryTimerStatus(GMM_TIMER_T3314))
         && (0xffffffff != gstGmmCasGlobalCtrl.ulReadyTimerValue)
         && (GMM_AGB_GPRS_READY == gstGmmCasGlobalCtrl.GmmSrvState))
        {
            gstGmmCasGlobalCtrl.GmmSrvState = GMM_AGB_GPRS_STANDBY;
        }

        if (GMM_REGISTERED_NORMAL_SERVICE == g_GmmGlobalCtrl.stBackupShare.ucState)
        {
            gstGmmSuspendCtrl.ucPreState = GMM_REGISTERED_NORMAL_SERVICE;
        }

        ulFallBackFlg = VOS_TRUE;

    }

    /*如果发生过系统间改变,需要通知接入层PTMSI信息*/
    if ( ( gstGmmSuspendCtrl.ucPreRat != enCurrNetType )
      && ( ( NAS_MML_NET_RAT_TYPE_WCDMA == enCurrNetType )
        || ( NAS_MML_NET_RAT_TYPE_GSM == enCurrNetType ) ) )
    {

        /* 因为在进行TC测试发生系统间切换时,媒体无法进行声码器切换,
           在发生系统间切换时,并且切换成功时,需要通知TC切换事件,以便TC可以通知媒体.
           L to G时 不需要发此消息 */
        if ( (GMM_TC_ACTIVE == gstGmmSuspendCtrl.ucPreState)
          && (gstGmmSuspendCtrl.ucPreRat != NAS_MML_NET_RAT_TYPE_LTE) )
        {
            NAS_GMM_SndTcHandoverInd();
        }

#if (FEATURE_ON == FEATURE_LTE)
        ulIsNeedDeactiveIsrFlg = NAS_GMM_IsNeedDeactiveIsr_InterSys(gstGmmSuspendCtrl.ucPreRat, enCurrNetType);
        if (VOS_TRUE == ulIsNeedDeactiveIsrFlg)
        {
            NAS_GMM_WriteTinInfoNvim(NAS_MML_TIN_TYPE_GUTI, pstRplmnCfgInfo->aucLastImsi);
            Gmm_TimerStop(GMM_TIMER_T3323);

            /* ISR去激活,需要更新pdp激活是在ISR激活前激活的 */
            NAS_MML_UpdateAllPsBearIsrFlg(NAS_MML_PS_BEARER_EXIST_BEFORE_ISR_ACT);
        }
#endif

        /* 发生W到G异系统切换 */
        if (NAS_MML_NET_RAT_TYPE_GSM == enCurrNetType)
        {
            g_MmSubLyrShare.GmmShare.ucPsIntegrityProtect = NAS_MML_RRC_INTEGRITY_PROTECT_DEACTIVE;
            if ((0x10 != (gstGmmSuspendCtrl.ucPreState & 0xF0))
             && (GMM_REGISTERED_INITIATED != gstGmmSuspendCtrl.ucPreState))
            {
#if (FEATURE_LTE == FEATURE_ON)
                if (GMM_TIMER_T3312_FLG != (GMM_TIMER_T3312_FLG & g_GmmTimerMng.ulTimerRunMask))
                {
                    NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_START);
                }
#endif

                Gmm_TimerStart(GMM_TIMER_T3312);
            }
        }

        if ( (NAS_MML_NET_RAT_TYPE_GSM == enCurrNetType)
          || (NAS_MML_NET_RAT_TYPE_WCDMA == enCurrNetType))
        {
            Gmm_SndRrmmNasInfoChangeReq(RRC_NAS_MASK_PTMSI_RAI);
        }

        if ((NAS_MML_NET_RAT_TYPE_WCDMA == enCurrNetType)
         && (GMM_TRUE == gstGmmCasGlobalCtrl.ucTlliAssignFlg))
        {
            NAS_GMM_SuspendLlcForInterSys();

            if (MMC_SUSPEND_CAUSE_CELLCHANGE != gstGmmSuspendCtrl.ucSuspendCause)
            {
                gstGmmCasGlobalCtrl.GmmSrvState = GMM_AGB_GPRS_STANDBY;

                Gmm_TimerStop(GMM_TIMER_T3314);
            }

            if ((0x10 != (gstGmmSuspendCtrl.ucPreState & 0xF0))
             && (GMM_REGISTERED_INITIATED != gstGmmSuspendCtrl.ucPreState))
            {
#if (FEATURE_LTE == FEATURE_ON)
                if (GMM_TIMER_T3312_FLG != (GMM_TIMER_T3312_FLG & g_GmmTimerMng.ulTimerRunMask))
                {
                    NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_START);
                }
#endif
                Gmm_TimerStart(GMM_TIMER_T3312);
            }
        }

        /* 发生异系统切换从W到G,如果存在建链请求则清除 */
        if ((NAS_MML_NET_RAT_TYPE_WCDMA == gstGmmSuspendCtrl.ucPreRat)
         && ((GMM_RRC_RRMM_EST_CNF_FLG == (g_GmmReqCnfMng.ucCnfMask & GMM_RRC_RRMM_EST_CNF_FLG))
           || (GMM_SERVICE_REQUEST_INITIATED == gstGmmSuspendCtrl.ucPreState)))
        {
            Gmm_TimerStop(GMM_TIMER_PROTECT_FOR_SIGNALING);

            g_GmmReqCnfMng.ucCnfMask &= ~GMM_RRC_RRMM_EST_CNF_FLG;

            Gmm_ComStaChg(gstGmmSuspendCtrl.ucPreState);
            stRrMmRelIndMsg.ulCnDomainId              = RRC_NAS_PS_DOMAIN;
            stRrMmRelIndMsg.ulRelCause                = RRC_REL_CAUSE_RR_NORM_EVENT;
            stRrMmRelIndMsg.ulRrcConnStatus           = RRC_RRC_CONN_STATUS_ABSENT;
            Gmm_RcvRrmmRelInd(&stRrMmRelIndMsg);

            gstGmmSuspendCtrl.ucPreState = g_GmmGlobalCtrl.ucState;
        }
    }

    if (NAS_MML_NET_RAT_TYPE_GSM == enCurrNetType)
    {
        g_GmmGlobalCtrl.ucSigConFlg = GMM_TRUE;

        /* GMM_TIMER_PROTECT_FOR_SIGNALING 不需要恢复 */
        gstGmmSuspendCtrl.ulTimerRunMask &= ~(VOS_UINT32)(0x00000001 << GMM_TIMER_PROTECT_FOR_SIGNALING);

        g_GmmReqCnfMng.ucCnfMask &= ~GMM_RRC_RRMM_EST_CNF_FLG;

        /* T3340不需要恢复 */
        gstGmmSuspendCtrl.ulTimerRunMask &= ~(VOS_UINT32)(GMM_TIMER_T3340_FLG);

        /*如果PS域有短消息待发送,则通知SMS模块发送失败*/
        if (GMM_TRUE == g_GmmServiceCtrl.ucSmsFlg)
        {                                                                         /* SMS在等待响应                            */
            Gmm_SndSmsErrorInd(GMM_SMS_SIGN_NO_EXIST);                              /* 发送PMMSMS_ERROR_IND                     */
            g_GmmServiceCtrl.ucSmsFlg = GMM_FALSE;
        }
        /*add,sunxibo,2007-10-12,for intersystem end*/
    }
    /* ==>A32D12436 */
    else if (NAS_MML_NET_RAT_TYPE_GSM == gstGmmSuspendCtrl.ucPreRat)
    {
        if (VOS_FALSE == ulFallBackFlg)
		{
            g_GmmGlobalCtrl.ucSigConFlg = GMM_FALSE;
        }

        Gmm_TimerStop(GMM_TIMER_T3314);
        gstGmmSuspendCtrl.ulTimerRunMask &= ~(VOS_UINT32)(0x00000001 << GMM_TIMER_PROTECT_OLD_TLLI);

    }
    else
    {
    }
    /* <==A32D12436 */
    Gmm_TimerStop(GMM_TIMER_SUSPENDED);

#if   (FEATURE_ON == FEATURE_LTE)

    if ( NAS_MML_NET_RAT_TYPE_LTE == enCurrNetType )
    {
        NAS_GMM_ProcResumeToLTE();

        return ;
    }
#endif

#if (FEATURE_ON == FEATURE_CL_INTERWORK)
    /* 异系统变换到EHRPD下的处理 */
    if ( MMC_RESUME_ORIGEN_HRPD == pResumeIndMsg->ucResumeOrigen )
    {
        NAS_GMM_ProcResumeToHRPD(pResumeIndMsg);

        return;
    }
#endif

    switch (pResumeIndMsg->ucPsResumeResult)
    {
        case MMC_RESUME_RESULT_SUCCESS:
            if (gstGmmSuspendCtrl.ucPreRat == enCurrNetType)
            {
                GMM_LOG_INFO("GMM_RcvMmcResumeInd:Switch back,PS resume successfully.");
                /*回退成功处理函数*/
                GMM_ResumeTimer(GMM_TIMER_RESUME);
                Gmm_ComStaChg(gstGmmSuspendCtrl.ucPreState);
                GMM_ResumeSuccess();

                if ((GMM_TRUE == g_GmmGlobalCtrl.ucFollowOnFlg)
                 && (GMM_SERVICE_REQUEST_INITIATED != gstGmmSuspendCtrl.ucPreState))
                {
                    g_GmmGlobalCtrl.ucFollowOnFlg = GMM_FALSE;
                    NAS_MML_SetPsServiceBufferStatusFlg(VOS_FALSE);

                    Gmm_RoutingAreaUpdateHandleFollowOn();
                }
            }
            else if ((0x10 == (gstGmmSuspendCtrl.ucPreState & 0xF0))
                  || (GMM_REGISTERED_INITIATED == gstGmmSuspendCtrl.ucPreState))
            {
                GMM_LOG_INFO("GMM_RcvMmcResumeInd:PS not register.");
                /*回退成功处理函数*/
                GMM_ResumeTimer(GMM_TIMER_RESUME);
                Gmm_TimerStop( GMM_TIMER_T3310 );
                Gmm_ComStaChg(gstGmmSuspendCtrl.ucPreState);
                /*  在注册过程中,说明原来在去注册正常服务状态 */
                if (GMM_REGISTERED_INITIATED == gstGmmSuspendCtrl.ucPreState)
                {
                    Gmm_ComStaChg(GMM_DEREGISTERED_NORMAL_SERVICE);
                }

                GMM_ResumeFailure();
                
                /* resume成功时清除缓存 */
                NAS_GMM_ProcBufferSmMsg_ResumeSuccess();
            }
            /*  rau init状态cco回退没有恢复t3330,需要重新启动,状态不变还是GMM_ROUTING_AREA_UPDATING_INITIATED,
                t3330超时重新发起rau或网络释放连接,停t3330,启动t3311,t3311超时再进行rau */
            else if ((GMM_ROUTING_AREA_UPDATING_INITIATED == g_GmmGlobalCtrl.ucState)
                  && (MMC_SUSPEND_CAUSE_CELLCHANGE_FALLBACK == gstGmmSuspendCtrl.ucSuspendCause))
            {
                Gmm_TimerStart(GMM_TIMER_T3330);
            }
            else if ((MMC_SUSPEND_CAUSE_HANDOVER == gstGmmSuspendCtrl.ucSuspendCause)
                  && (NAS_MML_NET_RAT_TYPE_LTE == gstGmmSuspendCtrl.ucPreRat)
                  && (NAS_MML_NET_RAT_TYPE_WCDMA == enCurrNetType))
            {
                Gmm_ComStaChg(GMM_REGISTERED_NORMAL_SERVICE);

                Gmm_TimerStop(GMM_TIMER_T3312);

                NAS_MML_SetEpsSigConnStatusFlg(VOS_FALSE);

                NAS_MML_SetEpsServiceConnStatusFlg(VOS_FALSE);

                /* PS信令连接的更新依赖于MMC转发的resume ind指示 */
            }
            else
            {
                GMM_LOG_INFO("GMM_RcvMmcResumeInd:Intersystem change,PS resume successfully.");
                if ( MMC_SUSPEND_CAUSE_HANDOVER != gstGmmSuspendCtrl.ucSuspendCause )
                {
                    Gmm_TimerStart(GMM_TIMER_SUSPENDED);
                }
                Gmm_ComStaChg(GMM_SUSPENDED_WAIT_FOR_SYSINFO);
            }

            if ( gstGmmSuspendCtrl.ucPreRat != enCurrNetType )
            {
                if ( NAS_MML_NET_RAT_TYPE_WCDMA == enCurrNetType)
                {
                    /* 异重选,cco,cco回退恢复时需要用此全局变量记录,便于后续建链的原因值填写 */
                    if ((MMC_SUSPEND_CAUSE_CELLRESELECT == gstGmmSuspendCtrl.ucSuspendCause)
                        ||(MMC_SUSPEND_CAUSE_REDIRECTION == gstGmmSuspendCtrl.ucSuspendCause)
                        ||(MMC_SUSPEND_CAUSE_CELLCHANGE == gstGmmSuspendCtrl.ucSuspendCause))
                    {
                        g_GmmInterRatCellReselect = 1;
                    }
                }
            }

            break;
        case MMC_RESUME_RESULT_FAILURE:
            GMM_LOG_INFO("GMM_RcvMmcResumeInd:PS resume failure.");
            GMM_ResumeTimer(GMM_TIMER_RESUME);
            Gmm_ComStaChg(gstGmmSuspendCtrl.ucPreState);
            GMM_ResumeFailure();
            break;
        case MMC_RESUME_GPRS_SUSPENSION:
            if (NAS_MML_NET_RAT_TYPE_GSM != enCurrNetType)
            {
                GMM_LOG_WARN("GMM_RcvMmcResumeInd:PS resume result of MMCGMM_RESUME_IND is abnormal.");
                GMM_ResumeTimer(GMM_TIMER_RESUME);
                Gmm_ComStaChg(gstGmmSuspendCtrl.ucPreState);
                GMM_ResumeFailure();
                return;
            }
            GMM_LOG_INFO("GMM_RcvMmcResumeInd:PS resume result is GPRS_SUSPENSION.");
            if (gstGmmSuspendCtrl.ucPreRat == enCurrNetType)
            {
                GMM_BufferMsgDump();
                Gmm_HoldBufferFree();                                           /* 清除保留消息                             */
                Gmm_ComCnfHandle();
                Gmm_ComStaChg(GMM_GPRS_SUSPENSION);
                /*add,sunxibo,2007-10-05,for intersystem begin*/
                if (GMM_REGISTERED_NORMAL_SERVICE == gstGmmSuspendCtrl.ucPreState)
                {
                    g_GmmGlobalCtrl.ucSuspendProc                = GMM_TRUE;
                }
                /*add,sunxibo,2007-10-05,for intersystem end*/
            }
            else
            {
                Gmm_ComStaChg(GMM_SUSPENDED_GPRS_SUSPENSION);
            }
            break;
        default:
            GMM_LOG_WARN("GMM_RcvMmcResumeInd:Receive MMCGMM_RESUME_IND in abnormal State.");
            break;
    }
}
VOS_VOID GMM_TimReadyExpired(VOS_VOID)
{
    VOS_UINT32                          ulT3311Status;
    VOS_UINT32                          ulT3302Status;

    if (GMM_DEREGISTERED_NORMAL_SERVICE == g_GmmGlobalCtrl.ucState)
    {
        gstGmmCasGlobalCtrl.GmmSrvState     = GMM_IU_PMM_DETACHED;
    }
    else
    {
        gstGmmCasGlobalCtrl.GmmSrvState     = GMM_AGB_GPRS_STANDBY;
    }

    /* WCDMA模式,由HSS 4100 V100R001代码处理 */
    if (NAS_MML_NET_RAT_TYPE_WCDMA == NAS_MML_GetCurrNetRatType())
    {
        /* 在注册状态,并且服务状态是空闲态时,启动3312 */
        if ((0x20 == (g_GmmGlobalCtrl.ucState & 0xF0))
         && (GMM_FALSE == g_GmmGlobalCtrl.ucSigConFlg)
         && (GMM_TRUE != g_GmmRauCtrl.ucT3312ExpiredFlg ))
        {
#if (FEATURE_LTE == FEATURE_ON)
            if (GMM_TIMER_T3312_FLG != (GMM_TIMER_T3312_FLG & g_GmmTimerMng.ulTimerRunMask))
            {
                NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_START);
            }
#endif
            Gmm_TimerStart(GMM_TIMER_T3312);
        }
        return;     /* 不需处理返回 */
    }

    if (GMM_DEREGISTERED_NORMAL_SERVICE == g_GmmGlobalCtrl.ucState)
    {
        gstGmmCasGlobalCtrl.GmmSrvState     = GMM_IU_PMM_DETACHED;
    }
    else
    {
        ulT3311Status = NAS_GMM_QryTimerStatus(GMM_TIMER_T3311);
        ulT3302Status = NAS_GMM_QryTimerStatus(GMM_TIMER_T3302);

        if ((GMM_REGISTERED_ATTEMPTING_TO_UPDATE_MM == g_GmmGlobalCtrl.ucState)
          || (GMM_REGISTERED_ATTEMPTING_TO_UPDATE == g_GmmGlobalCtrl.ucState))
        {
            if ((VOS_FALSE == ulT3311Status)
             && (VOS_FALSE == ulT3302Status))
            {
#if (FEATURE_LTE == FEATURE_ON)
                if (GMM_TIMER_T3312_FLG != (GMM_TIMER_T3312_FLG & g_GmmTimerMng.ulTimerRunMask))
                {
                    NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_START);
                }
#endif
                Gmm_TimerStart(GMM_TIMER_T3312);
            }
        }
        else
        {
            if ((0x10 != (g_GmmGlobalCtrl.ucState & 0xF0))
             && (GMM_REGISTERED_INITIATED != g_GmmGlobalCtrl.ucState))
                {
#if (FEATURE_LTE == FEATURE_ON)
                if (GMM_TIMER_T3312_FLG != (GMM_TIMER_T3312_FLG & g_GmmTimerMng.ulTimerRunMask))
                {
                    NAS_GMM_SndLmmTimerInfoNotify(GMM_TIMER_T3312, GMM_LMM_TIMER_START);
                }
#endif
                Gmm_TimerStart(GMM_TIMER_T3312);
            }
        }

        gstGmmCasGlobalCtrl.GmmSrvState     = GMM_AGB_GPRS_STANDBY;
    }

    NAS_GMM_SndGasInfoChangeReq(NAS_GSM_MASK_GSM_GMM_STATE);


    return;
}