Added LED test into monitor, supporting increased LEDs on the apimote and telosb...
[goodfet] / firmware / apps / monitor / monitor.c
index ab6f8a4..b6858aa 100644 (file)
@@ -7,6 +7,11 @@
 #include "platform.h"
 #include "monitor.h"
 #include "builddate.h"
+#if (platform == tilaunchpad)
+#include <setjmp.h>
+extern jmp_buf warmstart;
+
+#endif
 
 #define MONITOR_APP
 
@@ -46,8 +51,8 @@ app_t const monitor_app = {
 
 //! Handles a monitor command.
 void monitor_handle_fn(uint8_t const app,
-                                          uint8_t const verb,
-                                          uint32_t const len)
+                      uint8_t const verb,
+                      uint32_t const len)
 {
        int i;
 
@@ -58,9 +63,9 @@ void monitor_handle_fn(uint8_t const app,
                break;
 
        case MONITOR_ECHO:
-               //Echo back the same buffer.
-               txdata(app,verb,len);
-               break;
+         //Echo back the same buffer.
+         txdata(app,verb,len);
+         break;
 
        case MONITOR_LIST_APPS:
                // transmit firmware build date
@@ -78,14 +83,26 @@ void monitor_handle_fn(uint8_t const app,
                break;
 
        case PEEK:
+         #ifdef MSP430
                cmddata[0]=memorybyte[cmddataword[0]];
+          #else
+               debugstr("Monitor peeks are unsupported on this platform.");
+               debughex(cmddataword[0]);
+               cmddata[0]=0x00;
+         #endif
                txdata(app,verb,1);
                break;
 
        case POKE:
+         #ifdef MSP430
                //Todo, make word or byte.
                memorybyte[cmddataword[0]] = cmddata[2];
                cmddata[0] = memorybyte[cmddataword[0]];
+          #else
+               debugstr("Monitor pokes are unsupported on this platform.");
+               debughex(cmddataword[0]);
+               cmddata[0]=0x00;
+         #endif
                txdata(app,verb,1);
                break;
 
@@ -123,29 +140,50 @@ void monitor_handle_fn(uint8_t const app,
                break;
 
        case MONITOR_DIR:
-               P5DIR=cmddata[0];
-               txdata(app,verb,1);
-               break;
-
        case MONITOR_IN:
-               cmddata[0]=P5IN;
-               txdata(app,verb,1);
-               break;
-
        case MONITOR_OUT:
-               P5OUT=cmddata[0];
-               txdata(app,verb,1);
-               break;
-               
+         debugstr("Command deprecated.");
+         txdata(app,verb,1);
+         break;
+
        case MONITOR_SILENT:
-               silent=cmddata[0];
-               txdata(app,verb,1);
-               break;
+         silent=cmddata[0];
+         txdata(app,verb,1);
+      break;
 
        case MONITOR_CONNECTED:
-               msp430_init_dco_done();
-               txdata(app,verb,0);
-               break;
+         #ifdef MSP430
+         msp430_init_dco_done();
+         #endif
+         txdata(app,verb,0);
+         break;
+
+       case MONITOR_LEDTEST:
+         //debugstr("Enter LEDTEST.");
+         i = 0;
+      #ifdef PLEDOUT
+       i++;
+       led_init();
+       led_on();
+       msdelay(5000);
+       led_off();
+      #endif
+      #ifdef PLED2OUT
+       i++;
+       led2_on();
+       msdelay(5000);
+       led2_off();
+      #endif
+      #ifdef PLED3OUT
+       i++;
+       led3_on();
+       msdelay(5000);
+       led3_off();
+      #endif
+      cmddata[0] = i;       //Return number of LEDs that we flashed.
+      txdata(app,verb,1);
+      break;
+
        }
 }
 
@@ -161,10 +199,14 @@ void monitor_ram_pattern()
        }
        txdata(0x00,0x90,0);
 
+#if (platform == tilaunchpad)
+       longjmp(warmstart,1);
+#else
        //Reboot
 #ifdef MSP430
        asm("br &0xfffe");
 #endif
+#endif
 }
 
 //! Return the number of contiguous bytes 0xBEEF, to measure RAM usage.