From: idgay Date: Fri, 19 Sep 2008 23:57:57 +0000 (+0000) Subject: test nx_float X-Git-Tag: rc_6_tinyos_2_1_1~616 X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=commitdiff_plain;h=c3789e983e151694e1fbad1471f992a8fd740373;p=tinyos-2.x.git test nx_float --- diff --git a/apps/tests/NxFloat/.cvsignore b/apps/tests/NxFloat/.cvsignore new file mode 100644 index 00000000..5abf7886 --- /dev/null +++ b/apps/tests/NxFloat/.cvsignore @@ -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 index 00000000..daf594a9 --- /dev/null +++ b/apps/tests/NxFloat/Makefile @@ -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 index 00000000..1b16c979 --- /dev/null +++ b/apps/tests/NxFloat/README.txt @@ -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 ] + + If not specified, the 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 index 00000000..6e0af1a1 --- /dev/null +++ b/apps/tests/NxFloat/TestSerial.h @@ -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 index 00000000..873fdec4 --- /dev/null +++ b/apps/tests/NxFloat/TestSerial.java @@ -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 + * @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 ]"); + } + + 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 index 00000000..4383f64a --- /dev/null +++ b/apps/tests/NxFloat/TestSerialAppC.nc @@ -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 index 00000000..3a40db6b --- /dev/null +++ b/apps/tests/NxFloat/TestSerialC.nc @@ -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 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) {} +} + + + +