33 #ifndef ti_drivers_RCL_Buffers_h__include 34 #define ti_drivers_RCL_Buffers_h__include 37 #include <ti/drivers/utils/List.h> 110 #define RCL_Buffer_bytesToWords(byteLen) (((byteLen) + sizeof(uint32_t) - 1) / sizeof(uint32_t)) 116 #define RCL_Buffer_DataEntry_paddedLen(len) (RCL_Buffer_bytesToWords((len) + sizeof(uint16_t)) * sizeof(uint32_t)) 133 #define RCL_Buffer_entryLen(numPad, hdrLen, dataLen) (RCL_Buffer_DataEntry_paddedLen(sizeof(uint8_t) + (numPad) + (hdrLen) + (dataLen))) 145 #define RCL_TxBuffer_len(numPad, hdrLen, dataLen) (offsetof(RCL_Buffer_TxBuffer, length) + RCL_Buffer_entryLen(numPad, hdrLen, dataLen)) 157 #define RCL_TxBuffer_len_u32(numPad, hdrLen, dataLen) (RCL_Buffer_bytesToWords(RCL_TxBuffer_len(numPad, hdrLen, dataLen))) 165 #define RCL_MultiBuffer_len(dataLen) (offsetof(RCL_MultiBuffer, data) + (dataLen)) 173 #define RCL_MultiBuffer_len_u32(dataLen) (RCL_Buffer_bytesToWords(RCL_MultiBuffer_len(dataLen))) 184 return (RCL_Buffer_TxBuffer *)List_get(list);
199 return (RCL_Buffer_TxBuffer *) (list->head);
214 return (RCL_Buffer_TxBuffer *)(((List_Elem *)elem)->next);
258 return (RCL_MultiBuffer *) (list->head);
273 return (RCL_MultiBuffer *)(((List_Elem *)elem)->next);
289 return (RCL_MultiBuffer *)List_get(list);
487 return & curBuffer->data[curBuffer->tailIndex];
503 curBuffer->tailIndex += numBytes;
void RCL_TxBuffer_put(List_List *list, RCL_Buffer_TxBuffer *elem)
Function to atomically put an elem onto the end of a Tx Buffer list.
Definition: RCL_Buffer.c:58
void RCL_MultiBuffer_ListInfo_init(RCL_MultiBuffer_ListInfo *listInfo, List_List *list)
Function to initialize information for traversing a multi buffer list.
Definition: RCL_Buffer.c:194
Information about an RCL_MultiBuffer list being traversed.
Definition: RCL_Buffer.h:101
Definition: RCL_Buffer.h:43
static uint8_t * RCL_MultiBuffer_getNextWritableByte(RCL_MultiBuffer *curBuffer)
Find the first byte to write in an RCL_MultiBuffer.
Definition: RCL_Buffer.h:484
uint8_t numPad
Definition: RCL_Buffer.h:62
List_Elem __elem__
Definition: RCL_Buffer.h:87
Definition of an RCL Rx MultiBuffer.
Definition: RCL_Buffer.h:86
RCL_BufferState state
Definition: RCL_Buffer.h:88
uint16_t tailIndex
Definition: RCL_Buffer.h:91
Definition: RCL_Buffer.h:45
static void RCL_MultiBuffer_commitBytes(RCL_MultiBuffer *curBuffer, uint32_t numBytes)
Update number of bytes written to RCL_MultiBuffer.
Definition: RCL_Buffer.h:500
RCL_MultiBuffer * RCL_MultiBuffer_getBuffer(RCL_MultiBuffer *curBuffer, uint32_t minLength)
Returns a buffer with at least minLength bytes remaining capacity.
Definition: RCL_Buffer.c:328
List_Elem __elem__
Definition: RCL_Buffer.h:59
RCL_BufferState state
Definition: RCL_Buffer.h:60
Definition of an RCL Rx Buffer Entry.
Definition: RCL_Buffer.h:73
uint8_t numPad
Definition: RCL_Buffer.h:75
uint8_t data[]
Definition: RCL_Buffer.h:64
void RCL_MultiBuffer_put(List_List *list, RCL_MultiBuffer *elem)
Function to atomically put an elem onto the end of a multi buffer list.
Definition: RCL_Buffer.c:123
RCL_Buffer_DataEntry * RCL_MultiBuffer_RxEntry_get(List_List *list, List_List *consumedBuffers)
Function to get the first entry in a MultiBuffer list.
Definition: RCL_Buffer.c:133
uint8_t * RCL_TxBuffer_init(RCL_Buffer_TxBuffer *buffer, uint32_t numPad, uint32_t hdrLen, uint32_t dataLen)
Function to initialize a TX buffer entry for use by RCL.
Definition: RCL_Buffer.c:69
void RCL_MultiBuffer_clear(RCL_MultiBuffer *buffer)
Function to clear a multi buffer entry for re-use by RCL.
Definition: RCL_Buffer.c:101
uint16_t length __attribute__((aligned(4)))
static RCL_MultiBuffer * RCL_MultiBuffer_get(List_List *list)
Function to get the first elem in a MultiBuffer list.
Definition: RCL_Buffer.h:287
RCL_Buffer_DataEntry * RCL_MultiBuffer_RxEntry_next(RCL_MultiBuffer_ListInfo *listInfo)
Function to return the next entry in a list of multi buffers.
Definition: RCL_Buffer.c:214
bool RCL_MultiBuffer_RxEntry_isLast(RCL_MultiBuffer_ListInfo *listInfo)
Function to check a traversed entry was the last one.
Definition: RCL_Buffer.c:264
uint8_t pad0
Definition: RCL_Buffer.h:76
static RCL_Buffer_TxBuffer * RCL_TxBuffer_head(List_List *list)
Function to return the head of a TxBuffer list.
Definition: RCL_Buffer.h:197
static RCL_MultiBuffer * RCL_MultiBuffer_head(List_List *list)
Function to return the head of a MultiBuffer list.
Definition: RCL_Buffer.h:256
RCL_MultiBuffer * nextBuffer
Definition: RCL_Buffer.h:103
uint16_t nextIndex
Definition: RCL_Buffer.h:104
uint16_t headIndex
Definition: RCL_Buffer.h:90
static RCL_Buffer_TxBuffer * RCL_TxBuffer_next(RCL_Buffer_TxBuffer *elem)
Function to return the next elem in a linked list of Tx Buffers.
Definition: RCL_Buffer.h:212
uint16_t length
Definition: RCL_Buffer.h:89
List_List * multiBuffers
Definition: RCL_Buffer.h:102
Definition: RCL_Buffer.h:44
void RCL_MultiBuffer_init(RCL_MultiBuffer *buffer, size_t size)
Function to initialize a multi buffer entry for use by RCL.
Definition: RCL_Buffer.c:111
RCL_BufferState
Buffer state.
Definition: RCL_Buffer.h:42
size_t RCL_Buffer_readPartialRxBuffer(RCL_Buffer_DataEntry *dataEntry, size_t entrySize)
Read partially received packet into buffer.
Definition: RCL_Buffer.c:283
Definition of an RCL Tx Buffer.
Definition: RCL_Buffer.h:58
uint32_t RCL_MultiBuffer_findAvailableRxSpace(const RCL_MultiBuffer *curBuffer)
Find the minumum number of bytes that can be stored in available MultiBuffers.
Definition: RCL_Buffer.c:382
bool RCL_MultiBuffer_RxEntry_isEmpty(List_List *list)
Function to check if the MultiBuffer List is out of entries.
Definition: RCL_Buffer.c:178
static RCL_MultiBuffer * RCL_MultiBuffer_next(RCL_MultiBuffer *elem)
Function to return the next elem in a linked list of MultiBuffers.
Definition: RCL_Buffer.h:271
RCL_MultiBuffer * RCL_MultiBuffer_findFirstWritableBuffer(RCL_MultiBuffer *head)
Find the first writable buffer in a list of MultiBuffers.
Definition: RCL_Buffer.c:315
static RCL_Buffer_TxBuffer * RCL_TxBuffer_get(List_List *list)
Function to atomically get the first elem in a Tx Buffer list.
Definition: RCL_Buffer.h:182
uint8_t pad0
Definition: RCL_Buffer.h:63