Files
Senior-Design-Project_WMU-S…/Telem_Debug/Debug2/char_FIFO.c
2021-05-14 16:10:05 -04:00

55 lines
957 B
C

//
// Telemetry Character FIFO
//
#include "SunseekerTelemetry2021.h"
void CHAR_FIFO_INIT(char_fifo queue)
{
queue.GetPt=&queue.fifo[0];
queue.PutPt=&queue.fifo[0];
}
int CHAR_FIFO_PUT(char_fifo *queue, char data)
{
unsigned char *tempPt;
tempPt = queue->PutPt;
*(tempPt++) = data;
if(tempPt == &queue->fifo[fifo_size])
{
tempPt = &queue->fifo[0]; //need to wrap around
}
if(tempPt == queue->GetPt)
{
return(0); //Failure FIFO Full
}
else
{
queue->PutPt = tempPt;
return(1); //successful
}
}
int CHAR_FIFO_GET(char_fifo *queue, unsigned char volatile *data)
{
if(queue->PutPt == queue->GetPt)
{
return(0); //failure FIFO empty
}
else
{
*data = *(queue->GetPt++);
if(queue->GetPt == &queue->fifo[fifo_size])
{
queue->GetPt = &queue->fifo[0]; //need to wrap around
}
return(1);
}
}
int CHAR_FIFO_STAT(char_fifo *queue)
{
return (queue->GetPt != queue->PutPt);
}