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_ ## x
to 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
1
on success,0
otherwise- Parameters
[in] buff
: Buffer handle[in] buffdata
: Pointer to memory to use as buffer data[in] size
: Size ofbuffdata
in 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
data
array to buffer and marks buffer as full for maximumcount
number 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
data
array and marks buffer as free for maximumbtr
number 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
len
bytes.- 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 != NULL
andsize > 0
-
size_t
size
¶ Size of buffer data. Size of actual buffer is
1
byte less than value holds
-
size_t
r
¶ Next read pointer. Buffer is considered empty when
r == w
and full whenw == r - 1
-
size_t
w
¶ Next write pointer. Buffer is considered empty when
r == w
and full whenw == r - 1
-
uint8_t *
-