/** * Create a new lv_task * @param task a function which is the task itself * @param period call period in ms unit * @param prio priority of the task (LV_TASK_PRIO_OFF means the task is stopped) * @param param free parameter * @return pointer to the new task */ lv_task_t* lv_task_create(void (*task) (void *), uint32_t period, lv_task_prio_t prio, void * param) { lv_task_t* new_lv_task; new_lv_task = lv_ll_ins_head(&lv_task_ll); lv_mem_assert(new_lv_task); new_lv_task->period = period; new_lv_task->task = task; new_lv_task->prio = prio; new_lv_task->param = param; new_lv_task->once = 0; new_lv_task->last_run = lv_tick_get(); return new_lv_task; }
last_task_run = lv_tick_get(); lv_task_create(anim_task, LV_REFR_PERIOD, LV_TASK_PRIO_MID, NULL); } /** * Create an animation * @param anim_p an initialized 'anim_t' variable. Not required after call. */ void lv_anim_create(lv_anim_t * anim_p) { LV_LOG_TRACE("animation create started") /* Do not let two animations for the same 'var' with the same 'fp'*/ if(anim_p->fp != NULL) lv_anim_del(anim_p->var, anim_p->fp); /*fp == NULL would delete all animations of var*/ /*Add the new animation to the animation linked list*/ lv_anim_t * new_anim = lv_ll_ins_head(&LV_GC_ROOT(_lv_anim_ll)); lv_mem_assert(new_anim); if(new_anim == NULL) return; /*Initialize the animation descriptor*/ anim_p->playback_now = 0; memcpy(new_anim, anim_p, sizeof(lv_anim_t)); /*Set the start value*/ if(new_anim->fp != NULL) new_anim->fp(new_anim->var, new_anim->start); /* Creating an animation changed the linked list. * It's important if it happens in a ready callback. (see `anim_task`)*/ anim_list_changed = true; LV_LOG_TRACE("animation created")