/** * @file lv_templ.c * */ /********************* * INCLUDES *********************/ #include "lv_async.h" /********************* * DEFINES *********************/ /********************** * TYPEDEFS **********************/ /********************** * STATIC PROTOTYPES **********************/ static void lv_async_task_cb(lv_task_t *task); /********************** * 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 task */ /* Use highest priority so that it will run before a refresh */ lv_task_t *task = lv_task_create(lv_async_task_cb, 0, LV_TASK_PRIO_HIGHEST, info); if(task == NULL) { lv_mem_free(info); return LV_RES_INV; } info->cb = async_xcb; info->user_data = user_data; /* Set the task's user data */ task->user_data = info; lv_task_once(task); return LV_RES_OK; } /********************** * STATIC FUNCTIONS **********************/ static void lv_async_task_cb(lv_task_t *task) { lv_async_info_t *info = (lv_async_info_t *)task->user_data; info->cb(info->user_data); lv_mem_free(info); }