/** * @file lv_async.c * */ /********************* * INCLUDES *********************/ #include "lv_async.h" #include "lv_mem.h" #include "lv_timer.h" /********************* * DEFINES *********************/ /********************** * TYPEDEFS **********************/ typedef struct _lv_async_info_t { lv_async_cb_t cb; void * user_data; } lv_async_info_t; /********************** * STATIC PROTOTYPES **********************/ static void lv_async_timer_cb(lv_timer_t * timer); /********************** * STATIC VARIABLES **********************/ /********************** * MACROS **********************/ /********************** * GLOBAL FUNCTIONS **********************/ lv_res_t lv_async_call(lv_async_cb_t async_xcb, void * user_data) { /*Allocate an info structure*/ lv_async_info_t * info = lv_mem_alloc(sizeof(lv_async_info_t)); if(info == NULL) return LV_RES_INV; /*Create a new timer*/ lv_timer_t * timer = lv_timer_create(lv_async_timer_cb, 0, info); if(timer == NULL) { lv_mem_free(info); return LV_RES_INV; } info->cb = async_xcb; info->user_data = user_data; lv_timer_set_repeat_count(timer, 1); return LV_RES_OK; } /********************** * STATIC FUNCTIONS **********************/ static void lv_async_timer_cb(lv_timer_t * timer) { lv_async_info_t * info = (lv_async_info_t *)timer->user_data; info->cb(info->user_data); lv_mem_free(info); }