fifo.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "fifo.h"
  2. #include "stdio.h"
  3. #include "string.h"
  4. #include "usart.h"
  5. void FIFO_Init (struct FIFO *Fifo){
  6. Fifo->head = 0;
  7. Fifo->tail = 0;
  8. Fifo->size = 0;
  9. }
  10. void FIFO_Empty (struct FIFO *Fifo){
  11. Fifo->head = Fifo->tail;
  12. Fifo->size = 0;
  13. }
  14. int FIFO_isEmpty(struct FIFO *Fifo){
  15. return Fifo->size == 0;
  16. }
  17. int FIFO_isFull(struct FIFO *Fifo){
  18. PRINTF("fifo used:%d/%d\n", Fifo->size, COMMAND_NUM);
  19. return Fifo->size == COMMAND_NUM;
  20. }
  21. int FIFO_Put (struct FIFO *Fifo, char* name, char* command)
  22. {
  23. if (FIFO_isFull(Fifo)){
  24. return FIFO_ERROR;
  25. }
  26. strcpy((Fifo->name_buffer)[Fifo->head], name);
  27. strcpy((Fifo->command_buffer)[Fifo->head], command);
  28. Fifo->head = (Fifo->head + 1) % (COMMAND_NUM);
  29. Fifo->size++;
  30. return FIFO_OK;
  31. }
  32. void fifo_put_data(struct FIFO *Fifo, struct fifo_data* data)
  33. {
  34. (Fifo->data)[Fifo->head] = data;
  35. }
  36. int FIFO_Get(struct FIFO *Fifo, char *name, char *command)
  37. {
  38. if (FIFO_isEmpty(Fifo))
  39. {
  40. return FIFO_ERROR;
  41. }
  42. strcpy(name,(Fifo->name_buffer)[Fifo->tail]);
  43. strcpy(command, (Fifo->command_buffer)[Fifo->tail]);
  44. Fifo->tail = (Fifo->tail + 1) % (COMMAND_NUM);
  45. Fifo->size--;
  46. return FIFO_OK;
  47. }
  48. struct fifo_data* fifo_get_data(struct FIFO *Fifo)
  49. {
  50. return (Fifo->data)[Fifo->tail];
  51. }