yc_queue.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * COPYRIGHT NOTICE
  3. *Copyright(c) 2014,YICHIP
  4. *
  5. * @file yc_queue.c
  6. * @brief ...
  7. *
  8. * @version 1.0
  9. * @author jingzou
  10. * @data Jan 24, 2018
  11. **/
  12. #include "yc_queue.h"
  13. #include<stdio.h>
  14. #include<string.h>
  15. bool queue_init(QUEUE_HEADER *pQheader, void *pMem, uint8_t unitLen, uint8_t len)
  16. {
  17. // printf("Queue initial\r\n");
  18. if (pQheader == NULL || pMem == NULL || unitLen == 0 || len == 0)
  19. {
  20. return false;
  21. }
  22. pQheader->pRead = pMem;
  23. pQheader->pWrite = pMem;
  24. pQheader->pHead = pMem;
  25. pQheader->array_Len = len;
  26. pQheader->unit_Len = unitLen;
  27. pQheader->current_queue_len = 0;
  28. return true;
  29. }
  30. bool queue_clear(QUEUE_HEADER *pQheader)
  31. {
  32. if (pQheader == NULL)
  33. {
  34. return false;
  35. }
  36. pQheader->pRead = pQheader->pHead;
  37. pQheader->pWrite = pQheader->pHead;
  38. pQheader->current_queue_len = 0;
  39. return true;
  40. }
  41. bool Insert_Queue(QUEUE_HEADER *pQheader,void *pEle)
  42. {
  43. uint8_t i;
  44. //unsigned char * pTemp;
  45. if (queue_is_full(pQheader))
  46. {
  47. return false;
  48. }
  49. memcpy(pQheader->pWrite,pEle,pQheader->unit_Len);
  50. pQheader->pWrite = (void *)(((uint8_t *)pQheader->pWrite)+pQheader->unit_Len);
  51. if ((uint8_t *)pQheader->pWrite == ((uint8_t *)pQheader->pHead) + (pQheader->unit_Len*pQheader->array_Len))
  52. {
  53. pQheader->pWrite = pQheader->pHead;
  54. }
  55. pQheader->current_queue_len++;
  56. //YC_LOG_INFO("put queue = %x,%d \r\n",(uint32_t)pQheader->pWrite,pQheader->current_queue_len);
  57. return true;
  58. }
  59. void * Delete_Queue(QUEUE_HEADER *pQheader)
  60. {
  61. void *pTemp;
  62. if (queue_is_empty(pQheader))
  63. {
  64. return NULL;
  65. }
  66. pTemp = pQheader->pRead;
  67. pQheader->pRead = (void *)(((unsigned char *)pQheader->pRead)+ pQheader->unit_Len);
  68. if ((uint8_t *)pQheader->pRead == ((uint8_t *)pQheader->pHead) + (pQheader->unit_Len*pQheader->array_Len))
  69. {
  70. pQheader->pRead = pQheader->pHead;
  71. }
  72. pQheader->current_queue_len--;
  73. //YC_LOG_INFO("get queue = %x,%d \r\n",(uint32_t)pTemp,pQheader->current_queue_len);
  74. return pTemp;
  75. }
  76. bool queue_is_empty(QUEUE_HEADER *pQheader)
  77. {
  78. if (pQheader->current_queue_len == 0)
  79. {
  80. return true;
  81. }
  82. return false;
  83. }
  84. bool queue_is_full(QUEUE_HEADER *pQheader)
  85. {
  86. if (pQheader->current_queue_len == pQheader->array_Len)
  87. {
  88. return true;
  89. }
  90. return false;
  91. }
  92. uint8_t queue_ele_count(QUEUE_HEADER *pQheader)
  93. {
  94. return pQheader->current_queue_len;
  95. }