123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- *********************************************************************************************************
- * xmk guide
- *
- * (c) Copyright 2016-2020, hualijidian.com
- * All Rights Reserved
- *
- * @file apptask.c
- * @author eric
- * @brief
- * @date 2018��11��2��
- * @version V0.0.1
- *********************************************************************************************************
- */
- #include "stdio.h"
- #include "stdint.h"
- #include "env.h"
- #include "apptask.h"
- #define DBG_SECTION_NAME "apptask"
- #define DBG_LEVEL DBG_INFO
- #include <rtdbg.h>
- uint8_t demo = 0;
- TransportQueue_t Trans;
- /**
- * @brief �����ʾ�����0->1 ��1->0
- * @param
- * @retval
- */
- //void Task_AddDemoTransport(void) {
- // TASK_Transport_t task1 = {0, 1};
- // TASK_Transport_t task2 = {1, 0};
- // Task_AddTransport(task1);
- // Task_AddTransport(task2);
- // LOG_D("Demo tasks added");
- //}
- #define _TRANS_Q_IS_EMPTY (Trans.Last == Trans.Current)
- #define _TRANS_Q_IS_FULL ((Trans.Last + 1) % MAX_TASK_Q == Trans.Current)
- uint16_t Task_GetTransCnt(void){
- return (MAX_TASK_Q + Trans.Last - Trans.Current) % MAX_TASK_Q;
- }
- uint8_t Task_AddTransport(TASK_Transport_t task) {
- if(S.TaskStatus != TRANS_STATUS_NULL){
- if(S.TaskSrc != Set.ChargeStation){
- return TASK_LIST_FULL;
- }
- }
- if(_TRANS_Q_IS_FULL){
- LOG_D("Add transport task error: list is full");
- return TASK_LIST_FULL;
- }
- // LogLocalPrintf("Task_AddTransport = %d:%s\r\n", strlen(task.Id), task.Id);
- // if(strlen(task.Id) > 0){
- // if(_TRANS_Q_IS_EMPTY){
- // Trans.Elems[Trans.Last] = task;
- // }else{
- // return TASK_LIST_FULL;
- // }
- // }else{
- // Trans.Elems[Trans.Last] = task;
- // }
- Trans.Elems[Trans.Last] = task;
- S.TaskSrc = task.Src;
- // LOG_D("Add transport task [%d:%d->%d] ok", Trans.Last, task.Src, task.Dst);
- Trans.Last = (Trans.Last + 1) % MAX_TASK_Q;
- return TASK_ASCCEPT;
- }
- TASK_Transport_t* Task_GetCurTransport(void) {
- if(_TRANS_Q_IS_EMPTY){
- return NULL;
- }
- return Trans.Elems + Trans.Current;
- }
- uint8_t Task_HasTransport(void) {
- if(_TRANS_Q_IS_EMPTY){
- return False;
- }
- return True;
- }
- uint8_t Task_FinishCurTransport(void) {
- Trans.Status = TRANS_STATUS_INIT;
- if(_TRANS_Q_IS_EMPTY){
- return 1;
- }
- //LOG_D("Transport task [%d:%d->%d] Finished", Trans.Current, Trans.Elems[Trans.Current].Src, Trans.Elems[Trans.Current].Dst);
- Task_SendStatus(TASK_FINISH);
- Trans.Current = (Trans.Current + 1) % MAX_TASK_Q;
- return 0;
- }
- uint8_t Task_ClearTransport(void) {
- // ������һ������
- if((Trans.Status != TRANS_STATUS_INIT) && (Trans.Last != Trans.Current)){
- Trans.Last = (Trans.Current + 1) % MAX_TASK_Q;
- LOG_D("Transport task cleared except:[%d]", Trans.Current);
- return True;
- }
- LOG_D("Transport task all cleared");
- Trans.Last = 0;
- Trans.Current = 0;
- Trans.Status = TRANS_STATUS_INIT;
- return True;
- }
- void Task_ForceClear(void)
- {
- LOG_D("Transport task all cleared");
- Trans.Last = 0;
- Trans.Current = 0;
- Trans.Status = TRANS_STATUS_INIT;
- }
- uint8_t Task_SendStatus(uint8_t status) {
- return 1;
- /*
- static uint8_t sendBuff[MAX_TASK_Q * 4 + 1];
- uint8_t iTask = Trans.Current;
- uint8_t i = 3;
- if(_TRANS_Q_IS_EMPTY){
- return 0;
- }
- sendBuff[0] = status;
- sendBuff[1] = Trans.Current;
- sendBuff[2] = Trans.Last;
- while(iTask != Trans.Last){
- sendBuff[i] = Trans.Elems[iTask].Src >> 8;
- i++;
- sendBuff[i] = Trans.Elems[iTask].Src;
- i++;
- sendBuff[i] = Trans.Elems[iTask].Dst >> 8;
- i++;
- sendBuff[i] = Trans.Elems[iTask].Dst;
- i++;
- iTask = (iTask + 1) % MAX_TASK_Q;
- }
- MsgSend('1', sendBuff, i);
- return i;
- */
- }
|