From: Niclas F. <ni...@us...> - 2012-02-02 16:40:49
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "contiki". The branch, master has been updated via b56198dc3cc43195d070ee4bb1e1644378e7b975 (commit) from 987906be97215dc4b94967748540f818840f24e9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b56198dc3cc43195d070ee4bb1e1644378e7b975 Author: Niclas Finne <nf...@si...> Date: Thu Feb 2 17:38:33 2012 +0100 Added option to read sensor data from TCP connection diff --git a/tools/collect-view/src/se/sics/contiki/collect/CollectServer.java b/tools/collect-view/src/se/sics/contiki/collect/CollectServer.java index cc7785f..cb75ab9 100644 --- a/tools/collect-view/src/se/sics/contiki/collect/CollectServer.java +++ b/tools/collect-view/src/se/sics/contiki/collect/CollectServer.java @@ -1474,6 +1474,7 @@ public class CollectServer implements SerialConnectionListener { boolean resetSensorLog = false; boolean useSensorLog = true; boolean useSerialOutput = true; + String host = null; String command = null; String logFileToLoad = null; String comPort = null; @@ -1482,6 +1483,18 @@ public class CollectServer implements SerialConnectionListener { String arg = args[i]; if (arg.length() == 2 && arg.charAt(0) == '-') { switch (arg.charAt(1)) { + case 'a': + if (i + 1 < n) { + host = args[++i]; + int pIndex = host.indexOf(':'); + if (pIndex > 0) { + port = Integer.parseInt(host.substring(pIndex + 1)); + host = host.substring(0, pIndex); + } + } else { + usage(arg); + } + break; case 'c': if (i + 1 < n) { command = args[++i]; @@ -1527,7 +1540,12 @@ public class CollectServer implements SerialConnectionListener { CollectServer server = new CollectServer(); SerialConnection serialConnection; - if (port > 0) { + if (host != null) { + if (port <= 0) { + port = 60001; + } + serialConnection = new TCPClientConnection(server, host, port); + } else if (port > 0) { serialConnection = new UDPConnection(server, port); } else if (command == null) { serialConnection = new SerialDumpConnection(server); @@ -1560,11 +1578,12 @@ public class CollectServer implements SerialConnectionListener { if (arg != null) { System.err.println("Unknown argument '" + arg + '\''); } - System.err.println("Usage: java CollectServer [-n] [-i] [-r] [-f [file]] [-p port] [-c command] [COMPORT]"); + System.err.println("Usage: java CollectServer [-n] [-i] [-r] [-f [file]] [-a host:port] [-p port] [-c command] [COMPORT]"); System.err.println(" -n : Do not read or save sensor data log"); System.err.println(" -r : Clear any existing sensor data log at startup"); System.err.println(" -i : Do not allow serial output"); System.err.println(" -f : Read serial data from standard in"); + System.err.println(" -a : Connect to specified host:port"); System.err.println(" -p : Read data from specified UDP port"); System.err.println(" -c : Use specified command for serial data input/output"); System.err.println(" COMPORT: The serial port to connect to"); diff --git a/tools/collect-view/src/se/sics/contiki/collect/TCPClientConnection.java b/tools/collect-view/src/se/sics/contiki/collect/TCPClientConnection.java new file mode 100644 index 0000000..bcc681f --- /dev/null +++ b/tools/collect-view/src/se/sics/contiki/collect/TCPClientConnection.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2012, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE OR 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. + * + * ----------------------------------------------------------------- + * + * TCPClientConnection + * + * Authors : Niclas Finne + */ + +package se.sics.contiki.collect; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.net.Socket; + +/** + * + */ +public class TCPClientConnection extends SerialConnection { + + private final String host; + private final int port; + + private Socket client; + private BufferedReader in; + private PrintStream out; + + public TCPClientConnection(SerialConnectionListener listener, String host, int port) { + super(listener); + this.host = host; + this.port = port; + } + + @Override + public String getConnectionName() { + return "<tcp://" + host + ':' + port + '>'; + } + + @Override + public void open(String comPort) { + close(); + this.comPort = comPort == null ? "" : comPort; + + isClosed = false; + try { + client = new Socket(host, port); + in = new BufferedReader(new InputStreamReader(client.getInputStream())); + out = new PrintStream(client.getOutputStream()); + System.out.println("Opened TCP connection to " + host + ':' + port); + /* Start thread listening on UDP */ + Thread readInput = new Thread(new Runnable() { + public void run() { + try { + String line; + while (isOpen && (line = in.readLine()) != null) { + serialData(line); + } + } catch (IOException e) { + lastError = "Error when reading from SerialConnection TCP: " + e; + System.err.println(lastError); + if (!isClosed) { + e.printStackTrace(); + closeConnection(); + } + } finally { + System.out.println("SerialConnection TCP terminated."); + closeConnection(); + } + } + }, "TCP thread"); + isOpen = true; + serialOpened(); + readInput.start(); + + } catch (Exception e) { + lastError = "Failed to open TCP connection to " + host + ':' + port + ": " + e; + System.err.println(lastError); + e.printStackTrace(); + closeConnection(); + } + } + + @Override + protected void doClose() { + try { + if (in != null) { + in.close(); + in = null; + } + if (out != null) { + out.close(); + out = null; + } + if (client != null) { + client.close(); + client = null; + } + } catch (IOException e) { + e.printStackTrace(); + } + } + +} ----------------------------------------------------------------------- Summary of changes: .../src/se/sics/contiki/collect/CollectServer.java | 23 +++- .../sics/contiki/collect/TCPClientConnection.java | 130 ++++++++++++++++++++ 2 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 tools/collect-view/src/se/sics/contiki/collect/TCPClientConnection.java hooks/post-receive -- contiki |