]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
test nx_float
authoridgay <idgay>
Fri, 19 Sep 2008 23:57:57 +0000 (23:57 +0000)
committeridgay <idgay>
Fri, 19 Sep 2008 23:57:57 +0000 (23:57 +0000)
apps/tests/NxFloat/.cvsignore [new file with mode: 0644]
apps/tests/NxFloat/Makefile [new file with mode: 0644]
apps/tests/NxFloat/README.txt [new file with mode: 0644]
apps/tests/NxFloat/TestSerial.h [new file with mode: 0644]
apps/tests/NxFloat/TestSerial.java [new file with mode: 0644]
apps/tests/NxFloat/TestSerialAppC.nc [new file with mode: 0644]
apps/tests/NxFloat/TestSerialC.nc [new file with mode: 0644]

diff --git a/apps/tests/NxFloat/.cvsignore b/apps/tests/NxFloat/.cvsignore
new file mode 100644 (file)
index 0000000..5abf788
--- /dev/null
@@ -0,0 +1,4 @@
+TestSerialMsg.java
+TestSerialMsg.class
+TestSerial.class
+build
diff --git a/apps/tests/NxFloat/Makefile b/apps/tests/NxFloat/Makefile
new file mode 100644 (file)
index 0000000..daf594a
--- /dev/null
@@ -0,0 +1,15 @@
+COMPONENT=TestSerialAppC
+BUILD_EXTRA_DEPS += TestSerial.class
+CLEAN_EXTRA = *.class TestSerialMsg.java
+
+CFLAGS += -I$(TOSDIR)/lib/T2Hack
+
+TestSerial.class: $(wildcard *.java) TestSerialMsg.java
+       javac -target 1.4 -source 1.4 *.java
+
+TestSerialMsg.java:
+       mig java -target=null $(CFLAGS) -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o $@
+
+
+include $(MAKERULES)
+
diff --git a/apps/tests/NxFloat/README.txt b/apps/tests/NxFloat/README.txt
new file mode 100644 (file)
index 0000000..1b16c97
--- /dev/null
@@ -0,0 +1,29 @@
+README for NxFloat
+Author/Contact: tinyos-help@millennium.berkeley.edu
+
+Description:
+
+NxFloat is a version of the TestSerial application modified to use
+floating point numbers. It tests communication over the serial port
+and nx_float support. The java application sends packets to the serial
+port at 1Hz: the packet contains an incrementing counter. When the
+mote application receives a counter packet, it displays the bottom
+three bits on its LEDs. (This application is similar to
+RadioCountToLeds, except that it operates over the serial port.)
+Likewise, the mote also sends packets to the serial port at 1Hz, these
+packets contain a sequence number multiplied by 3.2. Upon reception of
+a packet, the java application prints the counter's value to standard
+out.
+
+Java Application Usage:
+  java TestSerial [-comm <packetsource>]
+
+  If not specified, the <packetsource> defaults to sf@localhost:9002 or
+  to your MOTECOM environment variable (if defined).
+
+Tools:
+
+Known bugs/limitations:
+
+None.
+
diff --git a/apps/tests/NxFloat/TestSerial.h b/apps/tests/NxFloat/TestSerial.h
new file mode 100644 (file)
index 0000000..6e0af1a
--- /dev/null
@@ -0,0 +1,13 @@
+
+#ifndef TEST_SERIAL_H
+#define TEST_SERIAL_H
+
+typedef nx_struct test_serial_msg {
+  nx_float counter;
+} test_serial_msg_t;
+
+enum {
+  AM_TEST_SERIAL_MSG = 0x89,
+};
+
+#endif
diff --git a/apps/tests/NxFloat/TestSerial.java b/apps/tests/NxFloat/TestSerial.java
new file mode 100644 (file)
index 0000000..873fdec
--- /dev/null
@@ -0,0 +1,106 @@
+/*                                                                     tab:4
+ * "Copyright (c) 2005 The Regents of the University  of California.  
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose, without fee, and without written
+ * agreement is hereby granted, provided that the above copyright
+ * notice, the following two paragraphs and the author appear in all
+ * copies of this software.
+ * 
+ * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
+ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+ * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+ * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
+ *
+ */
+
+/**
+ * Java-side application for testing serial port communication.
+ * 
+ *
+ * @author Phil Levis <pal@cs.berkeley.edu>
+ * @date August 12 2005
+ */
+
+import java.io.IOException;
+
+import net.tinyos.message.*;
+import net.tinyos.packet.*;
+import net.tinyos.util.*;
+
+public class TestSerial implements MessageListener {
+
+  private MoteIF moteIF;
+  
+  public TestSerial(MoteIF moteIF) {
+    this.moteIF = moteIF;
+    this.moteIF.registerListener(new TestSerialMsg(), this);
+  }
+
+  public void sendPackets() {
+    int counter = 0;
+    TestSerialMsg payload = new TestSerialMsg();
+    
+    try {
+      while (true) {
+       System.out.println("Sending packet " + counter);
+       payload.set_counter(counter);
+       moteIF.send(0, payload);
+       counter++;
+       try {Thread.sleep(1000);}
+       catch (InterruptedException exception) {}
+      }
+    }
+    catch (IOException exception) {
+      System.err.println("Exception thrown when sending packets. Exiting.");
+      System.err.println(exception);
+    }
+  }
+
+  public void messageReceived(int to, Message message) {
+    TestSerialMsg msg = (TestSerialMsg)message;
+    System.out.println("Received packet sequence number " + msg.get_counter());
+  }
+  
+  private static void usage() {
+    System.err.println("usage: TestSerial [-comm <source>]");
+  }
+  
+  public static void main(String[] args) throws Exception {
+    String source = null;
+    if (args.length == 2) {
+      if (!args[0].equals("-comm")) {
+       usage();
+       System.exit(1);
+      }
+      source = args[1];
+    }
+    else if (args.length != 0) {
+      usage();
+      System.exit(1);
+    }
+    
+    PhoenixSource phoenix;
+    
+    if (source == null) {
+      phoenix = BuildSource.makePhoenix(PrintStreamMessenger.err);
+    }
+    else {
+      phoenix = BuildSource.makePhoenix(source, PrintStreamMessenger.err);
+    }
+
+    MoteIF mif = new MoteIF(phoenix);
+    TestSerial serial = new TestSerial(mif);
+    serial.sendPackets();
+  }
+
+
+}
diff --git a/apps/tests/NxFloat/TestSerialAppC.nc b/apps/tests/NxFloat/TestSerialAppC.nc
new file mode 100644 (file)
index 0000000..4383f64
--- /dev/null
@@ -0,0 +1,67 @@
+// $Id$
+
+/*                                                                     tab:4
+ * "Copyright (c) 2000-2005 The Regents of the University  of California.  
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose, without fee, and without written agreement is
+ * hereby granted, provided that the above copyright notice, the following
+ * two paragraphs and the author appear in all copies of this software.
+ * 
+ * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+ * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
+ *
+ * Copyright (c) 2002-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/**
+ * Application to test that the TinyOS java toolchain can communicate
+ * with motes over the serial port. The application sends packets to
+ * the serial port at 1Hz: the packet contains an incrementing
+ * counter. When the application receives a counter packet, it
+ * displays the bottom three bits on its LEDs. This application is
+ * very similar to RadioCountToLeds, except that it operates over the
+ * serial port. There is Java application for testing the mote
+ * application: run TestSerial to print out the received packets and
+ * send packets to the mote.
+ *
+ *  @author Gilman Tolle
+ *  @author Philip Levis
+ *  
+ *  @date   Aug 12 2005
+ *
+ **/
+
+#include "TestSerial.h"
+
+configuration TestSerialAppC {}
+implementation {
+  components TestSerialC as App, LedsC, MainC;
+  components SerialActiveMessageC as AM;
+  components new TimerMilliC();
+
+  App.Boot -> MainC.Boot;
+  App.Control -> AM;
+  App.Receive -> AM.Receive[AM_TEST_SERIAL_MSG];
+  App.AMSend -> AM.AMSend[AM_TEST_SERIAL_MSG];
+  App.Leds -> LedsC;
+  App.MilliTimer -> TimerMilliC;
+  App.Packet -> AM;
+}
+
+
diff --git a/apps/tests/NxFloat/TestSerialC.nc b/apps/tests/NxFloat/TestSerialC.nc
new file mode 100644 (file)
index 0000000..3a40db6
--- /dev/null
@@ -0,0 +1,130 @@
+// $Id$
+
+/*                                                                     tab:4
+ * "Copyright (c) 2000-2005 The Regents of the University  of California.  
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose, without fee, and without written agreement is
+ * hereby granted, provided that the above copyright notice, the following
+ * two paragraphs and the author appear in all copies of this software.
+ * 
+ * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+ * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
+ *
+ * Copyright (c) 2002-2003 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/**
+ * Application to test that the TinyOS java toolchain can communicate
+ * with motes over the serial port. 
+ *
+ *  @author Gilman Tolle
+ *  @author Philip Levis
+ *  
+ *  @date   Aug 12 2005
+ *
+ **/
+
+#include "Timer.h"
+#include "TestSerial.h"
+
+module TestSerialC {
+  uses {
+    interface SplitControl as Control;
+    interface Leds;
+    interface Boot;
+    interface Receive;
+    interface AMSend;
+    interface Timer<TMilli> as MilliTimer;
+    interface Packet;
+  }
+}
+implementation {
+
+  message_t packet;
+
+  bool locked = FALSE;
+  uint16_t counter = 0;
+  
+  event void Boot.booted() {
+    call Control.start();
+  }
+  
+  event void MilliTimer.fired() {
+    counter++;
+    if (locked) {
+      return;
+    }
+    else {
+      test_serial_msg_t* rcm = (test_serial_msg_t*)call Packet.getPayload(&packet, sizeof(test_serial_msg_t));
+      if (rcm == NULL) {return;}
+      if (call Packet.maxPayloadLength() < sizeof(test_serial_msg_t)) {
+       return;
+      }
+
+      rcm->counter = counter * 3.2;
+      if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(test_serial_msg_t)) == SUCCESS) {
+       locked = TRUE;
+      }
+    }
+  }
+
+  event message_t* Receive.receive(message_t* bufPtr, 
+                                  void* payload, uint8_t len) {
+    if (len != sizeof(test_serial_msg_t)) {return bufPtr;}
+    else {
+      test_serial_msg_t* rcm = (test_serial_msg_t*)payload;
+      if ((int)rcm->counter & 0x1) {
+       call Leds.led0On();
+      }
+      else {
+       call Leds.led0Off();
+      }
+      if ((int)rcm->counter & 0x2) {
+       call Leds.led1On();
+      }
+      else {
+       call Leds.led1Off();
+      }
+      if ((int)rcm->counter & 0x4) {
+       call Leds.led2On();
+      }
+      else {
+       call Leds.led2Off();
+      }
+      return bufPtr;
+    }
+  }
+
+  event void AMSend.sendDone(message_t* bufPtr, error_t error) {
+    if (&packet == bufPtr) {
+      locked = FALSE;
+    }
+  }
+
+  event void Control.startDone(error_t err) {
+    if (err == SUCCESS) {
+      call MilliTimer.startPeriodic(1000);
+    }
+  }
+  event void Control.stopDone(error_t err) {}
+}
+
+
+
+