void timer_completed() { #ifdef LOG_FWK_ENABLED uint16_t current_timer = hal_timer_getvalue(); log_print_stack_string(LOG_FWK, "timer_completed: %d.%d", current_timer/1000,current_timer%1000); #endif timer_event* event = (timer_event*) queue_pop_value(&event_queue, sizeof(timer_event)); bool directly_fire_new_event = false; if (event_queue.length == 0) { hal_timer_disable_interrupt(); started = false; } else { hal_timer_setvalue(((timer_event*) event_queue.front)->next_event); uint16_t diff = hal_timer_getvalue() - ((timer_event*) event_queue.front)->next_event; if (diff < 1000) directly_fire_new_event = true; } event->f(NULL); if (directly_fire_new_event) timer_completed(); }
void timer_completed() { DPRINT("Timer Completed: cti: %d", hal_timer_getvalue()); timer_event* event = (timer_event*) queue_pop_value(&event_queue, sizeof(timer_event)); DPRINT(" - event next_event %d event %p", event->next_event, event->f); DPRINT(" - event_queue lenght %d ", event_queue.length); bool directly_fire_new_event = false; if (event_queue.length == 0) { hal_timer_disable_interrupt(); started = false; } else { DPRINT(" - next_event next_event %d event %p", ((timer_event*) event_queue.front)->next_event, ((timer_event*) event_queue.front)->f); hal_timer_setvalue(((timer_event*) event_queue.front)->next_event); uint16_t diff = hal_timer_getvalue() - ((timer_event*) event_queue.front)->next_event; DPRINT(" - diff %d ", diff); if (diff < 1000) { directly_fire_new_event = true; } } event->f(); if (directly_fire_new_event) { timer_completed(); } }