90 lines
2 KiB
C
90 lines
2 KiB
C
#include "contiki-conf.h"
|
|
#include "dev/models.h"
|
|
#include "dev/leds.h"
|
|
|
|
#include "cc2430_sfr.h"
|
|
|
|
/*
|
|
* Sensinode v1.0 HW products have 2 red LEDs, LED1 is mapped to the Contiki
|
|
* LEDS_GREEN and LED2 is mapped to LEDS_RED.
|
|
*/
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
void
|
|
leds_arch_init(void)
|
|
{
|
|
#ifdef MODEL_N740
|
|
/*
|
|
* We don't need explicit led initialisation for N740s. They are controlled
|
|
* by the ser/par chip which is initalised already
|
|
*/
|
|
return;
|
|
#else
|
|
P0DIR |= 0x30;
|
|
#endif
|
|
}
|
|
/*---------------------------------------------------------------------------*/
|
|
unsigned char
|
|
leds_arch_get(void)
|
|
{
|
|
unsigned char l = 0;
|
|
|
|
#ifdef MODEL_N740
|
|
/* Read the current ser-par chip status */
|
|
uint8_t ser_par;
|
|
ser_par = n740_ser_par_get();
|
|
/* Check bits 7 & 8, ignore the rest */
|
|
if(ser_par & N740_SER_PAR_LED_GREEN) {
|
|
l |= LEDS_GREEN;
|
|
}
|
|
if(ser_par & N740_SER_PAR_LED_RED) {
|
|
l |= LEDS_RED;
|
|
}
|
|
#else
|
|
if(LED1_PIN) {
|
|
l |= LEDS_GREEN;
|
|
}
|
|
if(LED2_PIN) {
|
|
l |= LEDS_RED;
|
|
}
|
|
#endif
|
|
return l;
|
|
}
|
|
/*---------------------------------------------------------------------------*/
|
|
void
|
|
leds_arch_set(unsigned char leds)
|
|
{
|
|
#ifdef MODEL_N740
|
|
/* Read the current ser-par chip status - we want to change bits 7 & 8 but
|
|
* the remaining bit values should be retained */
|
|
uint8_t ser_par;
|
|
ser_par = n740_ser_par_get();
|
|
if(leds & LEDS_GREEN) {
|
|
ser_par |= N740_SER_PAR_LED_GREEN; /* Set bit 7 */
|
|
} else {
|
|
ser_par &= ~N740_SER_PAR_LED_GREEN; /* Unset bit 7 */
|
|
}
|
|
|
|
if(leds & LEDS_RED) {
|
|
ser_par |= N740_SER_PAR_LED_RED; /* Set bit 8 */
|
|
} else {
|
|
ser_par &= ~N740_SER_PAR_LED_RED; /* Unset bit 8 */
|
|
}
|
|
|
|
/* Write the new status back to the chip */
|
|
n740_ser_par_set(ser_par);
|
|
#else
|
|
if(leds & LEDS_GREEN) {
|
|
LED1_PIN = 1;
|
|
} else {
|
|
LED1_PIN = 0;
|
|
}
|
|
|
|
if(leds & LEDS_RED) {
|
|
LED2_PIN = 1;
|
|
} else {
|
|
LED2_PIN = 0;
|
|
}
|
|
#endif
|
|
}
|
|
/*---------------------------------------------------------------------------*/
|