Ring Buffer

group Ring Buffer

Generic byte-oriented circular buffer.

group Structures

Structures used by the Ring Buffer.

struct osusat_ring_buffer_t
#include <ring_buffer.h>

Ring buffer state structure.

Note

This structure should be initialized via osusat_ring_buffer_init before use.

Public Members

uint8_t *buffer

Pointer to the underlying storage array

size_t capacity

Total size of the storage array

size_t head

Write index

size_t tail

Read index

bool overwrite

If true: pushing to a full buffer overwrites the oldest byte

group Public API

External interface for interacting with the Ring Buffer.

Functions

void osusat_ring_buffer_init(osusat_ring_buffer_t *rb, uint8_t *storage, size_t capacity, bool overwrite)

Initialize a ring buffer.

Sets up the control structure to point to the provided storage array.

Parameters:
  • rb[out] Pointer to the ring buffer handle to initialize.

  • storage[in] Pointer to the allocated byte array to use as storage.

  • capacity[in] Size of the storage array in bytes.

  • overwrite[in] If true, the buffer will overwrite the oldest data when full. If false, it will reject new data when full.

void osusat_ring_buffer_clear(osusat_ring_buffer_t *rb)

Reset the buffer to empty.

Resets head and tail indices to zero. Does not zero-out the underlying memory.

Parameters:

rb[inout] The ring buffer handle.

bool osusat_ring_buffer_push(osusat_ring_buffer_t *rb, uint8_t byte)

Push one byte into the buffer.

Parameters:
  • rb[inout] The ring buffer handle.

  • byte[in] The byte to store.

Return values:
  • true – Successfully added (or overwrote) the byte.

  • false – Buffer was full and overwrite mode is disabled.

bool osusat_ring_buffer_pop(osusat_ring_buffer_t *rb, uint8_t *out)

Pop one byte from the buffer.

Parameters:
  • rb[inout] The ring buffer handle.

  • out[out] Pointer to where the popped byte will be written.

Return values:
  • true – Success, byte written to out.

  • false – Buffer was empty.

bool osusat_ring_buffer_peek(const osusat_ring_buffer_t *rb, uint8_t *out)

Peek at the next byte without removing it.

Useful for inspecting the next available data packet header without consuming it.

Parameters:
  • rb[in] The ring buffer handle.

  • out[out] Pointer to where the peeked byte will be written.

Return values:
  • true – Success, byte written to out.

  • false – Buffer was empty.

size_t osusat_ring_buffer_size(const osusat_ring_buffer_t *rb)

Get the number of bytes currently stored.

Parameters:

rb[in] The ring buffer handle.

Returns:

Number of bytes active in the buffer.

static inline bool osusat_ring_buffer_empty(const osusat_ring_buffer_t *rb)

Check if the buffer is empty.

Parameters:

rb[in] The ring buffer handle.

Return values:
  • true – Buffer is empty.

  • false – Buffer contains data.

bool osusat_ring_buffer_full(const osusat_ring_buffer_t *rb)

Check if the buffer is full.

Parameters:

rb[in] The ring buffer handle.

Return values:
  • true – Buffer is full.

  • false – Buffer has space available.