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