]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Test the ability to duty cycle the radio on and off while the SPI bus starts and...
authorrincon <rincon>
Fri, 4 May 2007 18:35:32 +0000 (18:35 +0000)
committerrincon <rincon>
Fri, 4 May 2007 18:35:32 +0000 (18:35 +0000)
apps/tests/cc2420/TestSpiOff/Makefile [new file with mode: 0644]
apps/tests/cc2420/TestSpiOff/README.txt [new file with mode: 0644]
apps/tests/cc2420/TestSpiOff/SpiOffC.nc [new file with mode: 0644]
apps/tests/cc2420/TestSpiOff/SpiOffP.nc [new file with mode: 0644]

diff --git a/apps/tests/cc2420/TestSpiOff/Makefile b/apps/tests/cc2420/TestSpiOff/Makefile
new file mode 100644 (file)
index 0000000..d46e3c4
--- /dev/null
@@ -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 (file)
index 0000000..d50189d
--- /dev/null
@@ -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 (file)
index 0000000..44b54d9
--- /dev/null
@@ -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 (file)
index 0000000..fb5a06c
--- /dev/null
@@ -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<TMilli>;
+    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();
+    }
+  }
+}
+
+