[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