VOS_VOID TAF_APS_FindAllDeActIndTearDownPdp( VOS_UINT8 ucPdpId, TAF_APS_PDPID_LIST_STRU *pstPdpIdList ) { VOS_UINT8 i; VOS_UINT8 ucTmpPdpId; VOS_UINT32 ulIpAddrCmpRslt; /* IP地址比较结果 */ VOS_UINT32 ulApnCmpRslt; /* APN比较结果 */ i = 0; if ( TAF_APS_STA_INACTIVE != TAF_APS_GetPdpIdMainFsmState(ucPdpId) ) { TAF_NORMAL_LOG(WUEPS_PID_TAF,"TAF_APS_FindAllDeActIndTearDownPdp:PDP is already inactive."); return; } /* 清空需要送出的PDP操作列表的变量pstPdpIdList */ PS_MEM_SET(pstPdpIdList, 0, sizeof(TAF_APS_PDPID_LIST_STRU)); /* 找出所有需要去激活的PDP ID */ ucTmpPdpId = 0; while(ucTmpPdpId < TAF_APS_MAX_PDPID ) { if ( ucTmpPdpId == APS_FREE_ENTITY_NUM) { ucTmpPdpId++; } if ( TAF_APS_STA_INACTIVE != TAF_APS_GetPdpIdMainFsmState(ucTmpPdpId) ) { /*比较ucPdpId和ucTmpPdpId的ADDR和APN是否相同*/ /*包含TEARDOWN自己的那个PDP*/ ulIpAddrCmpRslt = Aps_CompAddr(ucPdpId, ucTmpPdpId); ulApnCmpRslt = Aps_CompApn(ucPdpId, ucTmpPdpId); if ((APS_ADDR_SAME == ulIpAddrCmpRslt) && (APS_APN_SAME == ulApnCmpRslt)) /*相同*/ { pstPdpIdList[ucPdpId].ucPdpNum++; pstPdpIdList[ucPdpId].aucPdpId[i++] = ucTmpPdpId; } } ucTmpPdpId++; } return; }
VOS_VOID TAF_APS_SaveDsFlowInfoToNv( VOS_VOID ) { TAF_APS_DSFLOW_STATS_CTX_STRU *pstApsDsFlowCtx; TAF_APS_DSFLOW_NV_STRU stApsDsflowNv; TAF_DSFLOW_QUERY_INFO_STRU stDsFlowQryInfo; /* 初始化 */ pstApsDsFlowCtx = TAF_APS_GetDsFlowCtxAddr(); PS_MEM_SET(&stApsDsflowNv, 0, sizeof(TAF_APS_DSFLOW_NV_STRU)); PS_MEM_SET(&stDsFlowQryInfo, 0, sizeof(TAF_DSFLOW_QUERY_INFO_STRU)); if (VOS_TRUE == pstApsDsFlowCtx->ucApsDsFlowSave2NvFlg) { /* 获取历史流量信息项 */ TAF_APS_QryAllRabDsFlowStats(&stDsFlowQryInfo); /* 刷新流量信息相关NV项 */ stApsDsflowNv.ulDSLastLinkTime = stDsFlowQryInfo.stCurrentFlowInfo.ulDSLinkTime; stApsDsflowNv.ulDSTotalLinkTime = stDsFlowQryInfo.stTotalFlowInfo.ulDSLinkTime; stApsDsflowNv.ulDSTotalReceiveFluxHigh = stDsFlowQryInfo.stTotalFlowInfo.ulDSReceiveFluxHigh; stApsDsflowNv.ulDSTotalReceiveFluxLow = stDsFlowQryInfo.stTotalFlowInfo.ulDSReceiveFluxLow; stApsDsflowNv.ulDSTotalSendFluxHigh = stDsFlowQryInfo.stTotalFlowInfo.ulDSSendFluxHigh; stApsDsflowNv.ulDSTotalSendFluxLow = stDsFlowQryInfo.stTotalFlowInfo.ulDSSendFluxLow; /* 写NV项 */ if (NV_OK != NV_Write(en_NV_Item_DSFLOW_REPORT, &stApsDsflowNv, sizeof(TAF_APS_DSFLOW_NV_STRU))) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SaveDsFlowInfoToNv: Write NVIM Failed"); } } else { TAF_NORMAL_LOG(WUEPS_PID_TAF, "TAF_APS_SaveDsFlowInfoToNv: Save2NvFlg is not set."); } return; }
VOS_UINT32 TAF_SPM_BuildUssdStringInfo( TAF_SS_DATA_CODING_SCHEME ucDatacodingScheme, TAF_SS_USSD_STRING_STRU *pstSrcUssd, TAF_SS_USSD_STRING_STRU *pstDstUssd ) { VOS_UINT32 ulRslt; MN_MSG_CBDCS_CODE_STRU stDcsInfo; PS_MEM_SET(&stDcsInfo, 0, sizeof(stDcsInfo)); /* USSD与CBS的DCS的协议相同,调用CBS的DCS解析函数解码,详细情况参考23038 */ ulRslt = MN_MSG_DecodeCbsDcs(ucDatacodingScheme, pstSrcUssd->aucUssdStr, pstSrcUssd->usCnt, &stDcsInfo); if (MN_ERR_NO_ERROR != ulRslt) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_SPM_BuildUssdStringInfo:WARNING: Decode Failure"); return VOS_FALSE; } if (MN_MSG_MSG_CODING_7_BIT == stDcsInfo.enMsgCoding) { PS_MEM_CPY(pstDstUssd, pstSrcUssd, sizeof(TAF_SS_USSD_STRING_STRU)); /* 非透传模式,编码方式为7bit时,上层是没有按7Bit压缩的, 仍然是ASCII,此处需要保证DCS指示的编码方式与实际内容的编码方式一致 */ if (TAF_SDC_USSD_NON_TRAN_MODE == TAF_SDC_GetUssdTransMode()) { ulRslt = TAF_MmiEncodeUssdMessage(pstDstUssd); if (VOS_FALSE == ulRslt) { TAF_NORMAL_LOG(WUEPS_PID_TAF, "TAF_SPM_BuildUssdStringInfo: SSA_EncodeUssdMessage encode failure"); return VOS_FALSE; } } /* 透传模式,编码方式为7bit时,上层是按7Bit压缩的,但用户输入每一个USSD数字, 经过7Bit压缩后, 每个字节的高4bit和低4bit在此处是分别由一个Byte表示的,此处需要将两个byte还原为一个字节 例如用户要输入*199#,7bit压缩后为aa 58 2e 37 02,拆分后为61 61 35 38 32 65 33 37 30 32 */ else { if (pstDstUssd->usCnt > TAF_SS_MAX_USSD_CHAR_HEX_FORMAT) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_SPM_BuildUssdStringInfo: String too Long failure"); return VOS_FALSE; } ulRslt = TAF_STD_AsciiNum2HexString(pstDstUssd->aucUssdStr, &pstDstUssd->usCnt); if (VOS_FALSE == ulRslt) { TAF_NORMAL_LOG(WUEPS_PID_TAF, "TAF_SPM_BuildUssdStringInfo: TAF_AsciiNum2HexString encode failure"); return VOS_FALSE; } } } else { if (pstSrcUssd->usCnt > TAF_SS_MAX_USS_CHAR) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_SPM_BuildUssdStringInfo: String too Long failure"); return VOS_FALSE; } PS_MEM_CPY(pstDstUssd, pstSrcUssd, sizeof(TAF_SS_USSD_STRING_STRU)); } return VOS_TRUE; }