74 lines
1.6 KiB
C
74 lines
1.6 KiB
C
|
|
#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 char
|
|
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,
|
|
(rtimer_callback_t)fade, ptr);
|
|
PT_YIELD(&f->pt);
|
|
|
|
leds_off(f->led);
|
|
rtimer_set(t, RTIMER_TIME(t) + f->offtime, 1,
|
|
(rtimer_callback_t)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, (rtimer_callback_t)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();
|
|
}
|
|
/*---------------------------------------------------------------------------*/
|