You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
4.4 KiB
183 lines
4.4 KiB
/**
|
|
* @file lv_timer.h
|
|
*/
|
|
|
|
#ifndef LV_TIMER_H
|
|
#define LV_TIMER_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "../lv_conf_internal.h"
|
|
#include "../hal/lv_hal_tick.h"
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
#ifndef LV_ATTRIBUTE_TIMER_HANDLER
|
|
#define LV_ATTRIBUTE_TIMER_HANDLER
|
|
#endif
|
|
|
|
#define LV_NO_TIMER_READY 0xFFFFFFFF
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
struct _lv_timer_t;
|
|
|
|
/**
|
|
* Timers execute this type of functions.
|
|
*/
|
|
typedef void (*lv_timer_cb_t)(struct _lv_timer_t *);
|
|
|
|
/**
|
|
* Descriptor of a lv_timer
|
|
*/
|
|
typedef struct _lv_timer_t {
|
|
uint32_t period; /**< How often the timer should run*/
|
|
uint32_t last_run; /**< Last time the timer ran*/
|
|
lv_timer_cb_t timer_cb; /**< Timer function*/
|
|
void * user_data; /**< Custom user data*/
|
|
int32_t repeat_count; /**< 1: One time; -1 : infinity; n>0: residual times*/
|
|
uint32_t paused : 1;
|
|
} lv_timer_t;
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Init the lv_timer module
|
|
*/
|
|
void _lv_timer_core_init(void);
|
|
|
|
//! @cond Doxygen_Suppress
|
|
|
|
/**
|
|
* Call it periodically to handle lv_timers.
|
|
* @return time till it needs to be run next (in ms)
|
|
*/
|
|
LV_ATTRIBUTE_TIMER_HANDLER uint32_t lv_timer_handler(void);
|
|
|
|
//! @endcond
|
|
|
|
/**
|
|
* Call it in the super-loop of main() or threads. It will run lv_timer_handler()
|
|
* with a given period in ms. You can use it with sleep or delay in OS environment.
|
|
* This function is used to simplify the porting.
|
|
* @param __ms the period for running lv_timer_handler()
|
|
*/
|
|
static inline LV_ATTRIBUTE_TIMER_HANDLER uint32_t lv_timer_handler_run_in_period(uint32_t ms)
|
|
{
|
|
static uint32_t last_tick = 0;
|
|
uint32_t curr_tick = lv_tick_get();
|
|
|
|
if((curr_tick - last_tick) >= (ms)) {
|
|
last_tick = curr_tick;
|
|
return lv_timer_handler();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* Create an "empty" timer. It needs to initialized with at least
|
|
* `lv_timer_set_cb` and `lv_timer_set_period`
|
|
* @return pointer to the created timer
|
|
*/
|
|
lv_timer_t * lv_timer_create_basic(void);
|
|
|
|
/**
|
|
* Create a new lv_timer
|
|
* @param timer_xcb a callback to call periodically.
|
|
* (the 'x' in the argument name indicates that it's not a fully generic function because it not follows
|
|
* the `func_name(object, callback, ...)` convention)
|
|
* @param period call period in ms unit
|
|
* @param user_data custom parameter
|
|
* @return pointer to the new timer
|
|
*/
|
|
lv_timer_t * lv_timer_create(lv_timer_cb_t timer_xcb, uint32_t period, void * user_data);
|
|
|
|
/**
|
|
* Delete a lv_timer
|
|
* @param timer pointer to an lv_timer
|
|
*/
|
|
void lv_timer_del(lv_timer_t * timer);
|
|
|
|
/**
|
|
* Pause/resume a timer.
|
|
* @param timer pointer to an lv_timer
|
|
*/
|
|
void lv_timer_pause(lv_timer_t * timer);
|
|
|
|
void lv_timer_resume(lv_timer_t * timer);
|
|
|
|
/**
|
|
* Set the callback the timer (the function to call periodically)
|
|
* @param timer pointer to a timer
|
|
* @param timer_cb the function to call periodically
|
|
*/
|
|
void lv_timer_set_cb(lv_timer_t * timer, lv_timer_cb_t timer_cb);
|
|
|
|
/**
|
|
* Set new period for a lv_timer
|
|
* @param timer pointer to a lv_timer
|
|
* @param period the new period
|
|
*/
|
|
void lv_timer_set_period(lv_timer_t * timer, uint32_t period);
|
|
|
|
/**
|
|
* Make a lv_timer ready. It will not wait its period.
|
|
* @param timer pointer to a lv_timer.
|
|
*/
|
|
void lv_timer_ready(lv_timer_t * timer);
|
|
|
|
/**
|
|
* Set the number of times a timer will repeat.
|
|
* @param timer pointer to a lv_timer.
|
|
* @param repeat_count -1 : infinity; 0 : stop ; n>0: residual times
|
|
*/
|
|
void lv_timer_set_repeat_count(lv_timer_t * timer, int32_t repeat_count);
|
|
|
|
/**
|
|
* Reset a lv_timer.
|
|
* It will be called the previously set period milliseconds later.
|
|
* @param timer pointer to a lv_timer.
|
|
*/
|
|
void lv_timer_reset(lv_timer_t * timer);
|
|
|
|
/**
|
|
* Enable or disable the whole lv_timer handling
|
|
* @param en true: lv_timer handling is running, false: lv_timer handling is suspended
|
|
*/
|
|
void lv_timer_enable(bool en);
|
|
|
|
/**
|
|
* Get idle percentage
|
|
* @return the lv_timer idle in percentage
|
|
*/
|
|
uint8_t lv_timer_get_idle(void);
|
|
|
|
/**
|
|
* Iterate through the timers
|
|
* @param timer NULL to start iteration or the previous return value to get the next timer
|
|
* @return the next timer or NULL if there is no more timer
|
|
*/
|
|
lv_timer_t * lv_timer_get_next(lv_timer_t * timer);
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif
|
|
|