From 51ba254ac7b07aceb0dac5ecc59a8b3beae3f70c Mon Sep 17 00:00:00 2001 From: rincon Date: Fri, 4 May 2007 18:35:32 +0000 Subject: [PATCH] Test the ability to duty cycle the radio on and off while the SPI bus starts and stops gracefully. --- apps/tests/cc2420/TestSpiOff/Makefile | 3 + apps/tests/cc2420/TestSpiOff/README.txt | 24 +++++ apps/tests/cc2420/TestSpiOff/SpiOffC.nc | 59 +++++++++++ apps/tests/cc2420/TestSpiOff/SpiOffP.nc | 129 ++++++++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 apps/tests/cc2420/TestSpiOff/Makefile create mode 100644 apps/tests/cc2420/TestSpiOff/README.txt create mode 100644 apps/tests/cc2420/TestSpiOff/SpiOffC.nc create mode 100644 apps/tests/cc2420/TestSpiOff/SpiOffP.nc diff --git a/apps/tests/cc2420/TestSpiOff/Makefile b/apps/tests/cc2420/TestSpiOff/Makefile new file mode 100644 index 00000000..d46e3c49 --- /dev/null +++ b/apps/tests/cc2420/TestSpiOff/Makefile @@ -0,0 +1,3 @@ +COMPONENT=SpiOffC + +include $(MAKERULES) diff --git a/apps/tests/cc2420/TestSpiOff/README.txt b/apps/tests/cc2420/TestSpiOff/README.txt new file mode 100644 index 00000000..d50189dd --- /dev/null +++ b/apps/tests/cc2420/TestSpiOff/README.txt @@ -0,0 +1,24 @@ + +Test the ability for the radio to duty cycle while sending and receiving +packets. The radio should stop accepting requests, the SPI bus be released +properly, and the radio should shut down. + +INSTALLATION +Transmitter is any mote with ID != 0 +Receiver is any mote with ID == 0 + +EXPECTATIONS +The receiver duty cycles its radio faster than the transmitter. + +Led0: + Transmitter = cannot send + +Led1: + Transmitter = sent a message + Receiver = received a message + +Led2: + On = radio on + Off = radio off + + diff --git a/apps/tests/cc2420/TestSpiOff/SpiOffC.nc b/apps/tests/cc2420/TestSpiOff/SpiOffC.nc new file mode 100644 index 00000000..44b54d9d --- /dev/null +++ b/apps/tests/cc2420/TestSpiOff/SpiOffC.nc @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2005-2006 Rincon Research Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Rincon Research Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * RINCON RESEARCH OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Transmitter != 0 + * Receiver = 0 + * @author David Moss + */ + +configuration SpiOffC { +} + +implementation { + components SpiOffP, + MainC, + new TimerMilliC(), + ActiveMessageC, + new AMSenderC(0), + new AMReceiverC(0), + LedsC; + + SpiOffP.Boot -> MainC; + SpiOffP.Timer -> TimerMilliC; + SpiOffP.SplitControl -> ActiveMessageC; + SpiOffP.AMSend -> AMSenderC; + SpiOffP.Receive -> AMReceiverC; + SpiOffP.AMPacket -> ActiveMessageC; + SpiOffP.Leds -> LedsC; + +} + diff --git a/apps/tests/cc2420/TestSpiOff/SpiOffP.nc b/apps/tests/cc2420/TestSpiOff/SpiOffP.nc new file mode 100644 index 00000000..fb5a06c1 --- /dev/null +++ b/apps/tests/cc2420/TestSpiOff/SpiOffP.nc @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2005-2006 Rincon Research Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Rincon Research Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * RINCON RESEARCH OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author David Moss + */ + +module SpiOffP { + uses { + interface Boot; + interface Timer; + interface AMSend; + interface Receive; + interface Leds; + interface SplitControl; + interface AMPacket; + } +} + +implementation { + + message_t myMsg; + + bool radioOn; + + /***************** Prototypes ****************/ + task void send(); + task void on(); + task void off(); + + /***************** Boot Events ****************/ + event void Boot.booted() { + radioOn = FALSE; + + if(call AMPacket.address() != 0) { + call Timer.startPeriodic(768); + post send(); + + } else { + call Timer.startPeriodic(128); + } + } + + /***************** SplitControl Events ****************/ + event void SplitControl.startDone(error_t error) { + call Leds.led2On(); + radioOn = TRUE; + } + + event void SplitControl.stopDone(error_t error) { + call Leds.set(0); + radioOn = FALSE; + } + + /***************** Send Events ****************/ + event void AMSend.sendDone(message_t *msg, error_t error) { + call Leds.led1Toggle(); + post send(); + } + + /***************** Receive Events ****************/ + event message_t *Receive.receive(message_t *msg, void *payload, uint8_t len) { + call Leds.led1Toggle(); + return msg; + } + + /***************** Timer Events *****************/ + event void Timer.fired() { + if(radioOn) { + post off(); + } else { + post on(); + } + } + + /***************** Tasks ****************/ + task void send() { + if(call AMSend.send(0, &myMsg, 28) != SUCCESS) { + call Leds.led1Off(); + call Leds.led0Toggle(); + post send(); + + } else { + call Leds.led0Off(); + } + } + + task void on() { + if(call SplitControl.start() != SUCCESS) { + post on(); + } + } + + task void off() { + if(call SplitControl.stop() != SUCCESS) { + post off(); + } + } +} + + -- 2.39.2