105 if (head >= buf->
size) {
112 *space = (uint8_t *)buf->
space + (buf->
put.
head - base);
131 if (head >= buf->
size) {
138 *space = (uint8_t *)buf->
space + (buf->
get.
head - base);
159 (void)memcpy(space, data, claim);
160 *(
const uint8_t **)&data += claim;
162 }
while (claim && (size -= claim));
173 (void)memcpy(data, space, claim);
174 *(uint8_t **)&data += claim;
177 }
while (claim && (size -= claim));
184 int err = ack < size ? -
EMSGSIZE : 0;
193 int err = ack < size ? -EAGAIN : 0;
int ring_buf_put_ack(struct ring_buf *buf, ring_buf_size_t size)
Acknowledges space claimed for putting data into a ring buffer.
int ring_buf_get_ack(struct ring_buf *buf, ring_buf_size_t size)
Acknowledges space claimed for getting data from a ring buffer.
ring_buf_size_t ring_buf_get_claim(struct ring_buf *buf, void **space, ring_buf_size_t size)
Claims contiguous space for getting.
ring_buf_size_t ring_buf_put_claim(struct ring_buf *buf, void **space, ring_buf_size_t size)
Claims space for putting data into a ring buffer.
ring_buf_size_t ring_buf_get(struct ring_buf *buf, void *data, ring_buf_size_t size)
Gets data from a ring buffer.
int ring_buf_put_all(struct ring_buf *buf, const void *data, ring_buf_size_t size)
Puts all or none.
ring_buf_size_t ring_buf_put(struct ring_buf *buf, const void *data, ring_buf_size_t size)
Puts non-contiguous bytes into the ring buffer.
int ring_buf_get_all(struct ring_buf *buf, void *data, ring_buf_size_t size)
Gets all or none.
void ring_buf_reset(struct ring_buf *buf, ring_buf_ptrdiff_t base)
Resets a ring buffer.
static ring_buf_size_t ring_buf_free_space(const struct ring_buf *buf)
Calculates free space in the ring buffer.
static ring_buf_size_t ring_buf_used_space(const struct ring_buf *buf)
Calculates used space in the ring buffer.
static void ring_buf_clamp(ring_buf_size_t *clamp, ring_buf_size_t limit)
Clamp a value to a specified limit.
static ring_buf_size_t ring_buf_zone_tail(const struct ring_buf_zone *zone)
Tail index of a zone.
static ring_buf_size_t ring_buf_zone_claim(const struct ring_buf_zone *zone)
Claim size of a zone.
static ring_buf_size_t ring_buf_zone_head(const struct ring_buf_zone *zone)
Head index of a zone.
static void ring_buf_zone_reset(struct ring_buf_zone *zone, ring_buf_ptrdiff_t base)
Resets a ring buffer zone.
Ring buffer function prototypes.
size_t ring_buf_size_t
Ring buffer size type.
ptrdiff_t ring_buf_ptrdiff_t
Ring buffer pointer difference type.
#define EMSGSIZE
Message size error code.
ring_buf_ptrdiff_t tail
Tail index of the zone.
ring_buf_ptrdiff_t head
Head index of the zone.
ring_buf_ptrdiff_t base
Base index of the zone.
ring_buf_size_t size
Size of the ring buffer.
void * space
Pointer to the buffer's data space.
struct ring_buf_zone get
Get zone.
struct ring_buf_zone put
Put zone.