VOS_UINT32 TAF_MMA_PreProcessMsg( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_FSM_DESC_STRU *pstFsmDesc = VOS_NULL_PTR; TAF_ACTION_FUNC pActFun; VOS_UINT32 ulRet; ulRet = VOS_TRUE; /* 消息预处理 */ TAF_INFO_LOG1(WUEPS_PID_MMA,"TAF_MMA_PreProcessMsg", ulEventType); pstFsmDesc = TAF_MMA_GetPreFsmDescAddr(); /* 查找状态转移表中的相应的动作处理函数 */ pActFun = TAF_FSM_FindAct(pstFsmDesc, TAF_MMA_MAIN_STA_PREPROC, ulEventType); if (VOS_NULL_PTR != pActFun ) { /* 预处理消息,分为两类消息,一类为预处理结束就返回,另外一类为预处理 结束后,仍然需要进行到状态机中继续处理,因此此处直接通过函数返回预处 理结束后是否需要进行状态机处理*/ ulRet = (*pActFun) ( ulEventType, (struct MsgCB*)pstMsg); return ulRet; } /* 消息未被处理完成需继续处理 */ return VOS_FALSE; }
VOS_UINT32 TAF_MMA_FSM_ProcessEvent( VOS_UINT32 ulCurState, VOS_UINT32 ulEventType, VOS_VOID *pRcvMsg ) { TAF_ACTION_FUNC pActFun = VOS_NULL_PTR; TAF_FSM_DESC_STRU *pstFsmDesc = VOS_NULL_PTR; VOS_UINT32 ulRet; TAF_INFO_LOG2(WUEPS_PID_MMA,"TAF_MMA_FSM_ProcessEvent", ulCurState, ulEventType); pstFsmDesc = TAF_MMA_GetCurFsmDesc(); /* 查找状态转移表中的相应的动作处理函数 */ pActFun = TAF_FSM_FindAct(pstFsmDesc, ulCurState, ulEventType); if (VOS_NULL_PTR != pActFun ) { /* 如果返回的事件处理函数不为空,调用它进行事件处理 */ ulRet = (*pActFun) ( ulEventType,(struct MsgCB*)pRcvMsg); TAF_INFO_LOG1(WUEPS_PID_MMA,"TAF_MMA_FSM_ProcessEvent", ulRet); return ulRet; } /* 消息未被处理完成需继续处理 */ return VOS_FALSE; }
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_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_MMA_SaveCacheMsgInMsgQueue( VOS_UINT32 ulEventType, VOS_VOID *pstMsg ) { TAF_MMA_MSG_QUEUE_STRU *pstMsgQueue = VOS_NULL_PTR; MSG_HEADER_STRU *pstMsgHeader = VOS_NULL_PTR; pstMsgHeader = (MSG_HEADER_STRU*)pstMsg; pstMsgQueue = TAF_MMA_GetCachMsgBufferAddr(); if ( pstMsgQueue->ucCacheMsgNum >= TAF_MMA_MAX_MSG_QUEUE_NUM ) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SaveCacheMsgInMsgQueue:buffer full"); TAF_MMA_LogBufferQueueMsg(VOS_TRUE); return; } /* 比较消息优先级,判断是否需要保存在缓存池中 */ if (VOS_FALSE == TAF_MMA_IsNeedCacheMsg(ulEventType, pstMsg)) { TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_SaveCacheMsgInMsgQueue:already exist msg"); 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_MMA_LogBufferQueueMsg(VOS_FALSE); TAF_INFO_LOG1(WUEPS_PID_MMA, "TAF_MMA_SaveCacheMsgInMsgQueue:Cache Num", pstMsgQueue->ucCacheMsgNum); return; }