SCOM Serial Communication Protocol  0.5.2
Data Structures | Typedefs | Enumerations | Functions
scom_frame_queue.h File Reference

Frame queue. More...

#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include "hal.h"
#include "scom_frame.h"

Go to the source code of this file.

Data Structures

struct  SCOMFrameQueueItem
 Definition of a single SCOM frame queue item. More...
 
struct  SCOMFrameQueue
 Definition of a SCOM frame queue. More...
 

Typedefs

typedef struct SCOMFrameQueueItem SCOMFrameQueueItem
 Type representing a SCOM frame queue item. More...
 

Enumerations

enum  SCOMFrameState {
  SCOM_FRAME_EMPTY = 0, SCOM_FRAME_ALLOCATED, SCOM_FRAME_TX_READY_FOR_SEND, SCOM_FRAME_TX_SENT,
  SCOM_FRAME_TX_WAIT_FOR_ACK, SCOM_FRAME_RX_READ_DATA, SCOM_FRAME_RX_RECEIVED
}
 

Functions

bool SCOMFrameQueue_Init (SCOMFrameQueue *frameQueue)
 
void SCOMFrameQueue_Deinit (SCOMFrameQueue *frameQueue)
 
bool SCOMFrameQueue_Insert (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frameQueueItem)
 
bool SCOMFrameQueue_Delete (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frameQueueItem)
 
bool SCOMFrameQueue_Append (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frameQueueItem)
 
SCOMFrameQueueItemSCOMFrameQueue_GetFirstInQueue (SCOMFrameQueue *frameQueue)
 
SCOMFrameQueueItemSCOMFrameQueue_PullOutFirstInQueue (SCOMFrameQueue *frameQueue)
 
SCOMFrameQueueItemSCOMFrameQueue_Lock (SCOMFrameQueue *frameQueue)
 
void SCOMFrameQueue_Unlock (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frameQueueItem)
 
SCOMFrameQueueItemSCOMFrameQueue_GetItemByFrame (const SCOMFrameQueue *frameQueue, const SCOMFrame *frame)
 
size_t SCOMFrameQueue_GetFreeSpace (const SCOMFrameQueue *frameQueue)
 

Detailed Description

Frame queue.

License: $License$
Version
Revision
401
Purpose: SCOM serial communication protocol

Definition in file scom_frame_queue.h.

Typedef Documentation

Type representing a SCOM frame queue item.

Definition at line 33 of file scom_frame_queue.h.

Enumeration Type Documentation

Possible SCOMFrame states

Enumerator
SCOM_FRAME_EMPTY 
SCOM_FRAME_ALLOCATED 
SCOM_FRAME_TX_READY_FOR_SEND 
SCOM_FRAME_TX_SENT 
SCOM_FRAME_TX_WAIT_FOR_ACK 
SCOM_FRAME_RX_READ_DATA 
SCOM_FRAME_RX_RECEIVED 

Definition at line 20 of file scom_frame_queue.h.

Function Documentation

bool SCOMFrameQueue_Append ( SCOMFrameQueue frameQueue,
SCOMFrameQueueItem frameQueueItem 
)

Appends a given SCOM frame queue item at the end of a given SCOM frame queue.

Parameters
frameQueueSCOM frame queue
frameQueueItemitem to append
Returns
true if the item was appended successfully, false otherwise

Definition at line 187 of file scom_frame_queue.c.

References SCOMFrameQueue::head, SCOMFrameQueue::lock, SCOMFrameQueueItem::next, and SCOM_FRAME_QUEUE_LOCK_TIMEOUT.

void SCOMFrameQueue_Deinit ( SCOMFrameQueue frameQueue)

Deinitializes a given SCOM frame queue.

Parameters
frameQueue

Definition at line 58 of file scom_frame_queue.c.

References SCOMFrameQueue::lock.

Referenced by SCOM_Deinit().

bool SCOMFrameQueue_Delete ( SCOMFrameQueue frameQueue,
SCOMFrameQueueItem frameQueueItem 
)

Deletes a given SCOM frame queue item from a given SCOM frame queue.

Parameters
frameQueueSCOM frame queue
frameQueueItemitem to delete
Return values
trueif the element was deleted from the queue
falseif the element has not been found in the queue

Definition at line 142 of file scom_frame_queue.c.

References SCOMFrameQueue::head, SCOMFrameQueue::lock, SCOMFrameQueueItem::next, SCOM_FRAME_QUEUE_LOCK_TIMEOUT, and SCOMFrameQueue::size.

Referenced by SCOMFrameQueue_Unlock().

SCOMFrameQueueItem* SCOMFrameQueue_GetFirstInQueue ( SCOMFrameQueue frameQueue)

Gets the first item in a given SCOM frame queue.

Parameters
frameQueueSCOM frame queue
Returns
first item in queue or NULL if the queue is empty

Definition at line 223 of file scom_frame_queue.c.

References SCOMFrameQueue::head, SCOMFrameQueue::lock, and SCOM_FRAME_QUEUE_LOCK_TIMEOUT.

Referenced by SCOM_GetReceivedFrame(), SCOM_IsBusy(), and SCOM_Proc().

size_t SCOMFrameQueue_GetFreeSpace ( const SCOMFrameQueue frameQueue)

Retrieves the number of frames that can still fit the frame queue.

Parameters
frameQueueSCOM frame queue
Returns
number of frames that can fit the queue

Definition at line 372 of file scom_frame_queue.c.

References SCOMFrameQueue::lock, SCOMFrameQueue::pool, SCOM_FRAME_EMPTY, SCOM_FRAME_QUEUE_LOCK_TIMEOUT, SCOMFrameQueue::size, and SCOMFrameQueueItem::state.

SCOMFrameQueueItem* SCOMFrameQueue_GetItemByFrame ( const SCOMFrameQueue frameQueue,
const SCOMFrame frame 
)

Retrieves the item, that matches the provided frame data pointer.

Parameters
frameQueueSCOM frame queue
framepointer to SCOMFrame structure, that is embedded in one of the managed frame queue items
Returns
pointer to an item structure of NULL if the matching item could not been found

Definition at line 345 of file scom_frame_queue.c.

References SCOMFrameQueueItem::frame, SCOMFrameQueue::pool, and SCOMFrameQueue::size.

Referenced by SCOM_SendAllocatedFrame(), SCOM_SendAllocatedFrameWithoutACK(), SCOM_SendAllocatedMultiFrame(), and SCOM_UnlockFrame().

bool SCOMFrameQueue_Init ( SCOMFrameQueue frameQueue)

Initializes a given SCOM frame queue.

Parameters
frameQueueSCOM frame queue
Returns
true if the queue was initialized properly, false otherwise

Definition at line 25 of file scom_frame_queue.c.

References SCOMFrameQueue::head, SCOMFrameQueue::lock, SCOMFrameQueueItem::next, SCOMFrameQueue::pool, SCOM_FRAME_EMPTY, SCOM_SOF_CHARACTER, SCOMFrameQueue::size, and SCOMFrameQueueItem::state.

Referenced by SCOM_Init().

bool SCOMFrameQueue_Insert ( SCOMFrameQueue frameQueue,
SCOMFrameQueueItem frameQueueItem 
)

Inserts a given SCOM frame queue item into a given SCOM frame queue based on the priority of the SCOMFrame carried in that item. The resulting queue is always firstly sorted by priority (highest first) and secondly by insertion order.

Parameters
frameQueueSCOM frame queue
frameQueueItemitem to insert, this item holds and SCOMFrame
Returns
true if the insertion operation succeeded, false otherwise

Definition at line 70 of file scom_frame_queue.c.

References SCOMFrameQueueItem::frame, SCOMFrameQueue::head, SCOMFrameQueue::lock, SCOMFrameQueueItem::next, SCOM_FRAME_EMPTY, SCOM_FRAME_QUEUE_LOCK_TIMEOUT, SCOMFrame_GetPriority(), SCOMFrameQueue::size, and SCOMFrameQueueItem::state.

Referenced by SCOM_SendAllocatedFrame(), SCOM_SendAllocatedFrameWithoutACK(), SCOM_SendAllocatedMultiFrame(), SCOM_SendFrame(), SCOM_SendFrameWithoutAck(), SCOM_SendMultiFrame(), SCOM_SendServiceFrame(), and SCOM_SendServiceMultiFrame().

SCOMFrameQueueItem* SCOMFrameQueue_Lock ( SCOMFrameQueue frameQueue)
SCOMFrameQueueItem* SCOMFrameQueue_PullOutFirstInQueue ( SCOMFrameQueue frameQueue)

Pulls out the first item in a given SCOM frame queue. The item is removed from the queue.

Parameters
frameQueueSCOM frame queue
Returns
first item in queue or NULL if the queue is empty

Definition at line 239 of file scom_frame_queue.c.

References SCOMFrameQueue::head, SCOMFrameQueue::lock, SCOMFrameQueueItem::next, and SCOM_FRAME_QUEUE_LOCK_TIMEOUT.

void SCOMFrameQueue_Unlock ( SCOMFrameQueue frameQueue,
SCOMFrameQueueItem frameQueueItem 
)

Unlocks an item, that was previously locked with SCOMFrameQueue_Lock. If the item is in the queue, it is deleted prior to unlocking.

Parameters
frameQueueSCOM frame queue
frameQueueItemitem to unlock

Definition at line 317 of file scom_frame_queue.c.

References SCOMFrameQueue::pool, SCOM_FRAME_EMPTY, SCOMFrameQueue_Delete(), SCOMFrameQueue::size, and SCOMFrameQueueItem::state.

Referenced by SCOM_Proc(), and SCOM_UnlockFrame().