Files
Senior-Design-Project_WMU-S…/Telem_Debug/Debug3/can_FIFO.c
Sunseeker Lab A-216 0956ea6ae0 Merged changes
2021-05-21 13:25:08 -04:00

58 lines
1.0 KiB
C

//
// Telemetry Messgae FIFO
//
#include "Sunseeker2021.h"
void can_fifo_INIT(void)
{
can_struct *temptestPt;
temptestPt = &can0_queue.msg_fifo[0];
can0_queue.PutPt = temptestPt;
can0_queue.GetPt = temptestPt;
}
int can_fifo_PUT(can_message_fifo *queue, can_struct toPut)
{
can_struct *tempPt;
tempPt = queue->PutPt;
*(tempPt++) = toPut;
if(tempPt == &queue->msg_fifo[msg_fifo_size])
{
tempPt = &queue->msg_fifo[0]; //need to wrap around
}
if(tempPt == queue->GetPt)
{
return(0); //Failure FIFO Full
}
else
{
queue->PutPt = tempPt;
return(1); //successful
}
}
int can_fifo_GET(can_message_fifo *queue, can_struct *toGet)
{
if(queue->PutPt == queue->GetPt)
{
return(0); //failure FIFO empty
}
else
{
*toGet = *(queue->GetPt++);
if(queue->GetPt == &queue->msg_fifo[msg_fifo_size])
{
queue->GetPt = &queue->msg_fifo[0]; //need to wrap around
}
return(1);
}
}
int can_fifo_STAT(can_message_fifo *queue)
{
return (queue->GetPt != queue->PutPt);
}