From 47da035f38f9c322db4b46135b4a15278672be23 Mon Sep 17 00:00:00 2001 From: fros4943 Date: Wed, 11 Mar 2009 18:42:53 +0000 Subject: [PATCH] added simulation config backwards compatibility for contiki mote types: may not work for configurations with several compiled sources --- .../cooja/contikimote/ContikiMoteType.java | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/tools/cooja/java/se/sics/cooja/contikimote/ContikiMoteType.java b/tools/cooja/java/se/sics/cooja/contikimote/ContikiMoteType.java index 06743d73c..9cbdbe0a7 100644 --- a/tools/cooja/java/se/sics/cooja/contikimote/ContikiMoteType.java +++ b/tools/cooja/java/se/sics/cooja/contikimote/ContikiMoteType.java @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ContikiMoteType.java,v 1.31 2009/03/11 11:54:19 fros4943 Exp $ + * $Id: ContikiMoteType.java,v 1.32 2009/03/11 18:42:53 fros4943 Exp $ */ package se.sics.cooja.contikimote; @@ -1274,6 +1274,9 @@ public class ContikiMoteType implements MoteType { public boolean setConfigXML(Simulation simulation, Collection configXML, boolean visAvailable) throws MoteTypeCreationException { + boolean warnedOldVersion = false; + File oldVersionSource = null; + moteInterfacesClasses = new ArrayList>(); this.simulation = simulation; @@ -1309,6 +1312,29 @@ public class ContikiMoteType implements MoteType { } else { moteInterfacesClasses.add(moteInterfaceClass); } + } else if ( + name.equals("contikibasedir") || + name.equals("contikicoredir") || + name.equals("projectdir") || + name.equals("compilefile") || + name.equals("process") || + name.equals("sensor") || + name.equals("coreinterface")) { + /* Backwards compatibility: old contiki mote type is being loaded */ + if (!warnedOldVersion) { + warnedOldVersion = true; + logger.warn("Old simulation config detected: contiki mote types may not load correctly"); + } + + if (name.equals("compilefile")) { + if (element.getText().endsWith(".c")) { + File potentialFile = new File(element.getText()); + if (potentialFile.exists()) { + oldVersionSource = potentialFile; + } + } + } + } else { logger.fatal("Unrecognized entry in loaded configuration: " + name); } @@ -1320,6 +1346,25 @@ public class ContikiMoteType implements MoteType { moteInterfacesClasses.toArray(arr); setCoreInterfaces(ContikiMoteType.getRequiredCoreInterfaces(arr)); + /* Backwards compatibility: old contiki mote type is being loaded */ + if (getContikiSourceFile() == null && + warnedOldVersion && + oldVersionSource != null) + { + /* Guess Contiki source */ + setContikiSourceFile(oldVersionSource); + logger.info("Guessing Contiki source: " + oldVersionSource.getAbsolutePath()); + + setContikiFirmwareFile(getExpectedFirmwareFile(oldVersionSource)); + logger.info("Guessing Contiki firmware: " + getContikiFirmwareFile().getAbsolutePath()); + + /* Guess compile commands */ + String compileCommands = + "make " + getExpectedFirmwareFile(oldVersionSource).getName() + " TARGET=cooja"; + logger.info("Guessing compile commands: " + compileCommands); + setCompileCommands(compileCommands); + } + boolean createdOK = configureAndInit(GUI.getTopParentContainer(), simulation, visAvailable); return createdOK; }