Esempio n. 1
0
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();
    }
}