VOS_UINT32 TAF_APS_GetNextCachedMsg( TAF_APS_ENTRY_MSG_STRU *pstEntryMsg ) { TAF_APS_MSG_QUEUE_STRU *pstMsgQueue = VOS_NULL_PTR; pstMsgQueue = TAF_APS_GetCachMsgBufferAddr(); if ( 0 == pstMsgQueue->ucCacheMsgNum ) { TAF_INFO_LOG(WUEPS_PID_TAF,"TAF_APS_GetNextCachedMsg:Empty buffer"); return VOS_FALSE; } /* 按照先入先出原则,默认取第1个缓存内容 */ PS_MEM_CPY(pstEntryMsg, &(pstMsgQueue->astMsgQueue[0].stMsgEntry), sizeof(TAF_APS_ENTRY_MSG_STRU)); /* 消息已经取出则清除当前缓存 */ TAF_APS_ClearCacheMsg(pstEntryMsg->ulEventType); return VOS_TRUE; }
VOS_VOID TAF_APS_SaveCacheMsgInMsgQueue( VOS_UINT32 ulEventType, VOS_VOID *pstMsg ) { TAF_APS_MSG_QUEUE_STRU *pstMsgQueue = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; pstMsgHeader = (MSG_HEADER_STRU*)pstMsg; pstMsgQueue = TAF_APS_GetCachMsgBufferAddr(); if ( pstMsgQueue->ucCacheMsgNum >= TAF_APS_MAX_MSG_QUEUE_NUM ) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SaveCacheMsgInMsgQueue:No Empty buffer"); /* 输出缓存满的信息 */ return ; } pstMsgQueue->astMsgQueue[pstMsgQueue->ucCacheMsgNum].stMsgEntry.ulEventType = ulEventType; PS_MEM_CPY((pstMsgQueue->astMsgQueue[pstMsgQueue->ucCacheMsgNum].stMsgEntry.aucEntryMsgBuffer), pstMsg, pstMsgHeader->ulLength + VOS_MSG_HEAD_LENGTH); pstMsgQueue->ucCacheMsgNum++; TAF_INFO_LOG1(WUEPS_PID_TAF, "TAF_APS_SaveCacheMsgInMsgQueue:Cache Num", pstMsgQueue->ucCacheMsgNum); /* 输出缓存信息 */ }
VOS_UINT8 TAF_APS_GetCacheNum( VOS_VOID ) { TAF_APS_MSG_QUEUE_STRU *pstMsgQueue = VOS_NULL_PTR; pstMsgQueue = TAF_APS_GetCachMsgBufferAddr(); return pstMsgQueue->ucCacheMsgNum; }
VOS_UINT32 TAF_APS_ClearCacheMsg( VOS_UINT32 ulEventType ) { TAF_APS_MSG_QUEUE_STRU *pstMsgQueue = VOS_NULL_PTR; VOS_INT8 i; VOS_INT8 cCachePos; pstMsgQueue = TAF_APS_GetCachMsgBufferAddr(); cCachePos = -1; /* 先找到需要被清除的缓存 */ for ( i = 0 ; i < pstMsgQueue->ucCacheMsgNum ; i++ ) { if ( ulEventType == pstMsgQueue->astMsgQueue[i].stMsgEntry.ulEventType ) { PS_MEM_SET(&(pstMsgQueue->astMsgQueue[i].stMsgEntry), 0x00, sizeof(TAF_APS_ENTRY_MSG_STRU)); cCachePos = (VOS_INT8)i; break; } } /* 未找到该消息类型直接返回 */ if ( -1 == cCachePos ) { TAF_INFO_LOG1(WUEPS_PID_TAF,"TAF_APS_ClearCacheMsg:invalid msg type", (VOS_INT32)ulEventType); return VOS_FALSE; } /* 为保证先入先出,需要将后面的消息移到前面 */ for ( i = cCachePos ; i < (pstMsgQueue->ucCacheMsgNum - 1) ; i++ ) { /* COPY消息内容 */ PS_MEM_MOVE(&(pstMsgQueue->astMsgQueue[i].stMsgEntry), &(pstMsgQueue->astMsgQueue[i + 1].stMsgEntry), sizeof(TAF_APS_ENTRY_MSG_STRU)); } /* 将缓存个数减一 */ pstMsgQueue->ucCacheMsgNum--; /* 将当前缓存给打印出来 */ /* TAF_APS_LogBufferQueueMsg(VOS_FALSE); */ return VOS_OK; }
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; }