VOS_UINT32 TAF_APS_RcvPsInter1XToHrpdHandOff_CdataHandOff_Init( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; /* 初始化, 获取PDP ID */ ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 保存子状态机的入口消息 */ TAF_APS_SaveCurrSubFsmEntryMsg(ulEventType, pstMsg); /* 起保数据服务切换护定时器 */ TAF_APS_StartTimer(TI_TAF_APS_1X_TO_HRPD_HANDOFF_TIMER, TI_TAF_APS_1X_TO_HRPD_HANDOFF_TIMER_LEN, ucPdpId); /* 发送模式切换请求给HSM */ TAF_APS_SndHsm1XToHrpdHandOffReq(ucPdpId); /* 主状态TAF_APS_STA_CDATA_HANDOFF */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_CDATA_HANDOFF); /* 迁移TAF_APS_CDATA_HANDOFF_SUBSTA_WAIT_HSM_HANDOFF_CNF子状态 */ TAF_APS_SetCurrPdpEntitySubFsmState(TAF_APS_CDATA_HANDOFF_SUBSTA_WAIT_HSM_HANDOFF_CNF); return VOS_TRUE; }
VOS_VOID TAF_APS_StartDsFlowRpt( VOS_VOID ) { TAF_APS_TIMER_STATUS_ENUM_U8 enTimerStatus; /* 如果当前流量上报定时器正在运行,先停止定时器 */ enTimerStatus = TAF_APS_GetTimerStatus(TI_TAF_APS_DSFLOW_REPORT, TAF_APS_INVALID_PDPID); if (TAF_APS_TIMER_STATUS_RUNING == enTimerStatus) { TAF_APS_StopTimer(TI_TAF_APS_DSFLOW_REPORT, TAF_APS_INVALID_PDPID); } /* 判断当前是否有RAB激活 */ if (VOS_TRUE == TAF_APS_CheckIfActiveRabIdExist()) { /* 依次轮询所有RABID,刷新已激活RAB的当前连接流量信息 */ TAF_APS_UpdateAllRabCurrentFlowInfo(); /* 启动流量上报定时器 */ TAF_APS_StartTimer(TI_TAF_APS_DSFLOW_REPORT, TI_TAF_APS_DSFLOW_REPORT_LEN, TAF_APS_INVALID_PDPID); } 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; }