VOS_VOID NAS_RABM_RcvGmmVoicePreferMmlProcStatusQryCnf( struct MsgCB *pstMsg ) { GMM_RABM_MML_PROC_STATUS_QRY_CNF_STRU *pstProcStatus; pstProcStatus = (GMM_RABM_MML_PROC_STATUS_QRY_CNF_STRU*)pstMsg; if ( (VOS_TRUE != pstProcStatus->stMmlProcStatus.bitOpGmmSpecificProcedure) && (VOS_TRUE != pstProcStatus->stMmlProcStatus.bitOpPsSmsService) && (VOS_TRUE == pstProcStatus->stMmlProcStatus.bitOpCsSignal)) { NAS_RABM_VoicePreferActivateJudgeStepTwo(); } /* 条件不满足,如果不超过最大重试查询次数延迟后再次查询*/ else if (NAS_RABM_VoicePreferGetReQryGmmCnt() < VP_REQRY_GMM_MAX_TIMES) { NAS_RabmStartTimer(RABM_TIMER_NAME_COMMON, RABM_TIMER_VOICEPREFER_REQRY_GMM_DELAY); } else { } return; }
VOS_VOID NAS_RABM_VoicePreferActivateJudgeStepOne(VOS_VOID) { VOS_UINT32 ulVpActMatch; VOS_UINT32 ulOldVpStatus; ulVpActMatch = NAS_RABM_IsVpActivateMatchInStepOne(); ulOldVpStatus = NAS_RABM_VoicePreferGetVpStatus(); /* 不满足初步激活条件*/ if (VOS_FALSE == ulVpActMatch) { /* 定时器超时事件可能在队列中,就处理了AP 下发的停止VoicePrefer ,延迟超时处理中需要判断该标志 */ NAS_RABM_VoicePreferSetStopVpFlag(VOS_TRUE); /* 把延迟激活和重试查询GMM定时器停止,函数里面会判断定时器是否启动 */ NAS_RabmStopTimer(RABM_TIMER_NAME_COMMON, RABM_TIMER_VOICEPREFER_DELAY); NAS_RabmStopTimer(RABM_TIMER_NAME_COMMON, RABM_TIMER_VOICEPREFER_REQRY_GMM_DELAY); /* 当前已经处于激活状态*/ if (VOS_TRUE == ulOldVpStatus) { /* 使VP去激活,并通知其他模块*/ NAS_RABM_VoicePreferSetVpStatus(VOS_FALSE); NAS_RABM_SendVpActIndToOtherModule(VOS_FALSE); } /* 当前不处于激活状态,前面已经处理,这里不再进行任何操作*/ } /* 满足初步激活条件 */ else { /*满足初步激活条件并且已经处于激活态不需要任何操作*/ if(VOS_TRUE == ulOldVpStatus) { NAS_NORMAL_LOG(WUEPS_PID_RABM, "NAS_RABM_VoicePreferActivateJudgeStepOne: VP Already Activated"); } /* 满足初步激活条件但是当前并没有处于激活状态 */ else { /* 如果延迟定时器没有启动,启动延迟定时器*/ if(NAS_RABM_TIMER_STATUS_STOP == NAS_RABM_CheckTimerStatus(RABM_TIMER_NAME_COMMON,RABM_TIMER_VOICEPREFER_DELAY)) { NAS_RabmStartTimer(RABM_TIMER_NAME_COMMON, RABM_TIMER_VOICEPREFER_DELAY); /* 延迟激活定时器启动时应停止延迟查询GMM定时器 */ NAS_RabmStopTimer(RABM_TIMER_NAME_COMMON, RABM_TIMER_VOICEPREFER_REQRY_GMM_DELAY); NAS_RABM_VoicePreferSetStopVpFlag(VOS_FALSE); } /* 如果延迟定时器已经启动,保持原来定时器不重新启动*/ } } return; }
VOS_VOID NAS_RabmSmPdpActivateIndMsg( VOS_VOID *pMsg ) { RABMSM_ACTIVATE_IND_STRU *pstPdpActivateIndMsg; RABM_NSAPI_ENUM NsapiIndex; QCI_TYPE_ENUM_UINT8 enQci; pstPdpActivateIndMsg = ( RABMSM_ACTIVATE_IND_STRU * )pMsg; if ( ( pstPdpActivateIndMsg->ulNsapi < RABM_MIN_NSAPI_NUMBER ) || ( pstPdpActivateIndMsg->ulNsapi > RABM_MAX_NSAPI_NUMBER ) ) { /*打印警告信息---入口消息非法:*/ RABM_LOG_WARNING( "NAS_RabmSmPdpActivateIndMsg:WARNING:The NSAPI item of the Entry Parameter is BEYOND range!" ); return; } if ( ( RABMSM_ACT_MSG_1 != pstPdpActivateIndMsg->ulActMsgType ) && ( RABMSM_ACT_MSG_2 != pstPdpActivateIndMsg->ulActMsgType ) ) { /*打印警告信息---入口消息中消息的标识非法:*/ RABM_LOG1_WARNING( "NAS_RabmSmPdpActivateIndMsg:WARNING:The MsgType item of the Entry Parameter is ERROR!: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); return; } NsapiIndex = ( RABM_NSAPI_ENUM )( pstPdpActivateIndMsg->ulNsapi - RABM_2G_NSAPI_OFFSET ); switch ( gastRabm2GEntity[NsapiIndex].State ) /*该NSAPI所对应的状态*/ { case RABM_2G_NULL: if ( RABMSM_ACT_MSG_1 == pstPdpActivateIndMsg->ulActMsgType ) { /*打印流程信息---收到第一条PDP激活消息:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:RECEIVE The FIRST PdpActivateInd Msg: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); /*获取ucPppFlg:*/ if( RABM_SM_PPP_PROT == pstPdpActivateIndMsg->ulPppFlag ) { gastRabm2GEntity[NsapiIndex].ucPppFlg = RABM_SM_PPP_PROT; } else { gastRabm2GEntity[NsapiIndex].ucPppFlg = RABM_SM_IP_PROT; } return; } if ((RABMSM_ACT_MSG_2 == pstPdpActivateIndMsg->ulActMsgType) && (VOS_TRUE == NAS_RABM_GetDataSuspendFlg())) { /*打印流程信息---状态切换:*/ RABM_LOG1_NORMAL( "STATE RABM_2G_NULL state CHANGE TO RABM_DATA_TRANS_STOP state: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); /*将该NSAPI的状态置为RABM_DATA_TRANS_STOP:*/ RABM_SetGState(NsapiIndex, RABM_DATA_TRANS_STOP); } else { /*启动Rabm.act.req.T1定时器:*/ NAS_RabmStartTimer( ( RABM_TIMER_NAME_ENUM )NsapiIndex, RABM_TIMER_PARA_ACT_REQ_T1 ); /*打印流程信息---启动了Rabm.act.req.T1定时器:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:Start Rabm.act.req.T1 Timer SUCCESS: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); /*将该NSAPI的状态置为RABM_NSAPI_OK_TRANSMODE_NO:*/ RABM_SetGState(NsapiIndex, RABM_NSAPI_OK_TRANSMODE_NO); /*打印流程信息---状态切换:*/ RABM_LOG1_NORMAL( "STATE RABM_2G_NULL state CHANGE TO RABM_NSAPI_OK_TRANSMODE_NO state: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); } gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = pstPdpActivateIndMsg->Qos.ulLength; PS_MEM_CPY(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, pstPdpActivateIndMsg->Qos.aucQosValue, NAS_RABM_MAX_QOS_LEN); /*创建RAB_MAP映射实体*/ NAS_RABM_CreateRabMapEntity((VOS_UINT8)(pstPdpActivateIndMsg->ulNsapi), (VOS_UINT8)(pstPdpActivateIndMsg->ulLinkdNsapi), (VOS_UINT8)(pstPdpActivateIndMsg->ulNsapi)); /* 给CDS发送消息通知CDS QOS信息 */ enQci = NAS_RABM_GetQciFromQos(gastRabm2GEntity[NsapiIndex].stQos.ulQosLength, gastRabm2GEntity[NsapiIndex].stQos.aucQosValue); NAS_RABM_SndCdsQosFcRabCreateInd(NsapiIndex + RABM_NSAPI_OFFSET, enQci); break; case RABM_NSAPI_OK_TRANSMODE_NO: case RABM_DATA_TRANS_READY: case RABM_ROUT_AREA_UPDATE: case RABM_DATA_TRANS_STOP: /*激活此四种非空状态下的NSAPI,则只进行QoS的更新,故处理方式一样*/ if ( RABMSM_ACT_MSG_1 == pstPdpActivateIndMsg->ulActMsgType ) { /*打印流程信息---收到第一条PDP激活消息:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:RECEIVE The FIRST PdpActivateInd Msg: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); return; } /*打印流程信息---此时该NSAPI已激活,故更新Qos:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:This NSAPI has been Activated,so UPDATE the QoS: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = pstPdpActivateIndMsg->Qos.ulLength; PS_MEM_CPY(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, pstPdpActivateIndMsg->Qos.aucQosValue, NAS_RABM_MAX_QOS_LEN); break; default: /*打印出错信息---该NSAPI的状态字段出错:*/ RABM_LOG1_ERROR( "NAS_RabmSmPdpActivateIndMsg:ERROR:This NSAPI's state is WRONG!: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); break; } return; }