#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 }