22#include "px_ring_buf.h"
54 px_ring_buf->
buf = buf;
67 return (px_ring_buf_idx_next(px_ring_buf, px_ring_buf->
idx_wr) == px_ring_buf->
idx_rd);
83 idx_rd = px_ring_buf->
idx_rd;
84 while(nr_of_bytes != 0)
87 if(idx_rd == px_ring_buf->
idx_wr)
93 idx_rd = px_ring_buf_idx_next(px_ring_buf, idx_rd);
99 px_ring_buf->
idx_rd = idx_rd;
108 if(px_ring_buf_idx_next(px_ring_buf, idx_wr) == px_ring_buf->
idx_rd)
115 px_ring_buf->
buf[idx_wr] = data;
117 idx_wr = px_ring_buf_idx_next(px_ring_buf, idx_wr);
119 px_ring_buf->
idx_wr = idx_wr;
130 uint8_t * data_u8 = (uint8_t *)data;
132 while(nr_of_bytes != 0)
135 if(px_ring_buf_idx_next(px_ring_buf, idx_wr) == px_ring_buf->
idx_rd)
141 px_ring_buf->
buf[idx_wr] = *data_u8++;
143 idx_wr = px_ring_buf_idx_next(px_ring_buf, idx_wr);
150 px_ring_buf->
idx_wr = idx_wr;
152 return bytes_written;
161 if(idx_rd == px_ring_buf->
idx_wr)
167 *data = px_ring_buf->
buf[idx_rd];
169 idx_rd = px_ring_buf_idx_next(px_ring_buf, idx_rd);
171 px_ring_buf->
idx_rd = idx_rd;
182 uint8_t * data_u8 = (uint8_t *)data;
184 while(nr_of_bytes != 0)
187 if(idx_rd == px_ring_buf->
idx_wr)
193 *data_u8++ = px_ring_buf->
buf[idx_rd];
195 idx_rd = px_ring_buf_idx_next(px_ring_buf, idx_rd);
202 px_ring_buf->
idx_rd = idx_rd;
213 uint8_t * data_u8 = (uint8_t *)data;
215 while(nr_of_bytes != 0)
218 if(idx_peek == px_ring_buf->
idx_wr)
224 *data_u8++ = px_ring_buf->
buf[idx_peek];
226 idx_peek = px_ring_buf_idx_next(px_ring_buf, idx_peek);
248 else if(idx_rd < idx_wr)
250 count_used = idx_wr - idx_rd;
256 count_used = px_ring_buf->
buf_size - idx_rd + idx_wr;
271 count_free = px_ring_buf->
buf_size - 1;
275 else if(idx_rd < idx_wr)
277 count_free = px_ring_buf->
buf_size - 1 - idx_wr + idx_rd;
283 count_free = idx_rd - idx_wr - 1;
#define PX_LOG_TRACE(format,...)
Macro to output a user format string if PX_LOG=1.
#define PX_LOG_NAME(name)
Macro to declare a log name string once for each file to reduce code size.
px_ring_buf_idx_t buf_size
Size of fixed-size buffer.
volatile px_ring_buf_idx_t idx_wr
Index that is next open position to write to in the buffer.
volatile px_ring_buf_idx_t idx_rd
Index to the next byte to be read from the buffer.
uint8_t * buf
Pointer to fixed-size buffer.
px_ring_buf_idx_t px_ring_buf_wr(px_ring_buf_t *px_ring_buf, const void *data, size_t nr_of_bytes)
Write (store) data in the ring buffer.
void px_ring_buf_init(px_ring_buf_t *px_ring_buf, uint8_t *buf, px_ring_buf_idx_t buf_size)
Initialize the ring buffer.
bool px_ring_buf_is_full(const px_ring_buf_t *px_ring_buf)
See if the ring buffer is full.
uint16_t px_ring_buf_idx_t
Ring buffer index size definition.
px_ring_buf_idx_t px_ring_buf_peek(px_ring_buf_t *px_ring_buf, void *data, size_t nr_of_bytes)
Peek data from the ring buffer, without advancing the read pointer.
px_ring_buf_idx_t px_ring_buf_get_count_used(px_ring_buf_t *px_ring_buf)
Get number of bytes stored in the buffer.
bool px_ring_buf_rd_u8(px_ring_buf_t *px_ring_buf, uint8_t *data)
Read (retrieve) a byte from the ring buffer.
bool px_ring_buf_wr_u8(px_ring_buf_t *px_ring_buf, const uint8_t data)
Write (store) a byte in the ring buffer.
px_ring_buf_idx_t px_ring_buf_get_count_free(px_ring_buf_t *px_ring_buf)
Get number of free bytes available in buffer.
px_ring_buf_idx_t px_ring_buf_rd(px_ring_buf_t *px_ring_buf, void *data, size_t nr_of_bytes)
Read (retrieve) data from the ring buffer.
bool px_ring_buf_is_empty(const px_ring_buf_t *px_ring_buf)
See if the ring buffer is empty.
void px_ring_buf_flush(px_ring_buf_t *px_ring_buf, size_t nr_of_bytes)
Removed data from ring buffer.
void px_ring_buf_log_report(px_ring_buf_t *px_ring_buf)
Report status of ring buffer.