FIFO_COM.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * FIFO_COM.c
  3. *
  4. * Created on: 14 mai 2019
  5. * Author: e_rcluze
  6. */
  7. #include "FIFO_COM.h"
  8. void initFIFO(FIFO_COM *f){
  9. f->pt_read = 0;
  10. f->pt_write = 0;
  11. }
  12. uint8_t readFirst(FIFO_COM *f) {
  13. return f->Fifo[f->pt_read];
  14. }
  15. void readFifo(FIFO_COM *f, uint8_t *r, uint8_t nb) {
  16. for (uint8_t i = 0; i < nb;i++) {
  17. if (f->pt_read + i >= NBFIFO)
  18. r[i] = f->Fifo[f->pt_read + i - NBFIFO];
  19. else
  20. r[i] = f->Fifo[f->pt_read + i];
  21. }
  22. if (f->pt_read + nb >= NBFIFO)
  23. f->pt_read = f->pt_read + nb - NBFIFO;
  24. else
  25. f->pt_read = f->pt_read + nb;
  26. }
  27. void writeFifo(FIFO_COM *f, uint8_t *r, uint8_t nb) {
  28. uint8_t i;
  29. for (i = 0; i < nb;i++) {
  30. if (f->pt_write + i >= NBFIFO)
  31. f->Fifo[f->pt_write + i - NBFIFO] = r[i];
  32. else
  33. f->Fifo[f->pt_write + i] = r[i];
  34. }
  35. if (f->pt_write + nb >= NBFIFO)
  36. f->pt_write = f->pt_write + nb - NBFIFO;
  37. else
  38. f->pt_write = f->pt_write + nb;
  39. }
  40. uint8_t FIFO_nbRead(FIFO_COM *f) {
  41. if (f->pt_read <= f->pt_write)
  42. return f->pt_write - f->pt_read;
  43. else
  44. return f->pt_write + NBFIFO - f->pt_read;
  45. }