From: <jo...@us...> - 2009-09-07 14:37:20
|
Revision: 586 http://mspsim.svn.sourceforge.net/mspsim/?rev=586&view=rev Author: joxe Date: 2009-09-07 14:37:06 +0000 (Mon, 07 Sep 2009) Log Message: ----------- added possibility to install plugins Modified Paths: -------------- mspsim/se/sics/mspsim/cli/CommandHandler.java mspsim/se/sics/mspsim/cli/MiscCommands.java mspsim/se/sics/mspsim/core/MSP430.java mspsim/se/sics/mspsim/core/MSP430Core.java mspsim/se/sics/mspsim/platform/GenericNode.java mspsim/se/sics/mspsim/util/ActiveComponent.java mspsim/se/sics/mspsim/util/ComponentRegistry.java mspsim/se/sics/mspsim/util/IHexReader.java mspsim/se/sics/mspsim/util/Test.java Modified: mspsim/se/sics/mspsim/cli/CommandHandler.java =================================================================== --- mspsim/se/sics/mspsim/cli/CommandHandler.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/cli/CommandHandler.java 2009-09-07 14:37:06 UTC (rev 586) @@ -166,7 +166,7 @@ return cmds; } - public void setComponentRegistry(ComponentRegistry registry) { + public void init(String name, ComponentRegistry registry) { this.registry = registry; } Modified: mspsim/se/sics/mspsim/cli/MiscCommands.java =================================================================== --- mspsim/se/sics/mspsim/cli/MiscCommands.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/cli/MiscCommands.java 2009-09-07 14:37:06 UTC (rev 586) @@ -54,6 +54,7 @@ import se.sics.mspsim.core.Chip; import se.sics.mspsim.core.MSP430; import se.sics.mspsim.core.TimeEvent; +import se.sics.mspsim.util.ActiveComponent; import se.sics.mspsim.util.ComponentRegistry; import se.sics.mspsim.util.Utils; @@ -307,6 +308,28 @@ context.executeCommand(command); } }); + + handler.registerCommand("install", new BasicCommand("install and start a plugin", "ClassName") { + @Override + public int executeCommand(CommandContext context) { + String className = context.getArgument(0); + Class pluginClass = null; + try { + try { + pluginClass = Class.forName(className); + } catch (ClassNotFoundException e) { + pluginClass = Class.forName("se.sics.mspsim.plugin." + className); + } + ActiveComponent component = (ActiveComponent) pluginClass.newInstance(); + registry.registerComponent(className, component); + return 0; + } catch (Exception e1) { // TODO Auto-generated catch block + e1.printStackTrace(context.err); + } + // TODO Auto-generated method stub + return 1; + } + }); handler.registerCommand("rflistener", new BasicLineCommand("an rflisteer", "[input|output] <rf-chip>") { CommandContext context; Modified: mspsim/se/sics/mspsim/core/MSP430.java =================================================================== --- mspsim/se/sics/mspsim/core/MSP430.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/core/MSP430.java 2009-09-07 14:37:06 UTC (rev 586) @@ -74,8 +74,8 @@ * Creates a new <code>MSP430</code> instance. * */ - public MSP430(int type) { - super(type); + public MSP430(int type, ComponentRegistry registry) { + super(type, registry); disAsm = new DisAsm(); addChip(this); } Modified: mspsim/se/sics/mspsim/core/MSP430Core.java =================================================================== --- mspsim/se/sics/mspsim/core/MSP430Core.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/core/MSP430Core.java 2009-09-07 14:37:06 UTC (rev 586) @@ -43,6 +43,7 @@ import java.io.PrintStream; import java.util.ArrayList; +import se.sics.mspsim.util.ComponentRegistry; import se.sics.mspsim.util.MapEntry; import se.sics.mspsim.util.MapTable; import se.sics.mspsim.util.Utils; @@ -126,12 +127,14 @@ private BasicClockModule bcs; private ArrayList<Chip> chips = new ArrayList<Chip>(); + ComponentRegistry registry; Profiler profiler; private Flash flash; - public MSP430Core(int type) { + public MSP430Core(int type, ComponentRegistry registry) { // Ignore type for now... setModeNames(MODE_NAMES); + this.registry = registry; int passIO = 0; // IOUnits should likely be placed in a hashtable? // Maybe for debugging purposes... @@ -258,7 +261,9 @@ } public void setProfiler(Profiler prof) { + registry.registerComponent("profiler", prof); profiler = prof; + profiler.setCPU(this); } /* returns port 1 ... 6 */ Modified: mspsim/se/sics/mspsim/platform/GenericNode.java =================================================================== --- mspsim/se/sics/mspsim/platform/GenericNode.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/platform/GenericNode.java 2009-09-07 14:37:06 UTC (rev 586) @@ -74,7 +74,7 @@ protected ConfigManager config; protected ComponentRegistry registry = new ComponentRegistry(); - protected MSP430 cpu = new MSP430(0); + protected MSP430 cpu = new MSP430(0, registry); protected String firmwareFile = null; protected ELF elf; protected OperatingModeStatistics stats; Modified: mspsim/se/sics/mspsim/util/ActiveComponent.java =================================================================== --- mspsim/se/sics/mspsim/util/ActiveComponent.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/util/ActiveComponent.java 2009-09-07 14:37:06 UTC (rev 586) @@ -1,6 +1,6 @@ package se.sics.mspsim.util; public interface ActiveComponent { - public void setComponentRegistry(ComponentRegistry registry); + public void init(String name, ComponentRegistry registry); public void start(); } Modified: mspsim/se/sics/mspsim/util/ComponentRegistry.java =================================================================== --- mspsim/se/sics/mspsim/util/ComponentRegistry.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/util/ComponentRegistry.java 2009-09-07 14:37:06 UTC (rev 586) @@ -4,13 +4,17 @@ public class ComponentRegistry { private ArrayList<ComponentEntry> components = new ArrayList<ComponentEntry>(); + private boolean running = false; public void registerComponent(String name, Object component) { synchronized (components) { components.add(new ComponentEntry(name, component)); } if (component instanceof ActiveComponent) { - ((ActiveComponent)component).setComponentRegistry(this); + ((ActiveComponent)component).init(name, this); + if (running) { + ((ActiveComponent)component).start(); + } } } @@ -59,6 +63,7 @@ public void start() { ComponentEntry[] plugs; synchronized (this) { + running = true; plugs = components.toArray(new ComponentEntry[components.size()]); } for (int i = 0; i < plugs.length; i++) { Modified: mspsim/se/sics/mspsim/util/IHexReader.java =================================================================== --- mspsim/se/sics/mspsim/util/IHexReader.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/util/IHexReader.java 2009-09-07 14:37:06 UTC (rev 586) @@ -138,7 +138,7 @@ // System.out.println("T ^ T => " + (true ^ true) + // " T ^ F => " + (false ^ true)); - MSP430 cpu = new MSP430(0); + MSP430 cpu = new MSP430(0, new ComponentRegistry()); int[] memory = cpu.getMemory(); reader.readFile(memory, args[0]); cpu.reset(); Modified: mspsim/se/sics/mspsim/util/Test.java =================================================================== --- mspsim/se/sics/mspsim/util/Test.java 2009-09-07 13:36:35 UTC (rev 585) +++ mspsim/se/sics/mspsim/util/Test.java 2009-09-07 14:37:06 UTC (rev 586) @@ -83,7 +83,7 @@ } public static void main(String[] args) { - MSP430 cpu = new MSP430(0); + MSP430 cpu = new MSP430(0, new ComponentRegistry()); int index = 0; if (args[index].startsWith("-")) { // Flag This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |