int32 Ut_CFE_SB_RcvMsgHook(CFE_SB_MsgPtr_t *BufPtr, CFE_SB_PipeId_t PipeId, int32 TimeOut) { UtListNode_t *CurrentNode; if (PipeTable[PipeId].InUse == TRUE) { if (UtList_IsEmpty(&PipeTable[PipeId].MsgQueue) == FALSE) { CurrentNode = UtList_First(&PipeTable[PipeId].MsgQueue); if (CurrentNode->Tag == TRUE) { /* Indicates buffer is in use */ UtList_DeleteFirst(&PipeTable[PipeId].MsgQueue); } if (UtList_IsEmpty(&PipeTable[PipeId].MsgQueue) == FALSE) { CurrentNode = UtList_First(&PipeTable[PipeId].MsgQueue); CurrentNode->Tag = TRUE; /* Indicates buffer is in use */ *BufPtr = CurrentNode->Data; return(CFE_SUCCESS); } } if (TimeOut == CFE_SB_POLL) { return(CFE_SB_NO_MESSAGE); } else { return(CFE_SB_TIME_OUT); } } else { printf("Error - Invalid PipeId\n"); return(CFE_SB_NO_MESSAGE); } }
void UtList_RemoveNode(UtListHead_t *ListHead, void *Data, UtListNode_t *CurrentNode) { if (!UtList_IsEmpty(ListHead)) { memcpy(Data, CurrentNode->Data, CurrentNode->DataSize); UtList_DeleteNode(ListHead, CurrentNode); } }
void UtList_DeleteNode(UtListHead_t *ListHead, UtListNode_t *DeleteNode) { if (!UtList_IsEmpty(ListHead)) { if (ListHead->NumberOfEntries == 1) { ListHead->First = NULL; ListHead->Last = NULL; ListHead->NumberOfEntries = 0; } else if (DeleteNode == ListHead->First) { ListHead->First = DeleteNode->Next; ListHead->First->Prev = NULL; ListHead->NumberOfEntries--; } else if (DeleteNode == ListHead->Last) { ListHead->Last = DeleteNode->Prev; ListHead->Last->Next = NULL; ListHead->NumberOfEntries--; } else { DeleteNode->Prev->Next = DeleteNode->Next; DeleteNode->Next->Prev = DeleteNode->Prev; ListHead->NumberOfEntries--; } free(DeleteNode->Data); free(DeleteNode); } }
void UtList_Reset(UtListHead_t *ListHead) { while (!UtList_IsEmpty(ListHead)) { UtList_DeleteFirst(ListHead); } }