apptask.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. *********************************************************************************************************
  3. * xmk guide
  4. *
  5. * (c) Copyright 2016-2020, hualijidian.com
  6. * All Rights Reserved
  7. *
  8. * @file apptask.c
  9. * @author eric
  10. * @brief
  11. * @date 2018��11��2��
  12. * @version V0.0.1
  13. *********************************************************************************************************
  14. */
  15. #include "stdio.h"
  16. #include "stdint.h"
  17. #include "env.h"
  18. #include "apptask.h"
  19. #define DBG_SECTION_NAME "apptask"
  20. #define DBG_LEVEL DBG_INFO
  21. #include <rtdbg.h>
  22. uint8_t demo = 0;
  23. TransportQueue_t Trans;
  24. /**
  25. * @brief �����ʾ�����0->1 ��1->0
  26. * @param
  27. * @retval
  28. */
  29. //void Task_AddDemoTransport(void) {
  30. // TASK_Transport_t task1 = {0, 1};
  31. // TASK_Transport_t task2 = {1, 0};
  32. // Task_AddTransport(task1);
  33. // Task_AddTransport(task2);
  34. // LOG_D("Demo tasks added");
  35. //}
  36. #define _TRANS_Q_IS_EMPTY (Trans.Last == Trans.Current)
  37. #define _TRANS_Q_IS_FULL ((Trans.Last + 1) % MAX_TASK_Q == Trans.Current)
  38. uint16_t Task_GetTransCnt(void){
  39. return (MAX_TASK_Q + Trans.Last - Trans.Current) % MAX_TASK_Q;
  40. }
  41. uint8_t Task_AddTransport(TASK_Transport_t task) {
  42. if(S.TaskStatus != TRANS_STATUS_NULL){
  43. if(S.TaskSrc != Set.ChargeStation){
  44. return TASK_LIST_FULL;
  45. }
  46. }
  47. if(_TRANS_Q_IS_FULL){
  48. LOG_D("Add transport task error: list is full");
  49. return TASK_LIST_FULL;
  50. }
  51. // LogLocalPrintf("Task_AddTransport = %d:%s\r\n", strlen(task.Id), task.Id);
  52. // if(strlen(task.Id) > 0){
  53. // if(_TRANS_Q_IS_EMPTY){
  54. // Trans.Elems[Trans.Last] = task;
  55. // }else{
  56. // return TASK_LIST_FULL;
  57. // }
  58. // }else{
  59. // Trans.Elems[Trans.Last] = task;
  60. // }
  61. Trans.Elems[Trans.Last] = task;
  62. S.TaskSrc = task.Src;
  63. // LOG_D("Add transport task [%d:%d->%d] ok", Trans.Last, task.Src, task.Dst);
  64. Trans.Last = (Trans.Last + 1) % MAX_TASK_Q;
  65. return TASK_ASCCEPT;
  66. }
  67. TASK_Transport_t* Task_GetCurTransport(void) {
  68. if(_TRANS_Q_IS_EMPTY){
  69. return NULL;
  70. }
  71. return Trans.Elems + Trans.Current;
  72. }
  73. uint8_t Task_HasTransport(void) {
  74. if(_TRANS_Q_IS_EMPTY){
  75. return False;
  76. }
  77. return True;
  78. }
  79. uint8_t Task_FinishCurTransport(void) {
  80. Trans.Status = TRANS_STATUS_INIT;
  81. if(_TRANS_Q_IS_EMPTY){
  82. return 1;
  83. }
  84. //LOG_D("Transport task [%d:%d->%d] Finished", Trans.Current, Trans.Elems[Trans.Current].Src, Trans.Elems[Trans.Current].Dst);
  85. Task_SendStatus(TASK_FINISH);
  86. Trans.Current = (Trans.Current + 1) % MAX_TASK_Q;
  87. return 0;
  88. }
  89. uint8_t Task_ClearTransport(void) {
  90. // ������һ������
  91. if((Trans.Status != TRANS_STATUS_INIT) && (Trans.Last != Trans.Current)){
  92. Trans.Last = (Trans.Current + 1) % MAX_TASK_Q;
  93. LOG_D("Transport task cleared except:[%d]", Trans.Current);
  94. return True;
  95. }
  96. LOG_D("Transport task all cleared");
  97. Trans.Last = 0;
  98. Trans.Current = 0;
  99. Trans.Status = TRANS_STATUS_INIT;
  100. return True;
  101. }
  102. void Task_ForceClear(void)
  103. {
  104. LOG_D("Transport task all cleared");
  105. Trans.Last = 0;
  106. Trans.Current = 0;
  107. Trans.Status = TRANS_STATUS_INIT;
  108. }
  109. uint8_t Task_SendStatus(uint8_t status) {
  110. return 1;
  111. /*
  112. static uint8_t sendBuff[MAX_TASK_Q * 4 + 1];
  113. uint8_t iTask = Trans.Current;
  114. uint8_t i = 3;
  115. if(_TRANS_Q_IS_EMPTY){
  116. return 0;
  117. }
  118. sendBuff[0] = status;
  119. sendBuff[1] = Trans.Current;
  120. sendBuff[2] = Trans.Last;
  121. while(iTask != Trans.Last){
  122. sendBuff[i] = Trans.Elems[iTask].Src >> 8;
  123. i++;
  124. sendBuff[i] = Trans.Elems[iTask].Src;
  125. i++;
  126. sendBuff[i] = Trans.Elems[iTask].Dst >> 8;
  127. i++;
  128. sendBuff[i] = Trans.Elems[iTask].Dst;
  129. i++;
  130. iTask = (iTask + 1) % MAX_TASK_Q;
  131. }
  132. MsgSend('1', sendBuff, i);
  133. return i;
  134. */
  135. }