52 lines
995 B
C
52 lines
995 B
C
#include "fifo.h"
|
|
|
|
static struct {
|
|
FIFO_TYPE buffer[FIFO_LEN];
|
|
uint16_t rd_ptr;
|
|
uint16_t wr_ptr;
|
|
uint16_t entries;
|
|
} fifo;
|
|
|
|
void fifo_init() {
|
|
fifo.rd_ptr = 0;
|
|
fifo.wr_ptr = 0;
|
|
fifo.entries = 0;
|
|
}
|
|
|
|
fifo_err_t fifo_pop(FIFO_TYPE* dest) {
|
|
// FIFO is empty, nothing to return!
|
|
if (fifo.entries == 0) {
|
|
return FIFO_EMPTY;
|
|
}
|
|
|
|
// Entries in FIFO, pop
|
|
*dest = fifo.buffer[fifo.rd_ptr];
|
|
fifo.rd_ptr++;
|
|
fifo.entries--;
|
|
|
|
// Ensure pointers don't overflow!
|
|
if (fifo.rd_ptr == FIFO_LEN) {
|
|
fifo.rd_ptr = 0;
|
|
}
|
|
|
|
return FIFO_SUCCESS;
|
|
}
|
|
|
|
fifo_err_t fifo_push(FIFO_TYPE src) {
|
|
// FIFO is full, don't store anything
|
|
if (fifo.entries == FIFO_LEN) {
|
|
return FIFO_FULL;
|
|
}
|
|
|
|
// FIFO has space, write
|
|
fifo.buffer[fifo.wr_ptr] = src;
|
|
fifo.wr_ptr++;
|
|
fifo.entries++;
|
|
|
|
// Ensure pointers don't overflow!
|
|
if (fifo.wr_ptr == FIFO_LEN) {
|
|
fifo.wr_ptr = 0;
|
|
}
|
|
|
|
return FIFO_SUCCESS;
|
|
} |