Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
0d70023baThis file is pinned to the selected release. Download the original to open it in your design tool.
#pragma once
#include <string.h>
/**
* Ringbuffer structure
*
*/
struct ringbuf {
char *buf; ///< Pointer to buffer memory
unsigned bufsize; ///< Size of buffer memory
volatile unsigned pos; ///< Current read position
volatile unsigned len; ///< Length of data in buffer
};
/**
* Read a single byte from a buffer
*
* \param rb pointer to ringbuffer struct
* \param data pointer to data byte
* \return number of bytes read (0 if buffer was empty)
*/
int rb_getc(struct ringbuf *rb, char *data);
/**
* Write a single byte to a buffer
*
* \param rb pointer to ringbuffer struct
* \param data pointer to data byte
* \return number of bytes written (0 if buffer was full)
*/
int rb_putc(struct ringbuf *rb, const char data);
/**
* Read from a buffer
*
*/
int rb_read(struct ringbuf *rb, void *data, int len);
/**
* Write to a buffer
*
* \param rb pointer to ringbuffer struct
* \param data pointer to data byte
* \return number of bytes written (0 if buffer was full)
*
*/
int rb_write(struct ringbuf *rb, const void *data, int len);
/**
* undo rb_read
*
* \param rb pointer to ringbuffer struct
* \param len length to reset read pointer
* \return 0 on error
*
*/
int rb_undo(struct ringbuf *rb, int len);