#include "monitor.h"
#include "builddate.h"
+
+#if (platform == tilaunchpad)
+#include <setjmp.h>
+extern jmp_buf warmstart;
+#endif
+
+
#define 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);
//! Overwrite all of RAM with 0xBEEF, then reboot.
void monitor_ram_pattern();
//! 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;
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
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;
break;
case MONITOR_DIR:
- //P5DIR=cmddata[0];
- debugstr("Command deprecated.");
- txdata(app,verb,1);
- break;
-
case MONITOR_IN:
- //cmddata[0]=P5IN;
- debugstr("Command deprecated.");
- txdata(app,verb,1);
- break;
-
case MONITOR_OUT:
- //P5OUT=cmddata[0];
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;
+
}
}
}
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.
//! Call a function by address.
int fncall(unsigned int adr)
{
+ #ifdef MSP430
int (*machfn)() = 0;
machfn = (int (*)()) adr;
return machfn();
+ #else
+ debugstr("fncall() not supported on this platform.");
+ #endif
}