/* * slave's time = master's time * k + offset */ void update_clock(float k, int64_t offset) { k_ = k; offset_ = offset; if (task_list) { set_task_interrupt(task_list->time); } else { disable_timed_task(); } }
static inline void run_timed_task() { struct TimedTask *task = pop_task_list(&task_list); task->task(); free_timed_task(task); if (task_list) { set_task_interrupt(task_list->time); } else { disable_timed_task(); } }
void runAtTime(void (*schedFunc)(void), struct timeval *tv) { struct timeval now; struct TimedTask *t; getTime(&now); if (is_time_earlier(tv, &now)) { // error, can't schedule earlier than now printf("ERROR: UNABLE TO SCHEDULE TASK DURING PAST TIME\n\r"); return; } t = (struct TimedTask *) malloc(sizeof(struct TimedTask)); t->task = schedFunc; t->time = (struct timeval *) malloc(sizeof(struct timeval)); memcpy(t->time, tv, sizeof(struct timeval)); t->next_task = NULL; t->prev_task = NULL; enable_timed_task(); insert_timed_task(&task_list, t); set_task_interrupt(task_list->time); }