Пример #1
0
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);
    }
}
Пример #2
0
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);
    }
}
Пример #3
0
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);
    }
}
Пример #4
0
void UtList_Reset(UtListHead_t *ListHead)
{
    while (!UtList_IsEmpty(ListHead)) {
        UtList_DeleteFirst(ListHead);
    }
}