fifo.c 818 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "fifo.h"
  2. static uint16_t FifoNext( tFifo *fifo, uint16_t index )
  3. {
  4. return ( index + 1 ) % fifo->Size;
  5. }
  6. void FifoInit( tFifo *fifo, uint16_t *buffer, uint16_t size )
  7. { fifo->Begin = 0;
  8. fifo->End = 0;
  9. fifo->Data = buffer;
  10. fifo->Size = size;
  11. }
  12. void FifoPush( tFifo *fifo, uint16_t data )
  13. {
  14. fifo->End = FifoNext( fifo, fifo->End );
  15. fifo->Data[fifo->End] = data;
  16. }
  17. uint16_t FifoPop( tFifo *fifo )
  18. {
  19. uint16_t data = fifo->Data[FifoNext( fifo, fifo->Begin )];
  20. fifo->Begin = FifoNext( fifo, fifo->Begin );
  21. return data;
  22. }
  23. void FifoFlush( tFifo *fifo )
  24. {
  25. fifo->Begin = 0;
  26. fifo->End = 0;
  27. }
  28. bool IsFifoEmpty( tFifo *fifo )
  29. {
  30. return ( fifo->Begin == fifo->End );
  31. }
  32. bool IsFifoFull( tFifo *fifo )
  33. {
  34. return ( FifoNext( fifo, fifo->End ) == fifo->Begin );
  35. }