queue.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <string.h>
  2. #include "queue.h"
  3. void queue_init(queue_list_t* queue) {
  4. queue->front = -1;
  5. queue->rear = -1;
  6. queue->size = 0;
  7. }
  8. bool queue_full(queue_list_t* queue) {
  9. return (queue->size == QUEUE_MAX);
  10. }
  11. bool queue_empty(queue_list_t* queue) {
  12. return (queue->size == 0);
  13. }
  14. void queue_in(queue_list_t* queue, uint8_t* item, int length) {
  15. // int i;
  16. if (queue_full(queue)) {
  17. //LOG_ERROR("queue is full!");
  18. return;
  19. }
  20. length = length > MAX_BUF ? MAX_BUF : length;
  21. // for(i=0; i<QUEUE_MAX; i++) {
  22. // if(memcmp(item, queue->data[i].cmd, length) == 0) // have same cmd, return
  23. // return;
  24. // }
  25. queue->rear++;
  26. queue->rear %= QUEUE_MAX;
  27. queue->size++;
  28. memset(&queue->data[queue->rear], 0, sizeof(queue_element_t));
  29. memcpy(queue->data[queue->rear].cmd, item, length);
  30. queue->data[queue->rear].length = length;
  31. }
  32. int queue_out(queue_list_t* queue, uint8_t* item) {
  33. if (queue_empty(queue)) {
  34. //LOG_ERROR("queue is empty!");
  35. return 0;
  36. }
  37. queue->front++;
  38. queue->front %= QUEUE_MAX;
  39. queue->size--;
  40. memcpy(item, queue->data[queue->front].cmd, queue->data[queue->front].length);
  41. return queue->data[queue->front].length;
  42. }
  43. int queue_size(queue_list_t* queue) {
  44. return queue->size;
  45. }