added energest on all parts of leds API and some cleanup

This commit is contained in:
joxe 2008-09-29 11:35:28 +00:00
parent 9c3f5beec7
commit 673d73bfa3

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: leds.c,v 1.5 2008/07/03 23:36:30 adamdunkels Exp $ * @(#)$Id: leds.c,v 1.6 2008/09/29 11:35:28 joxe Exp $
*/ */
#include "dev/leds.h" #include "dev/leds.h"
@ -38,8 +38,30 @@
static unsigned char leds, invert; static unsigned char leds, invert;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static void static void
show_leds(void) show_leds(unsigned char changed)
{ {
if (changed & LEDS_GREEN) {
/* Green did change */
if ((invert ^ leds) & LEDS_GREEN) {
ENERGEST_ON(ENERGEST_TYPE_LED_GREEN);
} else {
ENERGEST_OFF(ENERGEST_TYPE_LED_GREEN);
}
}
if (changed & LEDS_YELLOW) {
if ((invert ^ leds) & LEDS_YELLOW) {
ENERGEST_ON(ENERGEST_TYPE_LED_YELLOW);
} else {
ENERGEST_OFF(ENERGEST_TYPE_LED_YELLOW);
}
}
if (changed & LEDS_RED) {
if ((invert ^ leds) & LEDS_RED) {
ENERGEST_ON(ENERGEST_TYPE_LED_RED);
} else {
ENERGEST_OFF(ENERGEST_TYPE_LED_RED);
}
}
leds_arch_set(leds ^ invert); leds_arch_set(leds ^ invert);
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
@ -54,11 +76,13 @@ void
leds_blink(void) leds_blink(void)
{ {
/* Blink all leds. */ /* Blink all leds. */
leds_arch_set(LEDS_ALL); unsigned char inv;
inv = ~(leds ^ invert);
leds_invert(inv);
clock_delay(400); clock_delay(400);
show_leds(); leds_invert(inv);
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
unsigned char unsigned char
@ -67,49 +91,33 @@ leds_get(void) {
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
leds_on(unsigned char l) leds_on(unsigned char ledv)
{ {
if((l & LEDS_GREEN) && !(leds & LEDS_GREEN)) { unsigned char changed;
ENERGEST_ON(ENERGEST_TYPE_LED_GREEN); changed = (~leds) & ledv;
} leds |= ledv;
if((l & LEDS_YELLOW) && !(leds & LEDS_YELLOW)) { show_leds(changed);
ENERGEST_ON(ENERGEST_TYPE_LED_YELLOW);
}
if((l & LEDS_RED) && !(leds & LEDS_RED)) {
ENERGEST_ON(ENERGEST_TYPE_LED_RED);
}
leds |= l;
show_leds();
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
leds_off(unsigned char l) leds_off(unsigned char ledv)
{ {
unsigned char changed;
if((l & LEDS_GREEN) && (leds & LEDS_GREEN)) { changed = leds & ledv;
ENERGEST_OFF(ENERGEST_TYPE_LED_GREEN); leds &= ~ledv;
} show_leds(changed);
if((l & LEDS_YELLOW) && (leds & LEDS_YELLOW)) {
ENERGEST_OFF(ENERGEST_TYPE_LED_YELLOW);
}
if((l & LEDS_RED) && (leds & LEDS_RED)) {
ENERGEST_OFF(ENERGEST_TYPE_LED_RED);
}
leds &= ~l;
show_leds();
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
leds_toggle(unsigned char leds) leds_toggle(unsigned char ledv)
{ {
leds_invert(leds); leds_invert(ledv);
} }
/* invert the ínvert register using the leds parameter */ /* invert the invert register using the leds parameter */
void leds_invert(unsigned char l) { void leds_invert(unsigned char ledv) {
invert = invert ^ l; invert = invert ^ ledv;
show_leds(); show_leds(ledv);
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/