[Tinyos-2-commits] CVS: tinyos-2.x/tos/lib/safe/msp430 fail.c, NONE, 1.1

John Regehr regehr at users.sourceforge.net
Mon Feb 11 10:46:07 PST 2008


Update of /cvsroot/tinyos/tinyos-2.x/tos/lib/safe/msp430
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv19562

Added Files:
	fail.c 
Log Message:
Deputy failure handlers for MSP430

--- NEW FILE: fail.c ---
static void led_off_0 (void) { 
    __asm__ volatile ("bis.b #16, &0x0031"); 
}

static void led_off_1 (void)  { 
    __asm__ volatile ("bis.b #32, &0x0031"); 
}

static void led_off_2 (void)  {
    __asm__ volatile ("bis.b #64, &0x0031"); 
}

static void led_on_0 (void) { 
    __asm__ volatile ("bic.b #16, &0x0031"); 
}

static void led_on_1 (void) { 
    __asm__ volatile ("bic.b #32, &0x0031"); 
}

static void led_on_2 (void) { 
    __asm__ volatile ("bic.b #64, &0x0031"); 
}

static void delay (int len) 
{
  volatile int x, y;
  for (x=0; x<len; x++) { 
    for (y=0; y<1000; y++) { }
  }
}

static void v_short_delay (void) { delay (10); }

static void short_delay (void) { delay (80); }

static void long_delay (void) { delay (800); }

static void flicker (void)
{
    int i;
    for (i=0; i<20; i++) {
	delay (20);
	led_off_0 ();
	led_off_1 ();
	led_off_2 ();
	delay (20);
	led_on_0 ();
	led_on_1 ();
	led_on_2 ();
    }
    led_off_0 ();
    led_off_1 ();
    led_off_2 ();
}

static void roll (void)
{
    int i;
    for (i=0; i<10; i++) {
	delay (30);
	led_on_0 ();
	led_off_2 ();
	delay (30);
	led_on_1 ();
	led_off_0 ();
	delay (30);
	led_on_2 ();
	led_off_1 ();
    }
    led_off_2 ();
}
	    
static void separator (void)
{
    led_off_0 ();
    led_off_1 ();
    led_off_2 ();
    short_delay ();
    led_on_0 ();
    led_on_1 ();
    led_on_2 ();
    v_short_delay ();
    led_off_0 ();
    led_off_1 ();
    led_off_2 ();
    short_delay ();
}

static void display_b4 (int c) 
{
  switch (c) {
  case 3:
    led_on_2 ();
  case 2:
    led_on_1 ();
  case 1:
    led_on_0 ();
  case 0:
    long_delay ();
    break;
  default:
    flicker ();
  }
  separator ();
}

static void display_int (const unsigned int x)
{
  int i = 14;
  do {
    display_b4 (0x3 & (x >> i));
    i -= 2;
  } while (i >= 0);
}

static void display_int_flid (const unsigned int x)
{
  roll ();
  display_int (x);
  roll ();
}

// Not sure how to do this in Telosb without looking it up
void deputy_fail_noreturn_fast (const char* file, int flid, const char* func)
{
  // disable interrupts
  // set LEDS to output

  while (1) {
    display_int_flid (flid);
  }

}

void deputy_fail_mayreturn(const char *check, const char *text,
                           const char* file, int line, const char* func)
{
    // I don't think this has any meaning without FLID transformation
    // FLID transformation stores FLID in line variable
    deputy_fail_noreturn_fast(file, line, func);
}

void deputy_fail_noreturn(const char *check, const char *text,
                          const char* file, int line, const char* func)
{
    // I don't think this has any meaning without FLID transformation
    // FLID transformation stores FLID in line variable
    deputy_fail_noreturn_fast(file, line, func);
}



More information about the Tinyos-2-commits mailing list