TAF_APS_CMD_BUFFER_STRU *TAF_APS_GetItemFromCmdBufferQueue( TAF_APS_TIMER_ID_ENUM_UINT32 enTimerId, VOS_UINT32 ulPara ) { VOS_UINT32 i; TAF_APS_CMD_BUFFER_STRU *pstCmdBufferQueue; pstCmdBufferQueue = TAF_APS_GetCmdBufferQueueAddr(); /* 遍历队列, 获取enTimerId指定的消息节点 */ for ( i = 0 ; i < TAF_APS_MAX_CMD_BUFFER_QUEUE_SIZE; i++ ) { if ((enTimerId == pstCmdBufferQueue[i].enTimerId) && (ulPara == pstCmdBufferQueue[i].ulPara)) { break; } } /* 判定当前的循环队列是否已经满了,如果满了则直接返回,进行异常打印 */ if ( i >= TAF_APS_MAX_CMD_BUFFER_QUEUE_SIZE ) { /* 未找到 */ TAF_ERROR_LOG1(WUEPS_PID_TAF, "TAF_APS_GetInfoFromWaitL4aCnfMsgQueue, Msg Not Found, Timer Id :", enTimerId); return VOS_NULL_PTR; } /* 将缓存的消息指针返回 */ return &pstCmdBufferQueue[i]; }
VOS_VOID TAF_APS_DelItemInCmdBufferQueue( TAF_APS_TIMER_ID_ENUM_UINT32 enTimerId, VOS_UINT32 ulPara ) { VOS_UINT32 i; TAF_APS_CMD_BUFFER_STRU *pstCmdBufferQueue; pstCmdBufferQueue = TAF_APS_GetCmdBufferQueueAddr(); for ( i = 0 ; i < TAF_APS_MAX_CMD_BUFFER_QUEUE_SIZE; i++ ) { if ((enTimerId == pstCmdBufferQueue[i].enTimerId) && (ulPara == pstCmdBufferQueue[i].ulPara)) { /* 如果有缓存的消息,释放消息内存 */ if (VOS_NULL_PTR != pstCmdBufferQueue[i].pulMsgInfo) { PS_MEM_FREE(WUEPS_PID_TAF, pstCmdBufferQueue[i].pulMsgInfo); } /* 初始化 */ pstCmdBufferQueue[i].pulMsgInfo = VOS_NULL_PTR; pstCmdBufferQueue[i].enTimerId = TI_TAF_APS_TIMER_BUTT; pstCmdBufferQueue[i].ulMsgInfoLen = 0; pstCmdBufferQueue[i].ulPara = TAF_APS_INVALID_CMD_PARA; break; } } return; }
VOS_VOID TAF_APS_SaveItemInCmdBufferQueue( TAF_APS_TIMER_ID_ENUM_UINT32 enTimerId, VOS_UINT32 *pulMsgInfo, VOS_UINT32 ulMsgInfoLen, VOS_UINT32 ulPara ) { VOS_UINT32 i; VOS_UINT32 *pulMsgBuf; TAF_APS_CMD_BUFFER_STRU *pstCmdBufferQueue; /* 如果消息指针为空,直接返回 */ if (VOS_NULL_PTR == pulMsgInfo) { return; } pstCmdBufferQueue = TAF_APS_GetCmdBufferQueueAddr(); for ( i = 0 ; i < TAF_APS_MAX_CMD_BUFFER_QUEUE_SIZE; i++ ) { if (TI_TAF_APS_TIMER_BUTT == pstCmdBufferQueue[i].enTimerId) { break; } } /* 判定当前的循环队列是否已经满了,如果满了则直接返回,进行异常打印 */ if ( i >= TAF_APS_MAX_CMD_BUFFER_QUEUE_SIZE ) { /* 缓存队列已满 */ TAF_ERROR_LOG1(WUEPS_PID_TAF, "TAF_APS_SaveInfoInWaitL4aCnfMsgQueue, Buffer Full, Timer Id :", enTimerId); return; } /* 在队列增加相应的信息,分配内存,进行信息赋值 */ pulMsgBuf = (VOS_UINT32 *)PS_MEM_ALLOC(WUEPS_PID_TAF, ulMsgInfoLen); if (VOS_NULL_PTR == pulMsgBuf) { /* 缓存队列已满 */ TAF_ERROR_LOG1(WUEPS_PID_TAF, "TAF_APS_SaveInfoInWaitL4aCnfMsgQueue, Mem Alloc Fail, Timer Id :", enTimerId); return; } /* 赋值 */ PS_MEM_CPY((VOS_UINT8 *)pulMsgBuf, (VOS_UINT8 *)pulMsgInfo, ulMsgInfoLen); pstCmdBufferQueue[i].pulMsgInfo = pulMsgBuf; pstCmdBufferQueue[i].enTimerId = enTimerId; pstCmdBufferQueue[i].ulMsgInfoLen = ulMsgInfoLen; pstCmdBufferQueue[i].ulPara = ulPara; return; }
VOS_VOID TAF_APS_InitCtx( VOS_VOID ) { TAF_APS_CONTEXT_STRU *pApsCtx; /* 初始化APS模块CTX */ pApsCtx = TAF_APS_GetApsCtxAddr(); /* 初始化所有的实体状态机 */ TAF_APS_InitEntityFsm(); /* 初始化内部缓存队列 */ TAF_APS_InitInternalBuffer(TAF_APS_GetCachMsgBufferAddr()); /* 初始化APS定时器上下文 */ TAF_APS_InitAllTimers(TAF_APS_GetTimerCtxAddr()); /* 初始化内部消息队列 */ TAF_APS_InitInternalMsgQueue(&pApsCtx->stInternalMsgQueue); /* 初始化AT命令缓存队列 */ TAF_APS_InitCmdBufferQueue(TAF_APS_GetCmdBufferQueueAddr()); /* 初始化上行NDIS Filter有效 */ TAF_APS_SetUlNdisFilterValidFlag(TAF_APS_UL_NDIS_FILTER_VALID); /* 初始化上行NDIS需要使用的IP Filter定义 */ TAF_APS_IpfUlNdisFilterInit(); /* 初始化PDP激活受限标志,和PDP激活失败次数计数器 */ TAF_APS_InitPdpActLimitInfo(); /* 初始化呼叫保护定时器时长 */ TAF_APS_InitCallRemainTmrLen(); TAF_APS_SET_RAT_TYPE_IN_SUSPEND(MMC_APS_RAT_TYPE_NULL); #if (FEATURE_ON == FEATURE_LTE) /* 初始化PDN连接断开策略配置信息 */ TAF_APS_InitPdnTeardownPolicy(); #endif return; }