Radio Control Layer (RCL)
|
Go to the documentation of this file.
33 #ifndef ti_drivers_RCL_Buffers_h__include
34 #define ti_drivers_RCL_Buffers_h__include
37 #include <ti/drivers/utils/List.h>
111 #define RCL_Buffer_bytesToWords(byteLen) (((byteLen) + sizeof(uint32_t) - 1) / sizeof(uint32_t))
117 #define RCL_Buffer_DataEntry_paddedLen(len) (RCL_Buffer_bytesToWords((len) + sizeof(uint16_t)) * sizeof(uint32_t))
134 #define RCL_Buffer_entryLen(numPad, hdrLen, dataLen) (RCL_Buffer_DataEntry_paddedLen(sizeof(uint8_t) + (numPad) + (hdrLen) + (dataLen)))
146 #define RCL_TxBuffer_len(numPad, hdrLen, dataLen) (offsetof(RCL_Buffer_TxBuffer, length) + RCL_Buffer_entryLen(numPad, hdrLen, dataLen))
158 #define RCL_TxBuffer_len_u32(numPad, hdrLen, dataLen) (RCL_Buffer_bytesToWords(RCL_TxBuffer_len(numPad, hdrLen, dataLen)))
166 #define RCL_MultiBuffer_len(dataLen) (offsetof(RCL_MultiBuffer, data) + (dataLen))
174 #define RCL_MultiBuffer_len_u32(dataLen) (RCL_Buffer_bytesToWords(RCL_MultiBuffer_len(dataLen)))
185 return (RCL_Buffer_TxBuffer *)List_get(list);
200 return (RCL_Buffer_TxBuffer *) (list->head);
215 return (RCL_Buffer_TxBuffer *)(((List_Elem *)elem)->next);
233 extern uint8_t *
RCL_TxBuffer_init(RCL_Buffer_TxBuffer *buffer, uint32_t numPad, uint32_t hdrLen,
259 return (RCL_MultiBuffer *) (list->head);
274 return (RCL_MultiBuffer *)(((List_Elem *)elem)->next);
290 return (RCL_MultiBuffer *)List_get(list);
470 return & curBuffer->data[curBuffer->tailIndex];
486 curBuffer->tailIndex += numBytes;
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:367
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
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:183
static void List_consumeAndStore(List_List *list, List_List *consumedBuffers)
Definition: RCL_Buffer.c:431
uint8_t data[]
Definition: RCL_Buffer.h:65
#define RCL_EventRxBufferUpdate
Definition: RCL_Event.h:55
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:188
RCL_Command * currCmd
Definition: RCL_Scheduler.h:88
uint8_t data[]
Definition: RCL_Buffer.h:78
uint8_t data[]
Definition: RCL_Buffer.h:93
List_List * multiBuffers
Definition: RCL_Buffer.h:103
static void RCL_MultiBuffer_commitBytes(RCL_MultiBuffer *curBuffer, uint32_t numBytes)
Update number of bytes written to RCL_MultiBuffer.
Definition: RCL_Buffer.h:484
uint16_t tailIndex
Definition: RCL_Buffer.h:92
#define RCL_Debug_assert(expr)
Definition: RCL_Debug.h:39
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:117
RCL_BufferState state
Definition: RCL_Buffer.h:89
uint8_t pad0
Definition: RCL_Buffer.h:77
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:127
uint16_t length
Definition: RCL_Buffer.h:90
Information about an RCL_MultiBuffer list being traversed.
Definition: RCL_Buffer.h:102
Definition of an RCL Rx Buffer Entry.
Definition: RCL_Buffer.h:74
@ RCL_BufferStateFinished
Definition: RCL_Buffer.h:46
List_Elem __elem__
Definition: RCL_Buffer.h:60
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:313
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
static RCL_MultiBuffer * RCL_MultiBuffer_head(List_List *list)
Function to return the head of a MultiBuffer list.
Definition: RCL_Buffer.h:257
uint8_t numPad
Definition: RCL_Buffer.h:63
uint8_t pad0
Definition: RCL_Buffer.h:64
static RCL_Buffer_TxBuffer * RCL_TxBuffer_head(List_List *list)
Function to return the head of a TxBuffer list.
Definition: RCL_Buffer.h:198
@ RCL_BufferStateInUse
Definition: RCL_Buffer.h:45
List_Elem __elem__
Definition: RCL_Buffer.h:88
void RCL_MultiBuffer_clear(RCL_MultiBuffer *buffer)
Function to clear a multi buffer entry for re-use by RCL.
Definition: RCL_Buffer.c:95
RCL_BufferState
Buffer state.
Definition: RCL_Buffer.h:43
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:208
static bool RxEntry_isAtEnd(RCL_MultiBuffer *multiBuffer, uint16_t curIndex)
Definition: RCL_Buffer.c:401
uint8_t numPad
Definition: RCL_Buffer.h:76
bool RCL_MultiBuffer_RxEntry_isLast(RCL_MultiBuffer_ListInfo *listInfo)
Function to check a traversed entry was the last one.
Definition: RCL_Buffer.c:258
static RCL_MultiBuffer * RCL_MultiBuffer_get(List_List *list)
Function to get the first elem in a MultiBuffer list.
Definition: RCL_Buffer.h:288
Definition of an RCL Rx MultiBuffer.
Definition: RCL_Buffer.h:87
#define RCL_Buffer_DataEntry_paddedLen(len)
Total length of a data entry in bytes based on length field of the entry.
Definition: RCL_Buffer.h:117
uint16_t nextIndex
Definition: RCL_Buffer.h:105
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:213
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:105
Definition of an RCL Tx Buffer.
Definition: RCL_Buffer.h:59
RCL_MultiBuffer * nextBuffer
Definition: RCL_Buffer.h:104
uint16_t headIndex
Definition: RCL_Buffer.h:91
static uint8_t * RCL_MultiBuffer_getNextWritableByte(RCL_MultiBuffer *curBuffer)
Find the first byte to write in an RCL_MultiBuffer.
Definition: RCL_Buffer.h:468
RCL_BufferState state
Definition: RCL_Buffer.h:61
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:272
bool RCL_MultiBuffer_RxEntry_isEmpty(List_List *list)
Function to check if the MultiBuffer List is out of entries.
Definition: RCL_Buffer.c:172
bool RCL_Scheduler_postEvent(RCL_Command_Handle c, RCL_Events e)
Post event to command handler.
Definition: RCL_Scheduler.c:498
uint16_t length __attribute__((aligned(4)))
#define RCL_EventTxBufferUpdate
Definition: RCL_Event.h:56
RCL_SchedulerState rclSchedulerState
Definition: RCL_Scheduler.c:51
RCL_MultiBuffer * RCL_MultiBuffer_findFirstWritableBuffer(RCL_MultiBuffer *head)
Find the first writable buffer in a list of MultiBuffers.
Definition: RCL_Buffer.c:300
uint16_t length __attribute__((aligned(4)))
@ RCL_BufferStatePending
Definition: RCL_Buffer.h:44
void RCL_MultiBuffer_RxEntry_consume(RCL_MultiBuffer_ListInfo *listInfo, List_List *consumedBuffers)
Definition: RCL_Buffer.c:277