SCOM Serial Communication Protocol  0.5.2
Macros | Functions
scom_frame_queue.c File Reference

Frame queue. More...

#include "hal.h"
#include "scom_frame_queue.h"
#include "scom_crc.h"

Go to the source code of this file.

Macros

#define HAL_LOG_CHANNEL   SCOM
 
#define HAL_LOG_SUBCHANNEL   FRAME
 
#define SCOM_FRAME_QUEUE_LOCK_TIMEOUT   5000
 Maximum time allowed to be spend waiting for access to the SCOM frame queue. More...
 

Functions

bool SCOMFrameQueue_Init (SCOMFrameQueue *frameQueue)
 
void SCOMFrameQueue_Deinit (SCOMFrameQueue *frameQueue)
 
bool SCOMFrameQueue_Insert (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frame)
 
bool SCOMFrameQueue_Delete (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frame)
 
bool SCOMFrameQueue_Append (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frame)
 
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
448
Purpose: SCOM serial communication protocol

Definition in file scom_frame_queue.c.

Macro Definition Documentation

#define HAL_LOG_CHANNEL   SCOM

Definition at line 9 of file scom_frame_queue.c.

#define HAL_LOG_SUBCHANNEL   FRAME

Definition at line 10 of file scom_frame_queue.c.

#define SCOM_FRAME_QUEUE_LOCK_TIMEOUT   5000

Maximum time allowed to be spend waiting for access to the SCOM frame queue.

Definition at line 19 of file scom_frame_queue.c.

Referenced by SCOMFrameQueue_Append(), SCOMFrameQueue_Delete(), SCOMFrameQueue_GetFirstInQueue(), SCOMFrameQueue_GetFreeSpace(), SCOMFrameQueue_Insert(), SCOMFrameQueue_Lock(), and SCOMFrameQueue_PullOutFirstInQueue().

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().