From 1e950af492693881a74c6bd258822fb39e03f925 Mon Sep 17 00:00:00 2001 From: adamdunkels Date: Tue, 3 Apr 2007 19:02:27 +0000 Subject: [PATCH] Test program that blinks LEDs using the rtimer real-time timers --- examples/sky/rt-leds.c | 71 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 examples/sky/rt-leds.c diff --git a/examples/sky/rt-leds.c b/examples/sky/rt-leds.c new file mode 100644 index 000000000..4c271a8e7 --- /dev/null +++ b/examples/sky/rt-leds.c @@ -0,0 +1,71 @@ + +#include "contiki.h" +#include "sys/rtimer.h" + +#include "dev/leds.h" + +/*---------------------------------------------------------------------------*/ +PROCESS(test_rtimer_process, "Test RT"); +AUTOSTART_PROCESSES(&test_rtimer_process); + +struct fade { + struct rtimer rt; + struct pt pt; + int led; + rtimer_clock_t ontime, offtime; + int addend; +}; +/*---------------------------------------------------------------------------*/ +static void +fade(struct rtimer *t, void *ptr) +{ + struct fade *f = ptr; + + PT_BEGIN(&f->pt); + + while(1) { + leds_on(f->led); + rtimer_set(t, RTIMER_TIME(t) + f->ontime, 1, fade, ptr); + PT_YIELD(&f->pt); + + leds_off(f->led); + rtimer_set(t, RTIMER_TIME(t) + f->offtime, 1, fade, ptr); + + f->ontime += f->addend; + f->offtime -= f->addend; + if(f->offtime <= 4 || f->offtime >= 100) { + f->addend = -f->addend; + } + PT_YIELD(&f->pt); + } + + PT_END(&f->pt); +} +/*---------------------------------------------------------------------------*/ +static void +init_fade(struct fade *f, int led) +{ + f->led = led; + f->addend = 4; + f->ontime = 4; + f->offtime = 100; + PT_INIT(&f->pt); + rtimer_set(&f->rt, RTIMER_NOW() + led, 1, fade, f); +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(test_rtimer_process, ev, data) +{ + static struct fade red; + PROCESS_BEGIN(); + + rtimer_init(); + + init_fade(&red, LEDS_RED); + + while(1) { + PROCESS_WAIT_EVENT(); + } + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/