Skip to content

Commit

Permalink
added a set of new mspsim-based mote types using CC1120, CC1101 and t…
Browse files Browse the repository at this point in the history
…he Enc28j60 ethernet chip

minor changes: removed some obsolete stack monitoring code, improved mspsim-cooja window handler
integration
  • Loading branch information
fros4943 committed Aug 15, 2013
1 parent ba39d98 commit 9265515
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 54 deletions.
2 changes: 1 addition & 1 deletion tools/cooja/apps/mspsim/cooja.config
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
se.sics.cooja.GUI.MOTETYPES = + se.sics.cooja.mspmote.ESBMoteType se.sics.cooja.mspmote.SkyMoteType se.sics.cooja.mspmote.Z1MoteType se.sics.cooja.mspmote.WismoteMoteType se.sics.cooja.mspmote.Exp5438MoteType
se.sics.cooja.GUI.MOTETYPES = + se.sics.cooja.mspmote.ESBMoteType se.sics.cooja.mspmote.SkyMoteType se.sics.cooja.mspmote.Z1MoteType se.sics.cooja.mspmote.WismoteMoteType se.sics.cooja.mspmote.Exp5438MoteType se.sics.cooja.mspmote.SkyMoteType com.thingsquare.cooja.mspsim.CC430MoteType com.thingsquare.cooja.mspsim.Exp1120MoteType com.thingsquare.cooja.mspsim.Exp1101MoteType com.thingsquare.cooja.mspsim.Exp2420MoteType com.thingsquare.cooja.mspsim.Trxeb2520MoteType com.thingsquare.cooja.mspsim.Trxeb1120MoteType com.thingsquare.cooja.mspsim.Eth1120MoteType
se.sics.cooja.GUI.JARFILES = + cooja_mspsim.jar mspsim.jar coffee.jar jipv6.jar
se.sics.cooja.GUI.PLUGINS = + se.sics.cooja.mspmote.plugins.MspCLI se.sics.cooja.mspmote.plugins.MspCodeWatcher se.sics.cooja.mspmote.plugins.MspStackWatcher se.sics.cooja.mspmote.plugins.MspCycleWatcher
37 changes: 33 additions & 4 deletions tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/Exp5438Mote.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,23 +34,52 @@
import org.apache.log4j.Logger;

import se.sics.cooja.Simulation;
import se.sics.mspsim.platform.GenericNode;
import se.sics.mspsim.platform.ti.Exp1101Node;
import se.sics.mspsim.platform.ti.Exp1120Node;
import se.sics.mspsim.platform.ti.Exp5438Node;
import se.sics.mspsim.platform.ti.Trxeb1120Node;
import se.sics.mspsim.platform.ti.Trxeb2520Node;

/**
* @author Fredrik Osterlind
*/
public class Exp5438Mote extends MspMote {
private static Logger logger = Logger.getLogger(Exp5438Mote.class);

public Exp5438Node exp5438Node = null;

public GenericNode exp5438Node = null;
private String desc = "";

public Exp5438Mote(MspMoteType moteType, Simulation sim) {
super(moteType, sim);
}

protected boolean initEmulator(File fileELF) {
/* Hack: Try to figure out what type of Mspsim-node we should be used by checking file extension */
String filename = fileELF.getName();
if (filename.endsWith(".exp1101")) {
exp5438Node = new Exp1101Node();
desc = "Exp5438+CC1101";
} else if (filename.endsWith(".exp1120")) {
exp5438Node = new Exp1120Node();
desc = "Exp5438+CC1120";
} else if (filename.endsWith(".trxeb2520")) {
exp5438Node = new Trxeb2520Node();
desc = "Trxeb2520";
} else if (filename.endsWith(".trxeb1120")) {
exp5438Node = new Trxeb1120Node(false);
desc = "Trxeb1120";
} else if (filename.endsWith(".eth1120")) {
exp5438Node = new Trxeb1120Node(true);
desc = "Eth1120";
} else if (filename.endsWith(".exp2420") || filename.endsWith(".exp5438")) {
exp5438Node = new Exp5438Node();
desc = "Exp5438+CC2420";
} else {
throw new IllegalStateException("unknown file extension, cannot figure out what Mspsim node type to use: " + filename);
}

try {
exp5438Node = new Exp5438Node();
registry = exp5438Node.getRegistry();
prepareMote(fileELF, exp5438Node);
} catch (Exception e) {
Expand All @@ -64,7 +93,7 @@ public void idUpdated(int newID) {
}

public String toString() {
return "Exp5438 " + getID();
return desc + " " + getID();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@
import se.sics.cooja.mspmote.interfaces.MspMoteID;
import se.sics.cooja.mspmote.interfaces.UsciA1Serial;

import com.thingsquare.cooja.mspsim.CC1101Radio;
import com.thingsquare.cooja.mspsim.CC1120Radio;

@ClassDescription("EXP430F5438 mote")
@AbstractionLevelDescription("Emulated level")
public class Exp5438MoteType extends MspMoteType {
Expand Down
95 changes: 46 additions & 49 deletions tools/cooja/apps/mspsim/src/se/sics/cooja/mspmote/MspMote.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@

package se.sics.cooja.mspmote;

import java.awt.Component;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Observable;

import org.apache.log4j.Logger;
import org.jdom.Element;
Expand All @@ -53,8 +53,8 @@
import se.sics.cooja.WatchpointMote;
import se.sics.cooja.interfaces.IPAddress;
import se.sics.cooja.motes.AbstractEmulatedMote;
import se.sics.cooja.mspmote.interfaces.MspSerial;
import se.sics.cooja.mspmote.interfaces.Msp802154Radio;
import se.sics.cooja.mspmote.interfaces.MspSerial;
import se.sics.cooja.mspmote.plugins.CodeVisualizerSkin;
import se.sics.cooja.mspmote.plugins.MspBreakpoint;
import se.sics.cooja.plugins.Visualizer;
Expand All @@ -65,7 +65,8 @@
import se.sics.mspsim.core.EmulationException;
import se.sics.mspsim.core.MSP430;
import se.sics.mspsim.platform.GenericNode;
import se.sics.mspsim.ui.JFrameWindowManager;
import se.sics.mspsim.ui.ManagedWindow;
import se.sics.mspsim.ui.WindowManager;
import se.sics.mspsim.util.ComponentRegistry;
import se.sics.mspsim.util.ConfigManager;
import se.sics.mspsim.util.DebugInfo;
Expand Down Expand Up @@ -95,10 +96,8 @@ public abstract class MspMote extends AbstractEmulatedMote implements Mote, Watc

/* Stack monitoring variables */
private boolean stopNextInstruction = false;
private boolean monitorStackUsage = false;
private int stackPointerLow = Integer.MAX_VALUE;
private int heapStartAddress;
private StackOverflowObservable stackOverflowObservable = new StackOverflowObservable();

public GenericNode mspNode = null;

public MspMote(MspMoteType moteType, Simulation simulation) {
this.simulation = simulation;
Expand All @@ -113,8 +112,43 @@ protected void initMote() {
initEmulator(myMoteType.getContikiFirmwareFile());
myMoteInterfaceHandler = createMoteInterfaceHandler();

/* TODO Setup COOJA-specific window manager */
registry.registerComponent("windowManager", new JFrameWindowManager());
/* TODO Create COOJA-specific window manager */
registry.removeComponent("windowManager");
registry.registerComponent("windowManager", new WindowManager() {
public ManagedWindow createWindow(String name) {
return new ManagedWindow() {
public void setVisible(boolean b) {
logger.warn("setVisible() ignored");
}
public void setTitle(String string) {
logger.warn("setTitle() ignored");
}
public void setSize(int width, int height) {
logger.warn("setSize() ignored");
}
public void setBounds(int x, int y, int width, int height) {
logger.warn("setBounds() ignored");
}
public void removeAll() {
logger.warn("removeAll() ignored");
}
public void pack() {
logger.warn("pack() ignored");
}
public boolean isVisible() {
logger.warn("isVisible() return false");
return false;
}
public String getTitle() {
logger.warn("getTitle() return \"\"");
return "";
}
public void add(Component component) {
logger.warn("add() ignored");
}
};
}
});

try {
debuggingInfo = ((MspMoteType)getType()).getFirmwareDebugInfo();
Expand Down Expand Up @@ -156,45 +190,6 @@ public void setMemory(MoteMemory memory) {
myMemory = (MspMoteMemory) memory;
}

/* Stack monitoring variables */
public class StackOverflowObservable extends Observable {
public void signalStackOverflow() {
setChanged();
notifyObservers();
}
}

/**
* Enable/disable stack monitoring
*
* @param monitoring Monitoring enabled
*/
public void monitorStack(boolean monitoring) {
this.monitorStackUsage = monitoring;
resetLowestStackPointer();
}

/**
* @return Lowest SP since stack monitoring was enabled
*/
public int getLowestStackPointer() {
return stackPointerLow;
}

/**
* Resets lowest stack pointer variable
*/
public void resetLowestStackPointer() {
stackPointerLow = Integer.MAX_VALUE;
}

/**
* @return Stack overflow observable
*/
public StackOverflowObservable getStackOverflowObservable() {
return stackOverflowObservable;
}

/**
* Prepares CPU, memory and ELF module.
*
Expand All @@ -204,6 +199,9 @@ public StackOverflowObservable getStackOverflowObservable() {
*/
protected void prepareMote(File fileELF, GenericNode node) throws IOException {
this.commandHandler = new CommandHandler(System.out, System.err);

this.mspNode = node;

node.setCommandHandler(commandHandler);

ConfigManager config = new ConfigManager();
Expand All @@ -225,7 +223,6 @@ protected void prepareMote(File fileELF, GenericNode node) throws IOException {
MapEntry[] allEntries = map.getAllEntries();
myMemory = new MspMoteMemory(this, allEntries, myCpu);

heapStartAddress = map.heapStartAddress;
myCpu.reset();
}

Expand Down

0 comments on commit 9265515

Please sign in to comment.