45 lines
717 B
C
45 lines
717 B
C
#include "fifo.h"
|
|
|
|
void FIFO_push(volatile struct FIFO* fifo, uint8_t value) {
|
|
if (fifo->size == FIFO_SIZE) {
|
|
return;
|
|
}
|
|
|
|
fifo->size++;
|
|
|
|
if (fifo->size > 1) {
|
|
fifo->tail++;
|
|
fifo->tail %= FIFO_SIZE;
|
|
}
|
|
|
|
fifo->buffer[fifo->tail] = value;
|
|
}
|
|
|
|
uint8_t FIFO_pop(volatile struct FIFO* fifo) {
|
|
if (fifo->size == 0) {
|
|
return 0;
|
|
}
|
|
|
|
fifo->size--;
|
|
|
|
uint8_t data = fifo->buffer[fifo->head];
|
|
|
|
if (fifo->size >= 1) {
|
|
fifo->head++;
|
|
fifo->head %= FIFO_SIZE;
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
int FIFO_size(volatile struct FIFO* fifo) {
|
|
return fifo->size;
|
|
}
|
|
|
|
void FIFO_clear(volatile struct FIFO* fifo) {
|
|
fifo->head = 0;
|
|
fifo->tail = 0;
|
|
fifo->size = 0;
|
|
// We don't need to clear the buffer as we will override it anyway
|
|
}
|