Thread safe ringbuffer

Thread-safe ringbuffer implementation.

Note

This ringbuffer implementation can be used without locking if there’s only one producer and one consumer.

struct tsrb tsrb_t

thread-safe ringbuffer struct

void tsrb_init(tsrb.h::tsrb_t * rb, char * buffer, unsigned bufsize)

Initialize a tsrb.

Parameters

rb:Datum to initialize.
buffer:Buffer to use by tsrb.
bufsize:sizeof (buffer), must be power of 2.

int tsrb_empty(const tsrb.h::tsrb_t * rb)

Test if the tsrb is empty.

Parameters

rb:Ringbuffer to operate on

Return values

  • 0 if not empty
  • 1 otherwise
unsigned int tsrb_avail(const tsrb.h::tsrb_t * rb)

Get number of bytes available for reading.

Parameters

rb:Ringbuffer to operate on

Return values

  • nr of available bytes
int tsrb_full(const tsrb.h::tsrb_t * rb)

Test if the tsrb is full.

Parameters

rb:Ringbuffer to operate on

Return values

  • 0 if not full
  • 1 otherwise
unsigned int tsrb_free(const tsrb.h::tsrb_t * rb)

Get free space in ringbuffer.

Parameters

rb:Ringbuffer to operate on

Return values

  • nr of available bytes
int tsrb_get_one(tsrb.h::tsrb_t * rb)

Get a byte from ringbuffer.

Parameters

rb:Ringbuffer to operate on

Return values

  • >=0 byte that has been read
  • -1 if no byte available
int tsrb_get(tsrb.h::tsrb_t * rb, char * dst, msp430_types.h::size_t n)

Get bytes from ringbuffer.

Parameters

rb:Ringbuffer to operate on
dst:buffer to write to
n:max number of bytes to write to dst

Return values

  • nr of bytes written to dst
int tsrb_drop(tsrb.h::tsrb_t * rb, msp430_types.h::size_t n)

Drop bytes from ringbuffer.

Parameters

rb:Ringbuffer to operate on
n:max number of bytes to drop

Return values

  • nr of bytes dropped
int tsrb_add_one(tsrb.h::tsrb_t * rb, char c)

Add a byte to ringbuffer.

Parameters

rb:Ringbuffer to operate on
c:Character to add to ringbuffer

Return values

  • 0 on success
  • -1 if no space available
int tsrb_add(tsrb.h::tsrb_t * rb, const char * src, msp430_types.h::size_t n)

Add bytes to ringbuffer.

Parameters

rb:Ringbuffer to operate on
src:buffer to read from
n:max number of bytes to read from src

Return values

  • nr of bytes read from src
TSRB_INIT( BUF)

Static initializer.

1
{ (BUF), sizeof (BUF), 0, 0 }
struct tsrb

thread-safe ringbuffer struct

char * buf

Buffer to operate on.

unsigned int size

Size of buffer, must be power of 2.

unsigned reads

total number of reads

unsigned writes

total number of writes