]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Deputy failure handlers for MSP430
authorregehr <regehr>
Mon, 11 Feb 2008 18:46:05 +0000 (18:46 +0000)
committerregehr <regehr>
Mon, 11 Feb 2008 18:46:05 +0000 (18:46 +0000)
tos/lib/safe/msp430/fail.c [new file with mode: 0644]

diff --git a/tos/lib/safe/msp430/fail.c b/tos/lib/safe/msp430/fail.c
new file mode 100644 (file)
index 0000000..dabc72f
--- /dev/null
@@ -0,0 +1,150 @@
+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);
+}