Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Ring buffer library

The ring buffer library implements ring (circular) buffer where bytes can be read and written independently.

A ring buffer is particularly useful in device drivers where data can come in through interrupts.

Data Structures

struct  ringbuf
 Structure that holds the state of a ring buffer. More...
 

Files

file  ringbuf.h
 
    Header file for the ring buffer library

 

Functions

int ringbuf_elements (struct ringbuf *r)
 Get the number of elements currently in the ring buffer. More...
 
int ringbuf_get (struct ringbuf *r)
 Get a byte from the ring buffer. More...
 
void ringbuf_init (struct ringbuf *r, uint8_t *a, uint8_t size_power_of_two)
 Initialize a ring buffer. More...
 
int ringbuf_put (struct ringbuf *r, uint8_t c)
 Insert a byte into the ring buffer. More...
 
int ringbuf_size (struct ringbuf *r)
 Get the size of a ring buffer. More...
 

Variables

uint8_t * ringbuf::data
 
uint8_t ringbuf::get_ptr
 
uint8_t ringbuf::mask
 
uint8_t ringbuf::put_ptr
 

int ringbuf_elements ( struct ringbuf r)

Get the number of elements currently in the ring buffer.

Parameters
rA pointer to a struct ringbuf to hold the state of the ring buffer
Returns
The number of elements in the buffer.

References get_ptr, mask, and put_ptr.

int ringbuf_get ( struct ringbuf r)

Get a byte from the ring buffer.

Parameters
rA pointer to a struct ringbuf to hold the state of the ring buffer
Returns
The data from the buffer, or -1 if the buffer was empty
        This function removes a byte from the ring buffer. It
        is safe to call this function from an interrupt
        handler.

References c, data, get_ptr, mask, and put_ptr.

Referenced by PROCESS_THREAD().

void ringbuf_init ( struct ringbuf r,
uint8_t *  a,
uint8_t  size_power_of_two 
)

Initialize a ring buffer.

Parameters
rA pointer to a struct ringbuf to hold the state of the ring buffer
aA pointer to an array to hold the data in the buffer
size_power_of_twoThe size of the ring buffer, which must be a power of two
        This function initiates a ring buffer. The data in the
        buffer is stored in an external array, to which a
        pointer must be supplied. The size of the ring buffer
        must be a power of two and cannot be larger than 128
        bytes.

References data, get_ptr, mask, and put_ptr.

Referenced by serial_line_init().

int ringbuf_put ( struct ringbuf r,
uint8_t  c 
)

Insert a byte into the ring buffer.

Parameters
rA pointer to a struct ringbuf to hold the state of the ring buffer
cThe byte to be written to the buffer
Returns
Non-zero if there data could be written, or zero if the buffer was full.
        This function inserts a byte into the ring buffer. It
        is safe to call this function from an interrupt
        handler.

References c, data, get_ptr, mask, and put_ptr.

Referenced by serial_line_input_byte().

int ringbuf_size ( struct ringbuf r)

Get the size of a ring buffer.

Parameters
rA pointer to a struct ringbuf to hold the state of the ring buffer
Returns
The size of the buffer.

References mask.

uint8_t* ringbuf::data
uint8_t ringbuf::get_ptr
uint8_t ringbuf::mask
uint8_t ringbuf::put_ptr