STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
stream_buffer.c File Reference
#include <stdint.h>
#include <string.h>
#include "FreeRTOS.h"
#include "task.h"
#include "stream_buffer.h"
Include dependency graph for stream_buffer.c:

Go to the source code of this file.

Classes

struct  StreamBufferDef_t

Macros

#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
#define sbRECEIVE_COMPLETED(pxStreamBuffer)
#define prvRECEIVE_COMPLETED(pxStreamBuffer)
#define sbRECEIVE_COMPLETED_FROM_ISR(pxStreamBuffer, pxHigherPriorityTaskWoken)
#define prvRECEIVE_COMPLETED_FROM_ISR(pxStreamBuffer, pxHigherPriorityTaskWoken)
#define sbSEND_COMPLETED(pxStreamBuffer)
#define prvSEND_COMPLETED(pxStreamBuffer)
#define sbSEND_COMPLETE_FROM_ISR(pxStreamBuffer, pxHigherPriorityTaskWoken)
#define prvSEND_COMPLETE_FROM_ISR(pxStreamBuffer, pxHigherPriorityTaskWoken)
#define sbBYTES_TO_STORE_MESSAGE_LENGTH   ( sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) )
#define sbFLAGS_IS_MESSAGE_BUFFER   ( ( uint8_t ) 1 ) /* Set if the stream buffer was created as a message buffer, in which case it holds discrete messages rather than a stream. */
#define sbFLAGS_IS_STATICALLY_ALLOCATED   ( ( uint8_t ) 2 ) /* Set if the stream buffer was created using statically allocated memory. */

Typedefs

typedef struct StreamBufferDef_t StreamBuffer_t

Functions

static size_t prvBytesInBuffer (const StreamBuffer_t *const pxStreamBuffer) PRIVILEGED_FUNCTION
static size_t prvWriteBytesToBuffer (StreamBuffer_t *const pxStreamBuffer, const uint8_t *pucData, size_t xCount, size_t xHead) PRIVILEGED_FUNCTION
static size_t prvReadMessageFromBuffer (StreamBuffer_t *pxStreamBuffer, void *pvRxData, size_t xBufferLengthBytes, size_t xBytesAvailable) PRIVILEGED_FUNCTION
static size_t prvWriteMessageToBuffer (StreamBuffer_t *const pxStreamBuffer, const void *pvTxData, size_t xDataLengthBytes, size_t xSpace, size_t xRequiredSpace) PRIVILEGED_FUNCTION
static size_t prvReadBytesFromBuffer (StreamBuffer_t *pxStreamBuffer, uint8_t *pucData, size_t xCount, size_t xTail) PRIVILEGED_FUNCTION
static void prvInitialiseNewStreamBuffer (StreamBuffer_t *const pxStreamBuffer, uint8_t *const pucBuffer, size_t xBufferSizeBytes, size_t xTriggerLevelBytes, uint8_t ucFlags, StreamBufferCallbackFunction_t pxSendCompletedCallback, StreamBufferCallbackFunction_t pxReceiveCompletedCallback) PRIVILEGED_FUNCTION
void vStreamBufferDelete (StreamBufferHandle_t xStreamBuffer)
BaseType_t xStreamBufferReset (StreamBufferHandle_t xStreamBuffer)
BaseType_t xStreamBufferSetTriggerLevel (StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel)
size_t xStreamBufferSpacesAvailable (StreamBufferHandle_t xStreamBuffer)
size_t xStreamBufferBytesAvailable (StreamBufferHandle_t xStreamBuffer)
size_t xStreamBufferSend (StreamBufferHandle_t xStreamBuffer, const void *pvTxData, size_t xDataLengthBytes, TickType_t xTicksToWait)
size_t xStreamBufferSendFromISR (StreamBufferHandle_t xStreamBuffer, const void *pvTxData, size_t xDataLengthBytes, BaseType_t *const pxHigherPriorityTaskWoken)
size_t xStreamBufferReceive (StreamBufferHandle_t xStreamBuffer, void *pvRxData, size_t xBufferLengthBytes, TickType_t xTicksToWait)
size_t xStreamBufferNextMessageLengthBytes (StreamBufferHandle_t xStreamBuffer)
size_t xStreamBufferReceiveFromISR (StreamBufferHandle_t xStreamBuffer, void *pvRxData, size_t xBufferLengthBytes, BaseType_t *const pxHigherPriorityTaskWoken)
BaseType_t xStreamBufferIsEmpty (StreamBufferHandle_t xStreamBuffer)
BaseType_t xStreamBufferIsFull (StreamBufferHandle_t xStreamBuffer)
BaseType_t xStreamBufferSendCompletedFromISR (StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken)
BaseType_t xStreamBufferReceiveCompletedFromISR (StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken)

Macro Definition Documentation

◆ MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE

Definition at line 36 of file stream_buffer.c.

◆ prvRECEIVE_COMPLETED

#define prvRECEIVE_COMPLETED ( pxStreamBuffer)
Value:
sbRECEIVE_COMPLETED( ( pxStreamBuffer ) )
#define sbRECEIVE_COMPLETED(pxStreamBuffer)

Definition at line 92 of file stream_buffer.c.

Referenced by xStreamBufferReceive().

◆ prvRECEIVE_COMPLETED_FROM_ISR

#define prvRECEIVE_COMPLETED_FROM_ISR ( pxStreamBuffer,
pxHigherPriorityTaskWoken )
Value:
sbRECEIVE_COMPLETED_FROM_ISR( ( pxStreamBuffer ), ( pxHigherPriorityTaskWoken ) )
#define sbRECEIVE_COMPLETED_FROM_ISR(pxStreamBuffer, pxHigherPriorityTaskWoken)

Definition at line 130 of file stream_buffer.c.

Referenced by xStreamBufferReceiveFromISR().

◆ prvSEND_COMPLETE_FROM_ISR

#define prvSEND_COMPLETE_FROM_ISR ( pxStreamBuffer,
pxHigherPriorityTaskWoken )
Value:
sbSEND_COMPLETE_FROM_ISR( ( pxStreamBuffer ), ( pxHigherPriorityTaskWoken ) )
#define sbSEND_COMPLETE_FROM_ISR(pxStreamBuffer, pxHigherPriorityTaskWoken)

Definition at line 207 of file stream_buffer.c.

Referenced by xStreamBufferSendFromISR().

◆ prvSEND_COMPLETED

#define prvSEND_COMPLETED ( pxStreamBuffer)
Value:
sbSEND_COMPLETED( ( pxStreamBuffer ) )
#define sbSEND_COMPLETED(pxStreamBuffer)

Definition at line 169 of file stream_buffer.c.

Referenced by xStreamBufferSend().

◆ sbBYTES_TO_STORE_MESSAGE_LENGTH

◆ sbFLAGS_IS_MESSAGE_BUFFER

#define sbFLAGS_IS_MESSAGE_BUFFER   ( ( uint8_t ) 1 ) /* Set if the stream buffer was created as a message buffer, in which case it holds discrete messages rather than a stream. */

◆ sbFLAGS_IS_STATICALLY_ALLOCATED

#define sbFLAGS_IS_STATICALLY_ALLOCATED   ( ( uint8_t ) 2 ) /* Set if the stream buffer was created using statically allocated memory. */

Definition at line 218 of file stream_buffer.c.

Referenced by vStreamBufferDelete().

◆ sbRECEIVE_COMPLETED

#define sbRECEIVE_COMPLETED ( pxStreamBuffer)
Value:
{ \
if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL ) \
{ \
( void ) xTaskNotify( ( pxStreamBuffer )->xTaskWaitingToSend, \
( uint32_t ) 0, \
eNoAction ); \
( pxStreamBuffer )->xTaskWaitingToSend = NULL; \
} \
} \
( void ) xTaskResumeAll()
#define NULL
Definition usbd_def.h:44
BaseType_t xTaskResumeAll(void) PRIVILEGED_FUNCTION
Definition tasks.c:2187
#define xTaskNotify(xTaskToNotify, ulValue, eAction)
Definition task.h:2161
void vTaskSuspendAll(void) PRIVILEGED_FUNCTION
Definition tasks.c:2103
@ eNoAction
Definition task.h:114

Definition at line 62 of file stream_buffer.c.

◆ sbRECEIVE_COMPLETED_FROM_ISR

#define sbRECEIVE_COMPLETED_FROM_ISR ( pxStreamBuffer,
pxHigherPriorityTaskWoken )
Value:
do { \
UBaseType_t uxSavedInterruptStatus; \
\
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
{ \
if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL ) \
{ \
( void ) xTaskNotifyFromISR( ( pxStreamBuffer )->xTaskWaitingToSend, \
( uint32_t ) 0, \
( pxHigherPriorityTaskWoken ) ); \
( pxStreamBuffer )->xTaskWaitingToSend = NULL; \
} \
} \
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
} while( 0 )
#define portSET_INTERRUPT_MASK_FROM_ISR()
Definition portmacro.h:107
unsigned long UBaseType_t
Definition portmacro.h:60
#define xTaskNotifyFromISR(xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken)
Definition task.h:2314

Definition at line 96 of file stream_buffer.c.

◆ sbSEND_COMPLETE_FROM_ISR

#define sbSEND_COMPLETE_FROM_ISR ( pxStreamBuffer,
pxHigherPriorityTaskWoken )
Value:
do { \
UBaseType_t uxSavedInterruptStatus; \
\
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
{ \
if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL ) \
{ \
( void ) xTaskNotifyFromISR( ( pxStreamBuffer )->xTaskWaitingToReceive, \
( uint32_t ) 0, \
( pxHigherPriorityTaskWoken ) ); \
( pxStreamBuffer )->xTaskWaitingToReceive = NULL; \
} \
} \
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
} while( 0 )

Definition at line 174 of file stream_buffer.c.

◆ sbSEND_COMPLETED

#define sbSEND_COMPLETED ( pxStreamBuffer)
Value:
{ \
if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL ) \
{ \
( void ) xTaskNotify( ( pxStreamBuffer )->xTaskWaitingToReceive, \
( uint32_t ) 0, \
eNoAction ); \
( pxStreamBuffer )->xTaskWaitingToReceive = NULL; \
} \
} \
( void ) xTaskResumeAll()

Definition at line 139 of file stream_buffer.c.

Typedef Documentation

◆ StreamBuffer_t

Function Documentation

◆ prvBytesInBuffer()

◆ prvInitialiseNewStreamBuffer()

void prvInitialiseNewStreamBuffer ( StreamBuffer_t *const pxStreamBuffer,
uint8_t *const pucBuffer,
size_t xBufferSizeBytes,
size_t xTriggerLevelBytes,
uint8_t ucFlags,
StreamBufferCallbackFunction_t pxSendCompletedCallback,
StreamBufferCallbackFunction_t pxReceiveCompletedCallback )
static

◆ prvReadBytesFromBuffer()

size_t prvReadBytesFromBuffer ( StreamBuffer_t * pxStreamBuffer,
uint8_t * pucData,
size_t xCount,
size_t xTail )
static

◆ prvReadMessageFromBuffer()

size_t prvReadMessageFromBuffer ( StreamBuffer_t * pxStreamBuffer,
void * pvRxData,
size_t xBufferLengthBytes,
size_t xBytesAvailable )
static

◆ prvWriteBytesToBuffer()

size_t prvWriteBytesToBuffer ( StreamBuffer_t *const pxStreamBuffer,
const uint8_t * pucData,
size_t xCount,
size_t xHead )
static

◆ prvWriteMessageToBuffer()

size_t prvWriteMessageToBuffer ( StreamBuffer_t *const pxStreamBuffer,
const void * pvTxData,
size_t xDataLengthBytes,
size_t xSpace,
size_t xRequiredSpace )
static

◆ vStreamBufferDelete()

void vStreamBufferDelete ( StreamBufferHandle_t xStreamBuffer)

◆ xStreamBufferBytesAvailable()

size_t xStreamBufferBytesAvailable ( StreamBufferHandle_t xStreamBuffer)

Definition at line 658 of file stream_buffer.c.

References configASSERT, and prvBytesInBuffer().

◆ xStreamBufferIsEmpty()

BaseType_t xStreamBufferIsEmpty ( StreamBufferHandle_t xStreamBuffer)

◆ xStreamBufferIsFull()

◆ xStreamBufferNextMessageLengthBytes()

◆ xStreamBufferReceive()

◆ xStreamBufferReceiveCompletedFromISR()

BaseType_t xStreamBufferReceiveCompletedFromISR ( StreamBufferHandle_t xStreamBuffer,
BaseType_t * pxHigherPriorityTaskWoken )

◆ xStreamBufferReceiveFromISR()

size_t xStreamBufferReceiveFromISR ( StreamBufferHandle_t xStreamBuffer,
void * pvRxData,
size_t xBufferLengthBytes,
BaseType_t *const pxHigherPriorityTaskWoken )

◆ xStreamBufferReset()

◆ xStreamBufferSend()

◆ xStreamBufferSendCompletedFromISR()

BaseType_t xStreamBufferSendCompletedFromISR ( StreamBufferHandle_t xStreamBuffer,
BaseType_t * pxHigherPriorityTaskWoken )

◆ xStreamBufferSendFromISR()

◆ xStreamBufferSetTriggerLevel()

BaseType_t xStreamBufferSetTriggerLevel ( StreamBufferHandle_t xStreamBuffer,
size_t xTriggerLevel )

Definition at line 595 of file stream_buffer.c.

References configASSERT, pdFALSE, pdPASS, and StreamBufferDef_t::xTriggerLevelBytes.

◆ xStreamBufferSpacesAvailable()