mcu_ab568x/app/platform/libs/api_co_time.h
2025-05-30 18:03:10 +08:00

123 lines
3.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _API_COTIME_H
#define _API_COTIME_H
#include "include.h"
//CO timer
typedef enum
{
/// Only run once
TIMER_ONE_SHOT,
/// Repeat until stop it
TIMER_REPEAT,
}co_timer_mode_t;
typedef enum
{
/// Only run once
LEVEL_LOW_PRI,
/// Repeat until stop it
LEVEL_HIGH_PRI,
}co_timer_level_t;
typedef struct _co_timer_t {
struct _co_timer_t *next;
co_timer_mode_t mode;
uint32_t time_sorce;
uint32_t time_out;
uint32_t en : 1;
uint32_t is_sleep_run : 1;
void *func_cb;
void *param;
}co_timer_t;
typedef void (*co_timer_callback_t)(co_timer_t *timer, void *param);
/**
* @brief 创建软定时器
* @param[in] timer : timer句柄 (必须是静态或全局)
* @param[in] delay : 1ms为单位
* @param[in] mode : 执行一次或循环
* @param[in] level : timer优先级
0在直接在main线程执行
1在timer5ms线程执行如果处理时间长且处理的代码没在公共区需要发消息到其他线程处理
* @param[in] callback: 回调函数
* @param[in] param :传参指针默认为NUL
*
* @return false: 失败
* true: 成功
**/
bool co_timer_set(co_timer_t *timer, uint32_t delay, co_timer_mode_t mode, co_timer_level_t level,
co_timer_callback_t callback, void *param);
/**
* @brief 删除软定时器函数
*
* @param[in] timer: 软定时器句柄
*
**/
void co_timer_del(co_timer_t *timer);
/**
* @brief 重置软定时器时间
* @param[in] timer : 软定时器句柄
*
**/
bool co_timer_reset(co_timer_t *timer);
/**
* @brief 是否使能定时器
co_timer_set后默认就是使能状态
* @param[in] timer : 软定时器句柄
@param[in] en : true打开软定时器 false关闭软定时器
*
**/
bool co_timer_enable(co_timer_t *timer, bool en);
/**
* @brief 设置对应的软定时器是否可以在sleep模式下运行
*
* @param[in] timer: 定时器初始化的句柄
* @param[in] is_acitve: sleep下是否不退出休眠也执行定时器
* @return false:设置失败
* true: 设置成功
**/
bool co_timer_set_sleep(co_timer_t *timer, bool is_acitve);
/**
* @判断软定时器的handle是否有效
* 设置为TIMER_ONE_SHOT后被执行后也会返回false
* @输入[in] 定时器初始化的句柄
*
**/
bool co_timer_handle_is_valid(co_timer_t *timer);
/**
* @brief 设置软定时器最大数量
* 默认是100个即不调用这个函数之前默认是100
* @param[in] 最大数量
*
**/
void co_timer_max_num_set(u8 num);
/**
* @brief 轮询运行timer函数
*
**/
bool co_timer_pro(u8 run_type);
/**
* @brief 获取列表里最近时间
*
* @param[in] type: timer类型
ture: 全部类型时间
flase:休眠下部执行的timer类
* @return : 625us单位时间
*
**/
u32 co_timer_get_min_time(bool type);
#endif