#ifndef TASK_H
#define TASK_H

#ifdef __cplusplus
extern "C" {
#endif
#include "stdint.h"

#define true 0
#define false (-1)
//平台切换相关类型重定义
typedef int64_t TaskStatus_t;
typedef uint64_t TaskTime_t;
typedef int64_t TaskCnt_t;

typedef struct TaskList Task_t;

typedef uint64_t (*PlatformTicksFunc_t)(void);

typedef void (*Task_Callback_t)(Task_t *task, void *userdata);

struct TaskList {
    Task_t *next;
    uint8_t enable;
    TaskCnt_t runcnt;
    TaskTime_t lasttime;
    TaskTime_t intervaltime;
    Task_Callback_t callback;
    void *userdata;
};

//时间基准注册,建议1-10ms的基准
TaskStatus_t TaskInit(PlatformTicksFunc_t TicksFunc);

//创建任务
//  time:间隔时间
//  runcnt:执行次数 为-1无限制执行 为0只创建不运行
//  callback:回调函数
//  userdata:用户数据传参
TaskStatus_t TaskCreat(Task_t *task, TaskTime_t time, TaskCnt_t runcnt, Task_Callback_t callback, void *userdata);

//添加任务
TaskStatus_t TaskAdd(Task_t *task);

//删除任务
TaskStatus_t TaskDel(Task_t *task);

//重新开始以停止的任务
TaskStatus_t TaskStart(Task_t *task);

//暂停任务执行
TaskStatus_t TaskStop(Task_t *task);

//重设任务执行次数
TaskStatus_t TaskSetCnt(Task_t *task, TaskCnt_t runcnt);

//重设任务间隔时间
TaskStatus_t TaskSetTime(Task_t *task, TaskTime_t time);

//任务调度
TaskStatus_t TaskRun(void);
#ifdef __cplusplus
}
#endif
#endif //TASK_H