/* ********************************************************************************************************* * 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 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; */ }