Contents
Ring buffer¶
Contents
-
group
RINGBUFF Generic ring buffer manager.
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
ringbuff_init(ringbuff_t *buff, void *buffdata, size_t size)¶ Initialize buffer handle to default values with size and buffer data array.
- Return
1on success,0otherwise- Parameters
[in] buff: Buffer handle[in] buffdata: Pointer to memory to use as buffer data[in] size: Size ofbuffdatain units of bytes Maximum number of bytes buffer can hold issize - 1
-
void
ringbuff_free(ringbuff_t *buff)¶ Free buffer memory.
- Note
Since implementation does not use dynamic allocation, it just sets buffer handle to
NULL- Parameters
[in] buff: Buffer handle
-
void
ringbuff_reset(ringbuff_t *buff)¶ Resets buffer to default values. Buffer size is not modified.
- Parameters
[in] buff: Buffer handle
-
size_t
ringbuff_write(ringbuff_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
ringbuff_read(ringbuff_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
ringbuff_peek(ringbuff_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
ringbuff_get_free(ringbuff_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
ringbuff_get_full(ringbuff_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 *
ringbuff_get_linear_block_read_address(ringbuff_t *buff)¶ Get linear address for buffer for fast read.
- Return
Linear buffer start address
- Parameters
[in] buff: Buffer handle
-
size_t
ringbuff_get_linear_block_read_length(ringbuff_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
ringbuff_skip(ringbuff_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 *
ringbuff_get_linear_block_write_address(ringbuff_t *buff)¶ Get linear address for buffer for fast read.
- Return
Linear buffer start address
- Parameters
[in] buff: Buffer handle
-
size_t
ringbuff_get_linear_block_write_length(ringbuff_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
ringbuff_advance(ringbuff_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
ringbuff_t¶ - #include <ringbuff.h>
Buffer structure.
Public Members
-
uint8_t *
buff¶ Pointer to buffer data. Buffer is considered initialized when
buff != NULLandsize > 0
-
size_t
size¶ Size of buffer data. Size of actual buffer is
1byte less than value holds
-
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 *
-