SCOM Serial Communication Protocol
0.5.2
|
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... | |
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) |
SCOMFrameQueueItem * | SCOMFrameQueue_GetFirstInQueue (SCOMFrameQueue *frameQueue) |
SCOMFrameQueueItem * | SCOMFrameQueue_PullOutFirstInQueue (SCOMFrameQueue *frameQueue) |
SCOMFrameQueueItem * | SCOMFrameQueue_Lock (SCOMFrameQueue *frameQueue) |
void | SCOMFrameQueue_Unlock (SCOMFrameQueue *frameQueue, SCOMFrameQueueItem *frameQueueItem) |
SCOMFrameQueueItem * | SCOMFrameQueue_GetItemByFrame (const SCOMFrameQueue *frameQueue, const SCOMFrame *frame) |
size_t | SCOMFrameQueue_GetFreeSpace (const SCOMFrameQueue *frameQueue) |
Frame queue.
Definition in file scom_frame_queue.h.
typedef struct SCOMFrameQueueItem SCOMFrameQueueItem |
Type representing a SCOM frame queue item.
Definition at line 33 of file scom_frame_queue.h.
enum SCOMFrameState |
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.
bool SCOMFrameQueue_Append | ( | SCOMFrameQueue * | frameQueue, |
SCOMFrameQueueItem * | frameQueueItem | ||
) |
Appends a given SCOM frame queue item at the end of a given SCOM frame queue.
frameQueue | SCOM frame queue |
frameQueueItem | item to append |
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.
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.
frameQueue | SCOM frame queue |
frameQueueItem | item to delete |
true | if the element was deleted from the queue |
false | if 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.
frameQueue | SCOM frame queue |
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.
frameQueue | SCOM frame 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.
frameQueue | SCOM frame queue |
frame | pointer to SCOMFrame structure, that is embedded in one of the managed frame queue items |
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.
frameQueue | SCOM frame queue |
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.
frameQueue | SCOM frame queue |
frameQueueItem | item to insert, this item holds and SCOMFrame |
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 | ) |
Locks a new item for the SCOM frame queue.
frameQueue | SCOM frame queue |
Definition at line 265 of file scom_frame_queue.c.
References HAL_PACKED::ctrl, SCOMFrameQueueItem::frame, SCOMFrameQueue::lock, SCOMFrameQueueItem::next, SCOMFrameQueue::pool, SCOM_FRAME_ALLOCATED, SCOM_FRAME_EMPTY, SCOM_FRAME_QUEUE_LOCK_TIMEOUT, SCOM_SOF_CHARACTER, SCOMFrameQueue::size, HAL_PACKED::size, HAL_PACKED::sof, SCOMFrameQueueItem::state, and HAL_PACKED::sync.
Referenced by SCOM_AllocFrame(), SCOM_SendFrame(), SCOM_SendFrameWithoutAck(), SCOM_SendMultiFrame(), SCOM_SendServiceFrame(), and SCOM_SendServiceMultiFrame().
SCOMFrameQueueItem* SCOMFrameQueue_PullOutFirstInQueue | ( | SCOMFrameQueue * | frameQueue | ) |
Pulls out the first item in a given SCOM frame queue. The item is removed from the queue.
frameQueue | SCOM frame queue |
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.
frameQueue | SCOM frame queue |
frameQueueItem | item 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().