VOS_UINT32 TAF_APS_GetCallRemainTmrLen(VOS_UINT8 ucCid) { TAF_APS_CONTEXT_STRU *pstTafApsCtx; pstTafApsCtx = TAF_APS_GetApsCtxAddr(); return pstTafApsCtx->aulCallRemainTmrLen[ucCid]; }
VOS_VOID TAF_APS_InitCallRemainTmrLen(VOS_VOID) { TAF_APS_CONTEXT_STRU *pstTafApsCtx; pstTafApsCtx = TAF_APS_GetApsCtxAddr(); PS_MEM_SET(pstTafApsCtx->aulCallRemainTmrLen, 0x00, sizeof(pstTafApsCtx->aulCallRemainTmrLen)); return; }
VOS_VOID TAF_APS_SetCallRemainTmrLen( VOS_UINT8 ucCid, VOS_UINT32 ulTmrLen ) { TAF_APS_CONTEXT_STRU *pstTafApsCtx; pstTafApsCtx = TAF_APS_GetApsCtxAddr(); pstTafApsCtx->aulCallRemainTmrLen[ucCid] = ulTmrLen; 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; }
VOS_UINT32 TAF_APS_SndInternalMsg( VOS_VOID *pSndMsg ) { VOS_UINT8 ucMsgPnt; TAF_APS_INTERNAL_MSG_BUF_STRU *pstApsMsg = VOS_NULL_PTR; TAF_APS_INTERNAL_MSG_QUEUE_STRU *pstInternalMsgQueue = VOS_NULL_PTR; TAF_APS_INTERNAL_MSG_BUF_STRU *pstSndMsg = VOS_NULL_PTR; pstInternalMsgQueue = &(TAF_APS_GetApsCtxAddr()->stInternalMsgQueue); pstSndMsg = (TAF_APS_INTERNAL_MSG_BUF_STRU*)pSndMsg; /* 1. 判断内部消息缓冲区是否已满 */ ucMsgPnt = pstInternalMsgQueue->ucTail; if ( ((ucMsgPnt + 1) % TAF_APS_MAX_MSG_QUEUE_SIZE) == pstInternalMsgQueue->ucHeader ) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_APS_SndInternalMsg:Warning: The Queue is full."); return VOS_ERR; } /* 2. 取得一个消息缓冲单元 */ pstApsMsg = (TAF_APS_INTERNAL_MSG_BUF_STRU *)&(pstInternalMsgQueue->astApsMsgQueue[ucMsgPnt]); /* 3. 判断消息长度是否非法 */ if ( pstSndMsg->ulLength > TAF_APS_MAX_MSG_BUFFER_LEN) { TAF_WARNING_LOG(WUEPS_PID_MMC, "TAF_APS_SndInternalMsg:Warning: ulBufLen is too long."); return VOS_ERR; } TAF_NORMAL_LOG1(WUEPS_PID_TAF, "TAF_APS_SndInternalMsg: usMsgID is ", pstApsMsg->usMsgID); /* 4. 将内部消息发送到内部消息队列中 */ PS_MEM_CPY(pstApsMsg, pstSndMsg, sizeof(TAF_APS_INTERNAL_MSG_BUF_STRU)); /* 更新内部消息缓冲区 */ pstInternalMsgQueue->ucTail++; pstInternalMsgQueue->ucTail %= TAF_APS_MAX_MSG_QUEUE_SIZE; return VOS_OK; }
TAF_APS_INTERNAL_MSG_BUF_STRU* TAF_APS_GetNextInternalMsg( VOS_VOID ) { TAF_APS_INTERNAL_MSG_BUF_STRU *pstNextMsg = VOS_NULL_PTR; VOS_UINT8 ucNextIndex; TAF_APS_CONTEXT_STRU *pstApsCtx = VOS_NULL_PTR; pstApsCtx = TAF_APS_GetApsCtxAddr(); if ( pstApsCtx->stInternalMsgQueue.ucHeader != pstApsCtx->stInternalMsgQueue.ucTail) { ucNextIndex = pstApsCtx->stInternalMsgQueue.ucHeader; pstNextMsg = (TAF_APS_INTERNAL_MSG_BUF_STRU *)&(pstApsCtx->stInternalMsgQueue.astApsMsgQueue[ucNextIndex]); /* 取完一条消息,头指针向后偏移 */ (pstApsCtx->stInternalMsgQueue.ucHeader)++; (pstApsCtx->stInternalMsgQueue.ucHeader) %= TAF_APS_MAX_MSG_QUEUE_SIZE; return pstNextMsg; } TAF_INFO_LOG(WUEPS_PID_TAF, "TAF_APS_GetNextInternalMsg:Empty Internal Msg"); return VOS_NULL_PTR; }
TAF_APS_INTERNAL_MSG_BUF_STRU *TAF_APS_GetIntMsgSendBuf( VOS_UINT32 ulLen ) { TAF_APS_INTERNAL_MSG_BUF_STRU *pstTafApsMsg = VOS_NULL_PTR; TAF_APS_INTERNAL_MSG_QUEUE_STRU *pstInternalMsgQueue = VOS_NULL_PTR; pstInternalMsgQueue = &(TAF_APS_GetApsCtxAddr()->stInternalMsgQueue); /* 从上下文中获取消息缓冲区指针 */ pstTafApsMsg = ( TAF_APS_INTERNAL_MSG_BUF_STRU *)&(pstInternalMsgQueue->stSendMsgBuf); if ( ulLen > TAF_APS_MAX_MSG_BUFFER_LEN ) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_GetIntMsgSendBuf: Buffer full" ); return VOS_NULL_PTR; } /* 清空这个消息缓冲单元 */ PS_MEM_SET(pstTafApsMsg, 0x00, sizeof(TAF_APS_INTERNAL_MSG_BUF_STRU)); /* 返回缓冲区指针 */ return pstTafApsMsg; }
TAF_APS_PDN_TEARDOWN_POLICY_STRU* TAF_APS_GetPdnTeardownPolicy(VOS_VOID) { return &(TAF_APS_GetApsCtxAddr()->stPdnTeardownPolicy); }