You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
843 B
50 lines
843 B
#include "fifo.h"
|
|
|
|
static uint16_t Fifo_Next(Fifo_t *fifo, uint16_t index)
|
|
{
|
|
return (index + 1) % fifo->Cap;
|
|
}
|
|
|
|
void Fifo_Init(Fifo_t *fifo, uint8_t *data, uint16_t cap)
|
|
{
|
|
fifo->Data = data;
|
|
fifo->Cap = cap;
|
|
fifo->Size = 0;
|
|
fifo->Begin = 0;
|
|
fifo->End = 0;
|
|
}
|
|
|
|
void Fifo_Push(Fifo_t *fifo, uint8_t data)
|
|
{
|
|
fifo->Data[fifo->End] = data;
|
|
fifo->End = Fifo_Next(fifo, fifo->End);
|
|
fifo->Size++;
|
|
}
|
|
|
|
uint8_t Fifo_Pop(Fifo_t *fifo)
|
|
{
|
|
uint8_t data = fifo->Data[fifo->Begin];
|
|
fifo->Begin = Fifo_Next(fifo, fifo->Begin);
|
|
fifo->Size--;
|
|
return data;
|
|
}
|
|
|
|
void Fifo_Clear(Fifo_t *fifo)
|
|
{
|
|
fifo->Size = 0;
|
|
fifo->Begin = 0;
|
|
fifo->End = 0;
|
|
}
|
|
|
|
bool Fifo_IsEmpty(Fifo_t *fifo)
|
|
{
|
|
return fifo->Size == 0;
|
|
}
|
|
|
|
bool Fifo_IsFull(Fifo_t *fifo)
|
|
{
|
|
return fifo->Size == fifo->Cap && fifo->Size != 0;
|
|
}
|
|
|
|
|
|
|
|
|