VOS_VOID MN_CALL_CsCallDiscInfoRecord( MN_CALL_ID_T ucCallId, NAS_ERR_LOG_CS_MT_CALL_CAUSE_ENUM_U32 enCause ) { NAS_ERR_LOG_PROCESS_INFO_IND_EVENT_STRU stProcInfoEvent; VOS_UINT32 ulLength; VOS_UINT16 usLevel; VOS_UINT32 ulIsLogRecord; VOS_UINT32 ulResult; /* 查询对应Alarm Id是否需要记录异常信息 */ usLevel = NAS_GetErrLogAlmLevel(NAS_ERR_LOG_ALM_PORCESS_INFO_IND); ulIsLogRecord = TAF_SDC_IsErrLogNeedRecord(usLevel); /* 模块异常不需要记录或异常原因值不需要记录时,不保存异常信息 */ if (VOS_FALSE == ulIsLogRecord) { return; } ulLength = sizeof(NAS_ERR_LOG_PROCESS_INFO_IND_EVENT_STRU); /* 填充过程信息 */ PS_MEM_SET(&stProcInfoEvent, 0x00, ulLength); NAS_COMM_BULID_ERRLOG_HEADER_INFO(&stProcInfoEvent.stHeader, VOS_GetModemIDFromPid(WUEPS_PID_TAF), NAS_ERR_LOG_ALM_PORCESS_INFO_IND, usLevel, VOS_GetSlice(), (ulLength - sizeof(OM_ERR_LOG_HEADER_STRU))); stProcInfoEvent.enInfoType = NAS_ERR_LOG_PROCESS_INFO_TYPE_CS_CALL_DISC; stProcInfoEvent.stDiscInfo.ucCallId = ucCallId; stProcInfoEvent.stDiscInfo.ulCause = enCause; /* 将异常信息写入Buffer中 实际写入的字符数与需要写入的不等则打印异常 */ ulResult = TAF_SDC_PutErrLogRingBuf((VOS_CHAR *)&stProcInfoEvent, ulLength); if (ulResult != ulLength) { NAS_ERROR_LOG(WUEPS_PID_TAF, "MN_CALL_CsCallDiscInfoRecord(): Push buffer error."); } /* 可维可测勾包 */ NAS_COM_MntnPutRingbuf(NAS_ERR_LOG_ALM_PORCESS_INFO_IND, WUEPS_PID_TAF, (VOS_UINT8 *)&stProcInfoEvent, sizeof(stProcInfoEvent)); return; }
VOS_VOID QosFc_RabRelease(CONST MsgBlock *pstMsg) { QOS_FC_RAB_RELEASE_IND_STRU *pstRabRelease = (QOS_FC_RAB_RELEASE_IND_STRU *)(VOS_VOID*)pstMsg; QCI_TYPE_ENUM_UINT8 enQci; VOS_UINT8 ucLinkRabId; MODEM_ID_ENUM_UINT16 enModemId; VOS_UINT8 ucExRabId; FC_DBG_RELEASE_MSG_STAT(1); /*入参判断*/ if (VOS_NULL_PTR == pstRabRelease) { CDS_ERROR_LOG(UEPS_PID_CDS, "QosFc_RabRelease : NULL pointer"); return; } if(QosFc_IsInValidRabId(pstRabRelease->ucRabId)) { CDS_ERROR_LOG1(UEPS_PID_CDS, "QosFc_RabRelease : Invalid RabId:", pstRabRelease->ucRabId); return; } enModemId = VOS_GetModemIDFromPid(TTF_GET_MSG_SENDER_PID(pstRabRelease)); if (MODEM_ID_BUTT <= enModemId) { CDS_ERROR_LOG1(UEPS_PID_CDS, "QosFc_RabRelease : ModemId Error",enModemId); return; } ucExRabId = (VOS_UINT8)((enModemId << FC_MODEMID_SHIFT) | pstRabRelease->ucRabId); ucLinkRabId = QosFc_ReleaseRabEntity(ucExRabId); if(FC_INVALID_RABID != ucLinkRabId) { /* 获得PDN上最高的QCI */ enQci = QosFc_GetPdnQci(ucLinkRabId); QosFc_UpdateChannelQos(ucLinkRabId, enQci); /* PDN是否需要流控 */ /*lint -e960*/ if((QCI_TYPE_BUTT != enQci) && (FC_INVALID_RABID == QosFc_OtherAvailRabOfPdn(ucLinkRabId))) /*lint +e960*/ { QosFc_ChannelControl(ucLinkRabId); } } else { CDS_ERROR_LOG(UEPS_PID_CDS, "QosFc_RabRelease : Invalid LinkRabId:"); } return; }
VOS_VOID MTC_SndRrcIntrusionBandSetReq( VOS_UINT32 ulRecvPid, RRC_MTC_MS_BAND_INFO_STRU *pstForbiddenBandInfo ) { VOS_UINT16 ulLenth; MODEM_ID_ENUM_UINT16 enModemId; MTC_RRC_INTRUSION_BAND_SET_REQ_STRU *pstBandSetReq = VOS_NULL_PTR; enModemId = VOS_GetModemIDFromPid(ulRecvPid); if (enModemId >= MODEM_ID_BUTT) { return; } /* 如果当前已经关机,则停止发送信息 */ if (MTC_MODEM_POWER_OFF == MTC_GetModemPowerState(enModemId)) { return; } /* 分配消息空间 */ ulLenth = sizeof(MTC_RRC_INTRUSION_BAND_SET_REQ_STRU); pstBandSetReq = (MTC_RRC_INTRUSION_BAND_SET_REQ_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN( UEPS_PID_MTC, ulLenth); if (VOS_NULL_PTR == pstBandSetReq) { MTC_ERROR_LOG("MTC_SndRrcIntrusionActionSetReq: Alloc Msg Fail!"); return; } /* 填充消息 */ pstBandSetReq->stMsgHeader.ulReceiverPid = ulRecvPid; pstBandSetReq->stMsgHeader.ulMsgName = ID_MTC_RRC_INTRUSION_BAND_SET_REQ; PS_MEM_CPY(&pstBandSetReq->stForbiddenBandInfo, pstForbiddenBandInfo, sizeof(RRC_MTC_MS_BAND_INFO_STRU)); /* 发送消息 */ if (VOS_OK != PS_SEND_MSG(UEPS_PID_MTC, pstBandSetReq)) { MTC_ERROR1_LOG("MTC_SndRrcIntrusionActionSetReq: Snd Msg Err. ReceiverPid: ", ulRecvPid); return; } /* 记录可维可测 */ MTC_DEBUG_IntrusionSendSetBandReq(ulRecvPid); return; }
VOS_VOID TAF_APS_StartDsFlowStats( VOS_UINT8 ucRabId ) { VOS_UINT32 ulIndex; TAF_APS_DSFLOW_STATS_CTX_STRU *pstApsDsFlowCtx; VOS_UINT16 usModemid; /* 判断RAB ID是否有效 */ if ((ucRabId < TAF_APS_RAB_ID_MIN) || (ucRabId > TAF_APS_RAB_ID_MAX)) { return; } /* 初始化 */ ulIndex = ucRabId - TAF_APS_RAB_ID_OFFSET; pstApsDsFlowCtx = TAF_APS_GetDsFlowCtxAddr(); /* 检查RAB是否已经激活 */ if (VOS_TRUE == pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].ucRabActiveFlag) { TAF_NORMAL_LOG1(WUEPS_PID_TAF, "TAF_APS_StartDsFlowStats:NORMAL:RABM is already active! RABID:", ucRabId); return; } /*置该RABID激活标志:*/ pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].ucRabActiveFlag = VOS_TRUE; /* 调用CDS API 清除该RABID的历史流量 */ usModemid = VOS_GetModemIDFromPid(WUEPS_PID_TAF); CDS_ClearBearerDataFlowInfo(ucRabId, usModemid); /* 初始化APS当前连接流量信息为0 */ PS_MEM_SET(&pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].stCurrentFlowInfo, 0, sizeof(TAF_DSFLOW_INFO_STRU)); /* 记录当前连接开始时间 */ pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].ulStartLinkTime = VOS_GetTick() / PRE_SECOND_TO_TICK; /* 启动流量上报定时器 */ TAF_APS_StartDsFlowRpt(); /* 如果需要保存到NV项中,启动周期性保存流量到NV定时器 */ if (VOS_TRUE == pstApsDsFlowCtx->ucDsFlowSave2NvFlg) { TAF_APS_StartTimer(TI_TAF_APS_DSFLOW_WRITE_NV, (pstApsDsFlowCtx->ucDsFlowSavePeriod * 60 * TIMER_S_TO_MS_1000), TAF_APS_INVALID_PDPID); } return; }
TTF_MNTN_GSM_COMM_INFO_STRU * TTF_MNTN_ErrlogGetGsmCommInfo(VOS_UINT32 ulPid) { MODEM_ID_ENUM_UINT16 enModemId = VOS_GetModemIDFromPid(ulPid); if (enModemId >= MODEM_ID_BUTT) { TTF_LOG1(ulPid, 0, PS_PRINT_WARNING, "TTF_MNTN_ErrlogGetGsmCommInfo: Invalid ModemId ", enModemId); enModemId = MODEM_ID_0; } return TTF_ERR_LOG_ENT_GSM_COMM_INFO_GET(enModemId); }
VOS_UINT32 TTF_MNTN_ErrLogRcvCtrlInd(MsgBlock *pstMsg, void *p) { OM_ERROR_LOG_CTRL_IND_STRU *pstCtrlInd; MODEM_ID_ENUM_UINT16 enModemId; pstCtrlInd = (OM_ERROR_LOG_CTRL_IND_STRU *)pstMsg; enModemId = VOS_GetModemIDFromPid(pstCtrlInd->ulReceiverPid); TTF_ERR_LOG_ENT_CTRL_STATUS_SET(enModemId, pstCtrlInd->ucAlmStatus); TTF_ERR_LOG_ENT_CTRL_LEV_SET(enModemId, pstCtrlInd->ucAlmLevel); return VOS_OK; }
VOS_VOID MTC_RcvRrcAreaAvaliableInd(VOS_VOID * pMsg) { MODEM_ID_ENUM_UINT16 enModemId; RRC_MTC_AREA_AVALIABLE_IND_STRU *pstAreaAvaliableInd = VOS_NULL_PTR; MTC_MODEM_NETWORK_INFO_STRU *pstNetworkInfo = VOS_NULL_PTR; VOS_UINT8 ucUsimValidFlag; MTC_PS_TRANSFER_CTX_STRU *pstPsTransferCtx = VOS_NULL_PTR; pstPsTransferCtx = MTC_GetPsTransferCtxAddr(); ucUsimValidFlag = MTC_GetModemUsimValidFlag(MODEM_ID_0); pstAreaAvaliableInd = (RRC_MTC_AREA_AVALIABLE_IND_STRU*)pMsg; enModemId = VOS_GetModemIDFromPid(pstAreaAvaliableInd->stMsgHeader.ulSenderPid); /* 仅处理Modem0发送的网络恢复指示 */ if (enModemId != MODEM_ID_0) { MTC_ERROR1_LOG("MTC_RcvRrcAreaAvaliableInd: Err ModemId ", enModemId); return; } /* PS域离网重选策略开启时 */ if (MTC_PS_TRANSFER_OFF_AREA == MTC_GetPsTransferCfg()) { pstNetworkInfo = MTC_GetModemNetworkInfoAddr(enModemId); /* 当前驻留网络非禁止PLMN、非禁止GPRS接入、卡状态有效、不重复上报 */ if ( (VOS_FALSE == pstNetworkInfo->ucIsForbiddenPlmnFlag) && (VOS_TRUE == pstNetworkInfo->stPsDomainInfo.ucPsSupportFlg) && (VOS_TRUE == ucUsimValidFlag) && (MTC_PS_TRANSFER_CAUSE_AREA_AVALIABLE != pstPsTransferCtx->enReportCause)) { /* 上报PS域迁移网络恢复指示AT命令 */ MTC_SndModem0MtaPsTransferInd(MTC_PS_TRANSFER_CAUSE_AREA_AVALIABLE); } pstPsTransferCtx->enRrcCause = MTC_PS_TRANSFER_CAUSE_AREA_AVALIABLE; MTC_SndModem0MmaPsTransferInd(MTC_PS_TRANSFER_CAUSE_AREA_AVALIABLE); } /* 可维可测: 记录接收到丢网指示的次数 */ MTC_DEBUG_RcvRrcAreaAvaliableInd(); return; }
VOS_VOID MTC_RcvTafCsSrvInfoInd(VOS_VOID *pMsg) { VOS_UINT32 ulPid; MODEM_ID_ENUM_UINT16 enModemId; TAF_MTC_CS_SERVICE_INFO_IND_STRU *pstCsSrvInfo = VOS_NULL_PTR; MTC_CS_SERVICE_STATE_ENUM_UINT8 enCsSrvStateOld; MTC_CS_SERVICE_STATE_ENUM_UINT8 enCsSrvStateNew; MTC_CFG_ENUM_UINT8 enIntrusionCfg; pstCsSrvInfo = (TAF_MTC_CS_SERVICE_INFO_IND_STRU *)pMsg; ulPid = pstCsSrvInfo->stMsgHeader.ulSenderPid; enIntrusionCfg = MTC_GetIntrusionCfg(); /* 根据 Pid获取modem ID */ enModemId = VOS_GetModemIDFromPid(ulPid); if (enModemId >= MODEM_ID_BUTT) { MTC_ERROR_LOG("MTC_RcvMmaPowerStateInd: Modem ID Err."); return; } /* 先获取原CS域服务状态 */ enCsSrvStateOld = MTC_GetModemCsSrvExistFlg(enModemId); /* 更新modem 信息中CS域业务状态 */ MTC_SetModemCallSrvExistFlg(enModemId, pstCsSrvInfo->ucCallSrvExistFlg); MTC_SetModemSmsSrvExistFlg(enModemId, pstCsSrvInfo->ucSmsSrvExistFlg); MTC_SetModemSsSrvExistFlg(enModemId, pstCsSrvInfo->ucSsSrvExistFlg); /* 在获取当前CS域服务状态 */ enCsSrvStateNew = MTC_GetModemCsSrvExistFlg(enModemId); /* 可维可测信息记录 */ MTC_DEBUG_RcvCsSrvInfoInd(enModemId); /* 如果Modem1的CS域服务状态发生变化,且干扰控制特性开启,则需要触发干扰控制裁决 */ if ( (MODEM_ID_1 == enModemId) && (enCsSrvStateNew != enCsSrvStateOld) && (MTC_CFG_ENABLE == enIntrusionCfg) ) { MTC_ProcIntrusionStrategy(); } return; }
VOS_VOID MTC_RcvRrcNcellInfoInd(VOS_VOID * pMsg) { MODEM_ID_ENUM_UINT16 enModemId; MODEM_ID_ENUM_UINT16 enOtherModemId; RRC_MTC_NCELL_INFO_IND_STRU *pstNcellInfoInd; MTC_MMA_TDS_NCELL_INFO_STRU stTdsNcellInfo; MTC_MMA_LTE_NCELL_INFO_STRU stLteNcellInfo; pstNcellInfoInd = (RRC_MTC_NCELL_INFO_IND_STRU*)pMsg; enModemId = VOS_GetModemIDFromPid(pstNcellInfoInd->stMsgHeader.ulSenderPid); enOtherModemId = MODEM_ID_BUTT; PS_MEM_SET(&stTdsNcellInfo, 0x00, sizeof(stTdsNcellInfo)); PS_MEM_SET(&stLteNcellInfo, 0x00, sizeof(stLteNcellInfo)); if (enModemId >= MODEM_ID_BUTT) { MTC_ERROR1_LOG("MTC_RcvRrcNcellInfoInd: Err ModemId ", enModemId); return; } /* 只有在PS域迁移策略使能时才执行后续流程 */ if (MTC_PS_TRANSFER_NONE == MTC_GetPsTransferCfg()) { return; } /* 只有中移SVLTE方案才需要发送 */ if (MTC_OPERATOR_CUST_CMCC_SVLTE == MTC_GetOperatorCustSolution()) { if (VOS_OK == MTC_GetOtherModemId(enModemId, &enOtherModemId)) { stTdsNcellInfo.ucTdsArfcnNum = pstNcellInfoInd->stTdsNCellInfo.ucTdsArfcnNum; PS_MEM_CPY(stTdsNcellInfo.ausTdsArfcnList, pstNcellInfoInd->stTdsNCellInfo.ausTdsArfcnList, sizeof(stTdsNcellInfo.ausTdsArfcnList)); stLteNcellInfo.ucLteArfcnNum = pstNcellInfoInd->stLteNCellInfo.ucLteArfcnNum; PS_MEM_CPY(stLteNcellInfo.ausLteArfcnList, pstNcellInfoInd->stLteNCellInfo.ausLteArfcnList, sizeof(stLteNcellInfo.ausLteArfcnList)); MTC_SndMmaNcellInfoInd(enOtherModemId, &stTdsNcellInfo, &stLteNcellInfo); } } return; }
VOS_VOID OM_WriteDspNv(MsgBlock* pMsg) { VOS_UINT32 usIndex; VOS_UINT16 usCount; VOS_UINT16 usNvId; VOS_UINT16 usNvLen; VOS_UINT32 ulResult; DSP_WRITE_NV_STRU *pstWriteNVMsg; DSP_WRITE_NV_CONTEXT_STRU *pstWrteNvContext; VOS_UINT8 *pucNvData; MODEM_ID_ENUM_UINT16 enModemID; enModemID = VOS_GetModemIDFromPid(pMsg->ulSenderPid); /*如果DCXO确认双份再调试*/ pstWriteNVMsg = (DSP_WRITE_NV_STRU *)pMsg; usCount = pstWriteNVMsg->usCount; pstWrteNvContext = (DSP_WRITE_NV_CONTEXT_STRU *)(pstWriteNVMsg->aucNVData); for ( usIndex = 0; usIndex < usCount; usIndex++ ) { usNvId = pstWrteNvContext->usNvId; usNvLen = pstWrteNvContext->usNvLen; pucNvData = pstWrteNvContext->aucNVData; ulResult = NV_WriteEx(enModemID, usNvId, pucNvData, (VOS_UINT32)usNvLen); if ( NV_OK != ulResult ) { PS_LOG2(CCPU_PID_PAM_OM, 0, PS_PRINT_ERROR, "OM_WriteDspNv:NV_Write, NV id: ErrCode :", (VOS_INT32)usNvId, (VOS_INT32)ulResult); return; } pstWrteNvContext = (DSP_WRITE_NV_CONTEXT_STRU *)(pstWrteNvContext->aucNVData + usNvLen); } return; }
VOS_VOID MTC_RcvMmaRegStatusInd(VOS_VOID *pMsg) { VOS_UINT32 ulPid; MODEM_ID_ENUM_UINT16 enModemId; MMA_MTC_REG_STATUS_IND_STRU *pstRegStatusInd = VOS_NULL_PTR; pstRegStatusInd = (MMA_MTC_REG_STATUS_IND_STRU *)pMsg; ulPid = pstRegStatusInd->stMsgHeader.ulSenderPid; /* 根据 Pid获取modem ID */ enModemId = VOS_GetModemIDFromPid(ulPid); if (enModemId >= MODEM_ID_BUTT) { MTC_ERROR_LOG("MTC_RcvMmaRegStatusInd: Modem ID Err."); return ; } /* 更新卡是否有效标识 */ MTC_SetModemUsimValidFlag(enModemId, pstRegStatusInd->ucIsUsimValidFlg); return; }
VOS_VOID MN_Com_FillNasOmTransMsgHeader( ID_NAS_OM_CNF_STRU *pstNasOmCnf, VOS_UINT16 usPrimId, VOS_UINT16 usToolsId ) { MODEM_ID_ENUM_UINT16 enModemId; enModemId = VOS_GetModemIDFromPid(WUEPS_PID_TAF); pstNasOmCnf->ucFuncType = ((enModemId << 6) & NAS_OM_FUNCTION_TYPE_MODEM_MASK) \ | (OM_TRANS_FUNC & NAS_OM_FUNCTION_TYPE_VALUE_MASK); pstNasOmCnf->ucReserve = 0; OM_AddSNTime( &(pstNasOmCnf->ulSn), &(pstNasOmCnf->ulTimeStamp) ); pstNasOmCnf->usPrimId = usPrimId; pstNasOmCnf->usToolsId = usToolsId; }
VOS_VOID TAF_MMA_ReadImeiNvim(VOS_VOID) { TAF_PH_MEINFO_STRU *pstMeInfo = VOS_NULL_PTR; VOS_UINT8 aucBuf[TAF_PH_IMEI_LEN + 1]; VOS_UINT8 ucCheckData; VOS_UINT32 ulDataLen; VOS_UINT32 i; MODEM_ID_ENUM_UINT16 enModemId; ulDataLen = TAF_PH_IMEI_LEN; ucCheckData = 0; pstMeInfo = &(gstMmaValue.stMeInfo); PS_MEM_SET(aucBuf, 0x00, sizeof(aucBuf)); /* 由PID获取MODEMID */ enModemId = VOS_GetModemIDFromPid(WUEPS_PID_MMA); /* 调用SC接口读取IMEI号码 */ SC_PERS_NvRead(enModemId, en_NV_Item_IMEI, aucBuf, NV_ITEM_IMEI_SIZE); for (i = 0; i < (TAF_PH_IMEI_LEN-2); i += 2) { ucCheckData += aucBuf[i] +((aucBuf[i+1] + aucBuf[i+1])/10) +((aucBuf[i+1] + aucBuf[i+1])%10); } ucCheckData = (10 - (ucCheckData%10))%10; MMA_ImeiBcd2Ascii((VOS_UINT8)ulDataLen, aucBuf, (pstMeInfo->ImeisV.aucImei)); (pstMeInfo->ImeisV.aucImei)[TAF_PH_IMEI_LEN-2] = (VOS_UINT8)(ucCheckData + 0x30); (pstMeInfo->ImeisV.aucImei)[TAF_PH_IMEI_LEN-1] = 0; PS_MEM_CPY(g_MmaNewValue.aucImeiBcd, aucBuf, ulDataLen); PS_MEM_CPY(g_aucMmaImei, pstMeInfo->ImeisV.aucImei, TAF_PH_IMEI_LEN - 1); return; }
VOS_VOID MTC_RcvMmaRatModeInd(VOS_VOID *pMsg) { VOS_UINT32 ulPid; MODEM_ID_ENUM_UINT16 enModemId; MMA_MTC_RAT_MODE_IND_STRU *pstRatMode = VOS_NULL_PTR; pstRatMode = (MMA_MTC_RAT_MODE_IND_STRU *)pMsg; ulPid = pstRatMode->stMsgHeader.ulSenderPid; /* 根据 Pid获取modem ID */ enModemId = VOS_GetModemIDFromPid(ulPid); if (enModemId >= MODEM_ID_BUTT) { MTC_ERROR_LOG("MTC_RcvMmaRatModeInd: Modem ID Err."); return ; } /* 更新Modem的接入模式 */ MTC_SetModemRatMode(enModemId, pstRatMode->enRatMode); return; }
VOS_UINT32 TTF_MNTN_ErrLogRcvCtrlInd(MsgBlock *pstMsg, void *p) { OM_ERROR_LOG_CTRL_IND_STRU *pstCtrlInd; MODEM_ID_ENUM_UINT16 enModemId; pstCtrlInd = (OM_ERROR_LOG_CTRL_IND_STRU *)pstMsg; enModemId = (MODEM_ID_ENUM_UINT16)VOS_GetModemIDFromPid(pstCtrlInd->ulReceiverPid); if (MODEM_ID_BUTT <= enModemId) { TTF_LOG1(WUEPS_PID_RLC, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrLogRcvCtrlInd: Invalid ModemId ", enModemId); return VOS_ERR; } TTF_ERR_LOG_ENT_CTRL_STATUS_SET(enModemId, pstCtrlInd->ucAlmStatus); TTF_ERR_LOG_ENT_CTRL_LEV_SET(enModemId, pstCtrlInd->ucAlmLevel); return VOS_OK; }
VOS_VOID TAF_APS_ClearDsFlowStats( VOS_UINT8 ucRabId ) { VOS_UINT32 ulIndex; VOS_UINT8 ucRabActiveFlag; TAF_APS_DSFLOW_STATS_CTX_STRU *pstApsDsFlowCtx; VOS_UINT16 usModemid; /* 初始化 */ ulIndex = ucRabId - TAF_APS_RAB_ID_OFFSET; pstApsDsFlowCtx = TAF_APS_GetDsFlowCtxAddr(); /* 先保存该RABID激活标志 */ ucRabActiveFlag = pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].ucRabActiveFlag; /* 流量统计上下文指定RABID流量信息清零 */ PS_MEM_SET(&pstApsDsFlowCtx->astApsDsFlowStats[ulIndex], 0, sizeof(TAF_APS_DSFLOW_STATS_STRU)); /* 恢复该RABID激活标志信息 */ pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].ucRabActiveFlag = ucRabActiveFlag; /* 如果RAB已激活,将当前连接时间置为当前时间,同时通知CDS清除流量信息 */ if (VOS_TRUE == ucRabActiveFlag) { /* 调用CDS API 清除该RABID的流量信息 */ usModemid = VOS_GetModemIDFromPid(WUEPS_PID_TAF); CDS_ClearBearerDataFlowInfo(ucRabId, usModemid); /* 记录当前连接开始时间 */ pstApsDsFlowCtx->astApsDsFlowStats[ulIndex].ulStartLinkTime = VOS_GetTick() / PRE_SECOND_TO_TICK; } return; }
VOS_VOID MTC_RcvMmaEplmnInfoInd(VOS_VOID *pMsg) { VOS_UINT32 ulPid; MODEM_ID_ENUM_UINT16 enModemId; MODEM_ID_ENUM_UINT16 enOtherModemId; MMA_MTC_EPLMN_INFO_IND_STRU *pstEplmnInfo = VOS_NULL_PTR; pstEplmnInfo = (MMA_MTC_EPLMN_INFO_IND_STRU *)pMsg; ulPid = pstEplmnInfo->stMsgHeader.ulSenderPid; /* 根据 Pid获取modem ID */ enModemId = VOS_GetModemIDFromPid(ulPid); enOtherModemId = MODEM_ID_BUTT; if (enModemId >= MODEM_ID_BUTT) { MTC_ERROR_LOG("MTC_RcvMmaEplmnInfoInd: Modem ID Err."); return ; } /* 只有在PS域迁移策略使能时才执行后续流程 */ if (MTC_PS_TRANSFER_NONE == MTC_GetPsTransferCfg()) { return; } /* 只有中移SVLTE方案才需要同步两个Modem的等效PLMN */ if (MTC_OPERATOR_CUST_CMCC_SVLTE == MTC_GetOperatorCustSolution()) { if (VOS_OK == MTC_GetOtherModemId(enModemId, &enOtherModemId)) { MTC_SndMmaOtherModemInfoNotify(enOtherModemId, VOS_NULL_PTR, &pstEplmnInfo->stEplmnInfo); } } return; }
VOS_VOID TAF_MTA_RcvQryCgsnReq(VOS_VOID *pMsg) { MODEM_ID_ENUM_UINT16 enModemId; AT_MTA_MSG_STRU *pstAtMtaReqMsg = VOS_NULL_PTR; MTA_AT_CGSN_QRY_CNF_STRU stCgsnCnf; /* 初始化 */ pstAtMtaReqMsg = (AT_MTA_MSG_STRU *)pMsg; PS_MEM_SET(&stCgsnCnf, 0x00, sizeof(MTA_AT_CGSN_QRY_CNF_STRU)); /* 由PID获取MODEMID */ enModemId = VOS_GetModemIDFromPid(UEPS_PID_MTA); /* 调用SC接口读取IMEI号码 */ SC_PERS_NvRead(enModemId, en_NV_Item_IMEI, stCgsnCnf.aucImei, NV_ITEM_IMEI_SIZE); /* 返回跨核消息ID_MTA_AT_IMEI_VERIFY_QRY_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_CGSN_QRY_CNF, sizeof(MTA_AT_CGSN_QRY_CNF_STRU), (VOS_UINT8*)&stCgsnCnf ); return; }