BeRTOS
|
General pourpose FIFO buffer implemented with a ring buffer. More...
Functions | |
bool | fifo_isempty (const FIFOBuffer *fb) |
Check whether the fifo is empty. | |
bool | fifo_isfull (const FIFOBuffer *fb) |
Check whether the fifo is full. | |
void | fifo_push (FIFOBuffer *fb, unsigned char c) |
Push a character on the fifo buffer. | |
unsigned char | fifo_pop (FIFOBuffer *fb) |
Pop a character from the fifo buffer. | |
void | fifo_flush (FIFOBuffer *fb) |
Make the fifo empty, discarding all its current contents. | |
bool | fifo_isempty_locked (const FIFOBuffer *fb) |
Similar to fifo_isempty(), but with stronger guarantees for concurrent access between user and interrupt code. | |
void | fifo_push_locked (FIFOBuffer *fb, unsigned char c) |
Similar to fifo_push(), but with stronger guarantees for concurrent access between user and interrupt code. | |
void | fifo_flush_locked (FIFOBuffer *fb) |
Similar to fifo_flush(), but with stronger guarantees for concurrent access between user and interrupt code. | |
bool | fifo_isfull_locked (const FIFOBuffer *_fb) |
Thread safe version of fifo_isfull() | |
void | fifo_init (FIFOBuffer *fb, unsigned char *buf, size_t size) |
FIFO Initialization. | |
size_t | fifo_len (FIFOBuffer *fb) |
General pourpose FIFO buffer implemented with a ring buffer.
begin
points to the first buffer element; end
points to the last buffer element (unlike the STL convention); head
points to the element to be extracted next; tail
points to the location following the last insertion; end
, it is reset back to begin
.+-----------------------------------+ | empty | valid data | empty | +-----------------------------------+ ^ ^ ^ ^ begin head tail end
The buffer is EMPTY when head
and tail
point to the same location:
head == tail
The buffer is FULL when tail
points to the location immediately after head:
tail == head - 1
The buffer is also FULL when tail
points to the last buffer location and head points to the first one:
head == begin && tail == end
void fifo_flush_locked | ( | FIFOBuffer * | fb | ) | [inline] |
Similar to fifo_flush(), but with stronger guarantees for concurrent access between user and interrupt code.
bool fifo_isempty | ( | const FIFOBuffer * | fb | ) | [inline] |
Check whether the fifo is empty.
bool fifo_isempty_locked | ( | const FIFOBuffer * | fb | ) | [inline] |
Similar to fifo_isempty(), but with stronger guarantees for concurrent access between user and interrupt code.
bool fifo_isfull | ( | const FIFOBuffer * | fb | ) | [inline] |
Check whether the fifo is full.
size_t fifo_len | ( | FIFOBuffer * | fb | ) | [inline] |
unsigned char fifo_pop | ( | FIFOBuffer * | fb | ) | [inline] |
Pop a character from the fifo buffer.
fifo_pop()
on an empty buffer is undefined. The caller must make sure the buffer contains at least one character before calling this function.void fifo_push | ( | FIFOBuffer * | fb, |
unsigned char | c | ||
) | [inline] |
Push a character on the fifo buffer.
fifo_push()
on a full buffer is undefined. The caller must make sure the buffer has at least one free slot before calling this function.void fifo_push_locked | ( | FIFOBuffer * | fb, |
unsigned char | c | ||
) | [inline] |
Similar to fifo_push(), but with stronger guarantees for concurrent access between user and interrupt code.