keyboard/Core/Src/fifo.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
}