Commit 88ae175c authored by Simon Duquennoy's avatar Simon Duquennoy
Browse files

Tools: remove collect-view

parent 09710882
......@@ -20,8 +20,6 @@ tools/tunslip6
build
tools/coffee-manager/build/
tools/coffee-manager/coffee.jar
tools/collect-view/build/
tools/collect-view/dist/
COOJA.testlog
# platform build artifacts
......
<?xml version="1.0"?>
<project name="Sensor Data Collect with Contiki" default="dist" basedir=".">
<property name="java" location="src"/>
<property name="build" location="build"/>
<property name="lib" location="lib"/>
<property name="dist" location="dist"/>
<property name="contiki" location="../.."/>
<property name="archive" value="collect-view.jar"/>
<property name="main" value="org.contikios.contiki.collect.CollectServer"/>
<property name="args" value="" />
<path id="classpath">
<fileset dir="${lib}" includes="**/*.jar"/>
</path>
<manifestclasspath property="jar.classpath" jarfile="${archive}">
<classpath refid="classpath" />
</manifestclasspath>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${java}" destdir="${build}" classpathref="classpath"
debug="true" includeantruntime="false" />
</target>
<target name="jar" depends="compile">
<jar destfile="${dist}/${archive}" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="${main}"/>
<attribute name="Class-Path" value="${jar.classpath}" />
</manifest>
</jar>
<mkdir dir="${dist}/lib"/>
<copy todir="${dist}/lib">
<fileset dir="${lib}"/>
</copy>
</target>
<condition property="collect-view-shell.exists">
<available file="${dist}/collect-view-shell.ihex"/>
</condition>
<target name="collect-view-shell.ihex" unless="collect-view-shell.exists" depends="init">
<exec dir="${contiki}/examples/collect" executable="make">
<arg value="TARGET=sky"/>
<arg value="collect-view-shell.ihex"/>
</exec>
<copy todir="${dist}" file="${contiki}/examples/collect/collect-view-shell.ihex"/>
</target>
<target name="dist" depends="jar,collect-view-shell.ihex">
<copy todir="${dist}" file="collect-init.script"/>
<mkdir dir="${dist}/tools"/>
<copy todir="${dist}/tools">
<fileset dir="${contiki}/tools/sky"/>
</copy>
<copy file="${contiki}/tools/cygwin/cygwin1.dll" todir="${dist}/tools"/>
<chmod dir="${dist}/tools" perm="a+x" includes="**/*"/>
</target>
<target name="run" depends="dist">
<java fork="yes" dir="${dist}" jar="${dist}/${archive}">
<arg line="${args}"/>
</java>
</target>
<target name="clean">
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
echo ~K
echo killall
sleep 2
echo mac 0
sleep 2
echo time %TIME% | null
/*
* Copyright (c) 2010, 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.
*
*
* -----------------------------------------------------------------
*
* CommandConnection
*
* Authors : Joakim Eriksson, Niclas Finne
* Created : 5 oct 2010
* Updated : $Date: 2010/11/03 14:53:05 $
* $Revision: 1.1 $
*/
package org.contikios.contiki.collect;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
/**
*
*/
public class CommandConnection extends SerialConnection {
protected Process commandProcess;
protected String command;
public CommandConnection(SerialConnectionListener listener) {
super(listener);
}
public CommandConnection(SerialConnectionListener listener, String command) {
super(listener);
this.command = command;
}
@Override
public String getConnectionName() {
return command;
}
public String getCommand() {
return command;
}
public void setCommand(String command) {
this.command = command;
}
@Override
public void open(String comPort) {
close();
this.comPort = comPort == null ? "" : comPort;
String fullCommand = getCommand();
isClosed = false;
try {
String[] cmd = fullCommand.split(" ");
System.err.println("Running '" + fullCommand + '\'');
commandProcess = Runtime.getRuntime().exec(cmd);
final BufferedReader input = new BufferedReader(new InputStreamReader(commandProcess.getInputStream()));
final BufferedReader err = new BufferedReader(new InputStreamReader(commandProcess.getErrorStream()));
setSerialOutput(new PrintWriter(new OutputStreamWriter(commandProcess.getOutputStream())));
/* Start thread listening on standard out */
Thread readInput = new Thread(new Runnable() {
public void run() {
String line;
try {
while ((line = input.readLine()) != null) {
standardData(line);
}
input.close();
System.err.println("SerialConnection command terminated.");
closeConnection();
} catch (IOException e) {
lastError = "Error when reading from SerialConnection command: " + e;
System.err.println(lastError);
if (!isClosed) {
e.printStackTrace();
closeConnection();
}
}
}
}, "read input stream thread");
/* Start thread listening on standard err */
Thread readError = new Thread(new Runnable() {
public void run() {
String line;
try {
while ((line = err.readLine()) != null) {
errorData(line);
}
err.close();
} catch (IOException e) {
if (!isClosed) {
System.err.println("Error when reading from SerialConnection command: " + e);
e.printStackTrace();
}
}
}
}, "read error stream thread");
if (!isOpen) {
isOpen = true;
serialOpened();
}
readInput.start();
readError.start();
} catch (Exception e) {
lastError = "Failed to execute '" + fullCommand + "': " + e;
System.err.println(lastError);
e.printStackTrace();
closeConnection();
}
}
protected void standardData(String line) {
serialData(line);
}
protected void errorData(String line) {
System.err.println("SerialConnection error stream> " + line);
}
@Override
protected void doClose() {
if (commandProcess != null) {
commandProcess.destroy();
commandProcess = null;
}
}
}
/*
* Copyright (c) 2010, 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.
*
*
* -----------------------------------------------------------------
*
* Configurable
*
* Authors : Joakim Eriksson, Niclas Finne
* Created : 24 sep 2010
* Updated : $Date: 2010/11/03 14:53:05 $
* $Revision: 1.1 $
*/
package org.contikios.contiki.collect;
import java.util.Properties;
/**
*
*/
public interface Configurable {
public void updateConfig(Properties config);
}
/*
* Copyright (c) 2008, 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.
*
*
* -----------------------------------------------------------------
*
* Link
*
* Authors : Joakim Eriksson, Niclas Finne
* Created : 3 jul 2008
* Updated : $Date: 2010/11/03 14:53:05 $
* $Revision: 1.1 $
*/
package org.contikios.contiki.collect;
/**
*
*/
public class Link {
public final Node node;
private double etx;
private int quality = 100;
private long lastActive = 0L;
public Link(Node node) {
this.node = node;
this.lastActive = System.currentTimeMillis();
}
public Node getNode() {
return node;
}
public int getQuality() {
return quality;
}
public void setQuality(int quality) {
this.quality = quality;
}
public double getETX() {
return etx;
}
public void setETX(double etx) {
this.etx = etx;
}
public long getLastActive() {
return lastActive;
}
public void setLastActive(long time) {
this.lastActive = time;
}
}
/*
* Copyright (c) 2008, 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.
*
*
* -----------------------------------------------------------------
*
* Motelist
*
* Authors : Joakim Eriksson, Niclas Finne
* Created : 4 jul 2008
* Updated : $Date: 2010/11/03 14:53:05 $
* $Revision: 1.1 $
*/
package org.contikios.contiki.collect;
import java.awt.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
/**
*
*/
public class MoteFinder {
public static final String MOTELIST_WINDOWS = "./tools/motelist-windows.exe";
public static final String MOTELIST_LINUX = "./tools/motelist-linux";
public static final String MOTELIST_MACOS = "./tools/motelist-macos";
private final Pattern motePattern;
private final boolean isWindows;
private final boolean isMacos;
private Process moteListProcess;
// private boolean hasVerifiedProcess;
private ArrayList<String> comList = new ArrayList<String>();
private ArrayList<String> moteList = new ArrayList<String>();
public MoteFinder() {
String osName = System.getProperty("os.name", "").toLowerCase();
isWindows = osName.startsWith("win");
isMacos = osName.startsWith("mac");
motePattern = Pattern.compile("\\s(COM|/dev/[a-zA-Z]+|/dev/tty.usbserial-)(\\d+|[A-Z0-9]+)\\s");
}
public String[] getMotes() throws IOException {
searchForMotes();
return getMoteList();
}
public String[] getComPorts() throws IOException {
searchForMotes();
return getComList();
}
private void searchForMotes() throws IOException {
comList.clear();
moteList.clear();
// hasVerifiedProcess = false;
/* Connect to COM using external serialdump application */
String fullCommand;
if (isWindows) {
fullCommand = MOTELIST_WINDOWS;
} else if (isMacos) {
fullCommand = MOTELIST_MACOS;
} else {
fullCommand = MOTELIST_LINUX;
}
try {
String[] cmd = new String[] { fullCommand };
moteListProcess = Runtime.getRuntime().exec(cmd);
final BufferedReader input = new BufferedReader(new InputStreamReader(moteListProcess.getInputStream()));
final BufferedReader err = new BufferedReader(new InputStreamReader(moteListProcess.getErrorStream()));
/* Start thread listening on stdout */
Thread readInput = new Thread(new Runnable() {
public void run() {
String line;
try {
while ((line = input.readLine()) != null) {
parseIncomingLine(line);
}
input.close();
} catch (IOException e) {
System.err.println("Exception when reading from motelist");
e.printStackTrace();
}
}
}, "read motelist thread");
/* Start thread listening on stderr */
Thread readError = new Thread(new Runnable() {
public void run() {
String line;
try {
while ((line = err.readLine()) != null) {
System.err.println("Motelist error stream> " + line);
}
err.close();
} catch (IOException e) {
System.err.println("Exception when reading from motelist error stream: " + e);
}
}
}, "read motelist error stream thread");
readInput.start();
readError.start();
// Wait for the motelist program to finish executing
readInput.join();
} catch (Exception e) {
throw (IOException) new IOException("Failed to execute '" + fullCommand + "'").initCause(e);
}
}
private String[] getComList() {
return comList.toArray(new String[comList.size()]);
}
private String[] getMoteList() {
return moteList.toArray(new String[moteList.size()]);
}
public void close() {
if (moteListProcess != null) {
moteListProcess.destroy();
moteListProcess = null;
}
}
protected void parseIncomingLine(String line) {
if (line.contains("No devices found") || line.startsWith("Reference")) {
// No Sky connected or title before connected motes
// hasVerifiedProcess = true;
} else if (line.startsWith("-------")) {
// Separator
} else {
Matcher matcher = motePattern.matcher(line);
if (matcher.find()) {
String dev = matcher.group(1);
String no = matcher.group(2);
String comPort = dev + no;
String moteID = comPort;
if (isWindows) {
// Special handling of mote id under Windows
int moteNumber = Integer.parseInt(no);
moteID = Integer.toString(moteNumber - 1);
}
comList.add(comPort);
moteList.add(moteID);
} else {
System.err.println("Motelist> " + line);
}
}