This is an old revision of the document!
This tutorial will show how to make use of timers in Contiki. It will also give a basic into to events. Contiki provides 3 kind of timers:
The etimer (Event timer) will post an event when the timer is expiring. Since it posts an event you will need to have a process around it to handle the event.
PROCESS_THREAD(etimer_process, ev, data) { static struct etimer et; PROCESS_BEGIN(); /* set timer to expire after 5 seconds */ etimer_set(&et, CLOCK_SECOND * 5); while(1) { PROCESS_WAIT_EVENT(); /* Same thing as PROCESS_YIELD */ if(etimer_expired(&et)) { /* Do the work here and restart timer to get it periodic !!! */ printf("etimer expired.\n"); etimer_restart(&et); } } PROCESS_END(); }
In the above code the process is defined by PROCESS_THREAD which takes a name, an event variable and an event data variable as the arguments. When an etimer expires the event variable will be set to PROCESS_EVENT_TIMER and the event data variable will be set to point to the specific timer. Using that information the above example could also look like:
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER && data == &et); /* Do the work here and restart timer to get it periodic! */ printf("etimer expired.\n"); etimer_restart(&et);
But when waiting for this event in this way – all other events will be ignored so the first approach is more flexible as this will enable handling multiple types of events more easily.