bool timer_add_event(timer_event* event) { #ifdef LOG_FWK_ENABLED uint16_t current_timer = hal_timer_getvalue(); log_print_stack_string(LOG_FWK, "timer_add_event: %d.%d", event->next_event/1000,event->next_event%1000); log_print_stack_string(LOG_FWK, "timer_add_event timer S : %d.%d", current_timer/1000, current_timer%1000); #endif if (event->next_event == 0) { event->f(NULL); return true; } timer_event new_event; new_event.f = event->f; new_event.next_event = event->next_event; if (timer_insert_value_in_queue(&new_event)) { if (!started) { hal_timer_enable_interrupt(); started = true; hal_timer_setvalue(new_event.next_event); } uint16_t diff = hal_timer_getvalue() - new_event.next_event; if (diff < 1000) { #ifdef LOG_FWK_ENABLED current_timer = hal_timer_getvalue(); log_print_stack_string(LOG_FWK, "timer_add_event M timer overrun : %d.%d", current_timer/1000,current_timer%1000); log_print_stack_string(LOG_FWK, "timer_add_event M: %d.%d", new_event.next_event/1000, new_event.next_event%1000); #endif timer_completed(); } } else { //log_print_stack_string(LOG_FWK, "Cannot add event, queue is full"); return false; } #ifdef LOG_FWK_ENABLED current_timer = hal_timer_getvalue(); log_print_stack_string(LOG_FWK, "timer_add_event timer E : %d.%d", current_timer/1000,current_timer%1000); #endif return true; }
bool timer_add_event(timer_event* event) { DPRINT("Add event: current timer: %d.", hal_timer_getvalue()); if (event->next_event == 0) { event->f(); return true; } timer_event new_event; new_event.f = event->f; new_event.next_event = event->next_event; DPRINT(" - new event : %d %p", new_event.next_event, new_event.f); if (timer_insert_value_in_queue(&new_event)) { if (!started) { hal_timer_enable_interrupt(); started = true; hal_timer_setvalue(new_event.next_event); } uint16_t diff = hal_timer_getvalue() - new_event.next_event; if (diff < 1000) { DPRINT("timer_add_event M timer overrun : %d", hal_timer_getvalue()); DPRINT("timer_add_event M: %d", new_event.next_event); timer_completed(); } } else { DPRINT("Cannot add event, queue is full"); return false; } DPRINT("timer_add_event timer E : %d", hal_timer_getvalue()); return true; }