#ifndef _APP_TIMER_H_
#define _APP_TIMER_H_

#include "main.h"

/* 时间相关宏定义 */
#define TIME_TRUE  1U  /* 时间已到 */
#define TIME_FALSE 0U  /* 时间未到 */

/******************************************
 * 结构体: app_timer_class_t
 * 功能: 任务时间片结构体
 * 描述: 定义单个任务的时间片调度参数
*******************************************/
typedef struct
{                                                                        
    u8  run_flag;                           /* 调度标志，1：调度，0：挂起 */
    u16 timer_count;                        /* 时间片计数值 */
    u16 timer_reload;                       /* 时间片重载值 */
    void (*task)(void);                     /* 任务函数指针 */
} app_timer_class_t;

/******************************************
 * 结构体: app_timer_t
 * 功能: 应用定时器结构体
 * 描述: 管理所有任务的定时调度
*******************************************/
typedef struct
{                                    
    u16 ms_tick;                /* 滴答毫秒级计数器 */
    u16 s_tick;                 /* 滴答秒级计数器 */
    u16 task_num;               /* 任务数量 */
    app_timer_class_t *p_timer_class;  /* 任务时间片数组指针 */
    
    void (*init)(u8, app_timer_class_t *);  /* 初始化函数指针 */
    void (*task)(void);                     /* 定时器任务函数指针 */
    void (*increment_int)(u16);             /* 中断递增函数指针 */
} app_timer_t;

/* 函数声明 */
u8 app_timer_check_time_out(u16 time_start, u16 time_now, u16 time_out);
u16 app_timer_check_run_time(u16 time_start, u16 time_now, u16 time_out);
void delay_ms(u16 delay);

/* 声明外部变量 */
extern app_timer_t app_timer;

#endif
