Ring buffer¶
-
group
LWGSM_BUFF Generic ring buffer.
Defines
-
BUF_PREF(x)¶ Buffer function/typedef prefix string.
It is used to change function names in zero time to easily re-use same library between applications. Use
#define BUF_PREF(x) my_prefix_ ## xto change all function names to (for example)my_prefix_buff_init- Note
Modification of this macro must be done in header and source file aswell
Functions
-
uint8_t
lwgsm_buff_init(lwgsm_buff_t *buff, size_t size)¶ Initialize buffer.
- Return
1on success,0otherwise- Parameters
[in] buff: Pointer to buffer structure[in] size: Size of buffer in units of bytes
-
void
lwgsm_buff_free(lwgsm_buff_t *buff)¶ Free dynamic allocation if used on memory.
- Parameters
[in] buff: Pointer to buffer structure
-
void
lwgsm_buff_reset(lwgsm_buff_t *buff)¶ Resets buffer to default values. Buffer size is not modified.
- Parameters
[in] buff: Buffer handle
-
size_t
lwgsm_buff_write(lwgsm_buff_t *buff, const void *data, size_t btw)¶ Write data to buffer Copies data from
dataarray to buffer and marks buffer as full for maximumcountnumber of bytes.- Return
Number of bytes written to buffer. When returned value is less than
btw, there was no enough memory available to copy full data array- Parameters
[in] buff: Buffer handle[in] data: Pointer to data to write into buffer[in] btw: Number of bytes to write
-
size_t
lwgsm_buff_read(lwgsm_buff_t *buff, void *data, size_t btr)¶ Read data from buffer Copies data from buffer to
dataarray and marks buffer as free for maximumbtrnumber of bytes.- Return
Number of bytes read and copied to data array
- Parameters
[in] buff: Buffer handle[out] data: Pointer to output memory to copy buffer data to[in] btr: Number of bytes to read
-
size_t
lwgsm_buff_peek(lwgsm_buff_t *buff, size_t skip_count, void *data, size_t btp)¶ Read from buffer without changing read pointer (peek only)
- Return
Number of bytes peeked and written to output array
- Parameters
[in] buff: Buffer handle[in] skip_count: Number of bytes to skip before reading data[out] data: Pointer to output memory to copy buffer data to[in] btp: Number of bytes to peek
-
size_t
lwgsm_buff_get_free(lwgsm_buff_t *buff)¶ Get number of bytes in buffer available to write.
- Return
Number of free bytes in memory
- Parameters
[in] buff: Buffer handle
-
size_t
lwgsm_buff_get_full(lwgsm_buff_t *buff)¶ Get number of bytes in buffer available to read.
- Return
Number of bytes ready to be read
- Parameters
[in] buff: Buffer handle
-
void *
lwgsm_buff_get_linear_block_read_address(lwgsm_buff_t *buff)¶ Get linear address for buffer for fast read.
- Return
Linear buffer start address
- Parameters
[in] buff: Buffer handle
-
size_t
lwgsm_buff_get_linear_block_read_length(lwgsm_buff_t *buff)¶ Get length of linear block address before it overflows for read operation.
- Return
Linear buffer size in units of bytes for read operation
- Parameters
[in] buff: Buffer handle
-
size_t
lwgsm_buff_skip(lwgsm_buff_t *buff, size_t len)¶ Skip (ignore; advance read pointer) buffer data Marks data as read in the buffer and increases free memory for up to
lenbytes.- Note
Useful at the end of streaming transfer such as DMA
- Return
Number of bytes skipped
- Parameters
[in] buff: Buffer handle[in] len: Number of bytes to skip and mark as read
-
void *
lwgsm_buff_get_linear_block_write_address(lwgsm_buff_t *buff)¶ Get linear address for buffer for fast read.
- Return
Linear buffer start address
- Parameters
[in] buff: Buffer handle
-
size_t
lwgsm_buff_get_linear_block_write_length(lwgsm_buff_t *buff)¶ Get length of linear block address before it overflows for write operation.
- Return
Linear buffer size in units of bytes for write operation
- Parameters
[in] buff: Buffer handle
-
size_t
lwgsm_buff_advance(lwgsm_buff_t *buff, size_t len)¶ Advance write pointer in the buffer. Similar to skip function but modifies write pointer instead of read.
- Note
Useful when hardware is writing to buffer and application needs to increase number of bytes written to buffer by hardware
- Return
Number of bytes advanced for write operation
- Parameters
[in] buff: Buffer handle[in] len: Number of bytes to advance
-
struct
lwgsm_buff_t¶ - #include <lwgsm_typedefs.h>
Buffer structure.
Public Members
-
uint8_t *
buff¶ Pointer to buffer data. Buffer is considered initialized when
buff != NULL
-
size_t
size¶ Size of buffer data. Size of actual buffer is
1byte less than this value
-
size_t
r¶ Next read pointer. Buffer is considered empty when
r == wand full whenw == r - 1
-
size_t
w¶ Next write pointer. Buffer is considered empty when
r == wand full whenw == r - 1
-
uint8_t *
-