diff --git a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/ESBMote.java b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/ESBMote.java index 5966532c2..24ecd1edf 100644 --- a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/ESBMote.java +++ b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/ESBMote.java @@ -26,18 +26,16 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ESBMote.java,v 1.6 2009/02/18 11:50:11 fros4943 Exp $ + * $Id: ESBMote.java,v 1.7 2009/03/09 17:12:27 fros4943 Exp $ */ package se.sics.cooja.mspmote; import java.io.File; -import java.util.Random; import org.apache.log4j.Logger; import se.sics.cooja.MoteInterfaceHandler; import se.sics.cooja.Simulation; import se.sics.cooja.interfaces.*; -import se.sics.cooja.mspmote.interfaces.*; import se.sics.mspsim.platform.esb.ESBNode; /** @@ -69,37 +67,19 @@ public class ESBMote extends MspMote { } protected MoteInterfaceHandler createMoteInterfaceHandler() { - MoteInterfaceHandler moteInterfaceHandler = new MoteInterfaceHandler(); + /* Uses current mote type configuration */ + MoteInterfaceHandler moteInterfaceHandler = + super.createMoteInterfaceHandler(); - // Add position interface - Position motePosition = new Position(this); - Random random = new Random(); /* Do not use main random generator for positioning */ - motePosition.setCoordinates(random.nextDouble()*100, random.nextDouble()*100, random.nextDouble()*100); - moteInterfaceHandler.addInterface(motePosition); - - // Add log interface - Log moteLog = new ESBLog(this); - moteInterfaceHandler.addInterface(moteLog); - - // Add time interface - Clock moteClock = new MspClock(this); - moteInterfaceHandler.addInterface(moteClock); - - // Add led interface - LED moteLed = new ESBLED(this); - moteInterfaceHandler.addInterface(moteLed); - - // Add button interface - Button moteButton = new ESBButton(this); - moteInterfaceHandler.addInterface(moteButton); - - // Add ID interface - MoteID moteID = new MspMoteID(this); - moteInterfaceHandler.addInterface(moteID); - - // Add radio interface - myRadio = new TR1001Radio(this); - moteInterfaceHandler.addInterface(myRadio); + /* TODO check if uIP is used, remove IPv4 interface otherwise */ +// moteInterfaceHandler.getIPAddress() +// try { +// if (((MspMoteMemory)this.getMemory()).getVariableAddress("uip_hostaddr") != 0) { +// IPAddress ip = new MspIPAddress(this); +// moteInterfaceHandler.addInterface(ip); +// } +// } catch (UnknownVariableException e) { +// } return moteInterfaceHandler; } diff --git a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMote.java b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMote.java index a76311f58..ad6ecb940 100644 --- a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMote.java +++ b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMote.java @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: MspMote.java,v 1.21 2009/03/09 16:01:29 fros4943 Exp $ + * $Id: MspMote.java,v 1.22 2009/03/09 17:12:27 fros4943 Exp $ */ package se.sics.cooja.mspmote; @@ -117,6 +117,10 @@ public abstract class MspMote implements Mote { } } + protected MoteInterfaceHandler createMoteInterfaceHandler() { + return new MoteInterfaceHandler(this, getType().getMoteInterfaceClasses()); + } + public void sendCLICommand(String line) { if (commandHandler != null) { commandHandler.lineRead(line); @@ -283,13 +287,6 @@ public abstract class MspMote implements Mote { myMoteInterfaceHandler = moteInterfaceHandler; } - /** - * Creates an interface handler object and registers interfaces to it. - * - * @return Interface handler - */ - protected abstract MoteInterfaceHandler createMoteInterfaceHandler(); - /** * Initializes emulator by creating CPU, memory and node object. * diff --git a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMoteType.java b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMoteType.java index 463a18321..c423ea12b 100644 --- a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMoteType.java +++ b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMoteType.java @@ -26,13 +26,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: MspMoteType.java,v 1.25 2009/03/09 16:00:16 fros4943 Exp $ + * $Id: MspMoteType.java,v 1.26 2009/03/09 17:12:27 fros4943 Exp $ */ package se.sics.cooja.mspmote; import java.awt.*; import java.io.*; +import java.util.ArrayList; import java.util.Collection; import java.util.Vector; import javax.swing.*; @@ -227,12 +228,20 @@ public abstract class MspMoteType implements MoteType { element.setText(fileFirmware.getPath().replaceAll("\\\\", "/")); config.add(element); + // Mote interfaces + for (Class moteInterface : getMoteInterfaceClasses()) { + element = new Element("moteinterface"); + element.setText(moteInterface.getName()); + config.add(element); + } + return config; } public boolean setConfigXML(Simulation simulation, Collection configXML, boolean visAvailable) throws MoteTypeCreationException { + ArrayList> intfClassList = new ArrayList>(); for (Element element : configXML) { String name = element.getName(); @@ -249,6 +258,15 @@ public abstract class MspMoteType implements MoteType { } else if (name.equals("elf")) { /* Backwards compatibility: elf is now firmware */ fileFirmware = new File(element.getText()); + } else if (name.equals("moteinterface")) { + Class moteInterfaceClass = + simulation.getGUI().tryLoadClass(this, MoteInterface.class, element.getText().trim()); + + if (moteInterfaceClass == null) { + logger.warn("Can't find mote interface class: " + element.getText()); + } else { + intfClassList.add(moteInterfaceClass); + } } else { logger.fatal("Unrecognized entry in loaded configuration: " + name); throw new MoteTypeCreationException( @@ -256,6 +274,10 @@ public abstract class MspMoteType implements MoteType { } } + Class[] intfClasses = new Class[intfClassList.size()]; + intfClassList.toArray(intfClasses); + setMoteInterfaceClasses(intfClasses); + return configureAndInit(GUI.getTopParentContainer(), simulation, visAvailable); } } diff --git a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/SkyMote.java b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/SkyMote.java index c5ca127d7..03945c4ab 100644 --- a/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/SkyMote.java +++ b/tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/SkyMote.java @@ -26,19 +26,16 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: SkyMote.java,v 1.12 2009/02/26 13:48:08 fros4943 Exp $ + * $Id: SkyMote.java,v 1.13 2009/03/09 17:12:27 fros4943 Exp $ */ package se.sics.cooja.mspmote; import java.io.File; -import java.util.Random; import org.apache.log4j.Logger; import se.sics.cooja.MoteInterfaceHandler; import se.sics.cooja.Simulation; -import se.sics.cooja.AddressMemory.UnknownVariableException; import se.sics.cooja.interfaces.*; -import se.sics.cooja.mspmote.interfaces.*; import se.sics.mspsim.platform.sky.SkyNode; /** @@ -70,56 +67,19 @@ public class SkyMote extends MspMote { } protected MoteInterfaceHandler createMoteInterfaceHandler() { - MoteInterfaceHandler moteInterfaceHandler = new MoteInterfaceHandler(); + /* Uses current mote type configuration */ + MoteInterfaceHandler moteInterfaceHandler = + super.createMoteInterfaceHandler(); - // Add position interface - Position motePosition = new Position(this); - Random random = new Random(); /* Do not use main random generator for positioning */ - motePosition.setCoordinates(random.nextDouble()*100, random.nextDouble()*100, random.nextDouble()*100); - moteInterfaceHandler.addInterface(motePosition); - - // Add time interface - Clock moteClock = new MspClock(this); - moteInterfaceHandler.addInterface(moteClock); - - // Add button interface - Button moteButton = new SkyButton(this); - moteInterfaceHandler.addInterface(moteButton); - - // Add Flash interface - SkyFlash moteFlash = new SkyFlash(this); - moteInterfaceHandler.addInterface(moteFlash); - - // Add ID interface - MoteID moteID = new MspMoteID(this); - moteInterfaceHandler.addInterface(moteID); - - // Add radio interface -// SkyRadio moteRadio = new SkyRadio(this); -// moteInterfaceHandler.addActiveInterface(moteRadio); - SkyByteRadio moteRadio = new SkyByteRadio(this); - moteInterfaceHandler.addInterface(moteRadio); - - // Add serial interface - SkySerial moteSerial = new SkySerial(this); - moteInterfaceHandler.addInterface(moteSerial); - - // Add LED interface - SkyLED moteLED = new SkyLED(this); - moteInterfaceHandler.addInterface(moteLED); - - /* IP Address (if uIP is used) */ - try { - if (((MspMoteMemory)this.getMemory()).getVariableAddress("uip_hostaddr") != 0) { - IPAddress ip = new MspIPAddress(this); - moteInterfaceHandler.addInterface(ip); - } - } catch (UnknownVariableException e) { - } - - /* Mote relation listener */ - Mote2MoteRelations mote2moteRelation = new Mote2MoteRelations(this); - moteInterfaceHandler.addInterface(mote2moteRelation); + /* TODO check if uIP is used, remove IPv4 interface otherwise */ +// moteInterfaceHandler.getIPAddress() +// try { +// if (((MspMoteMemory)this.getMemory()).getVariableAddress("uip_hostaddr") != 0) { +// IPAddress ip = new MspIPAddress(this); +// moteInterfaceHandler.addInterface(ip); +// } +// } catch (UnknownVariableException e) { +// } return moteInterfaceHandler; }