diff --git a/scripts/autorun.sc b/scripts/autorun.sc index 70db1c5..35090e6 100644 --- a/scripts/autorun.sc +++ b/scripts/autorun.sc @@ -11,4 +11,5 @@ #start the nodegui serice service controlgui start service nodegui start +service stackui start start diff --git a/se/sics/mspsim/platform/GenericNode.java b/se/sics/mspsim/platform/GenericNode.java index a52017a..7796522 100644 --- a/se/sics/mspsim/platform/GenericNode.java +++ b/se/sics/mspsim/platform/GenericNode.java @@ -59,6 +59,7 @@ import se.sics.mspsim.core.MSP430Constants; import se.sics.mspsim.extutil.highlight.HighlightSourceViewer; import se.sics.mspsim.ui.ControlUI; import se.sics.mspsim.ui.JFrameWindowManager; +import se.sics.mspsim.ui.StackUI; import se.sics.mspsim.util.ArgumentManager; import se.sics.mspsim.util.ComponentRegistry; import se.sics.mspsim.util.ConfigManager; @@ -146,6 +147,7 @@ public abstract class GenericNode extends Chip implements Runnable { // Setup control and other UI components ControlUI control = new ControlUI(); registry.registerComponent("controlgui", control); + registry.registerComponent("stackui", new StackUI(cpu)); HighlightSourceViewer sourceViewer = new HighlightSourceViewer(); if (firmwareFile != null) { // Add the firmware location to the search path diff --git a/se/sics/mspsim/ui/ControlUI.java b/se/sics/mspsim/ui/ControlUI.java index 4a1f509..6f1927e 100644 --- a/se/sics/mspsim/ui/ControlUI.java +++ b/se/sics/mspsim/ui/ControlUI.java @@ -49,35 +49,29 @@ import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; -import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.KeyStroke; import se.sics.mspsim.core.MSP430; import se.sics.mspsim.core.MSP430Constants; import se.sics.mspsim.core.SimEvent; import se.sics.mspsim.core.SimEventListener; -import se.sics.mspsim.extutil.jfreechart.DataChart; import se.sics.mspsim.platform.GenericNode; import se.sics.mspsim.util.ComponentRegistry; import se.sics.mspsim.util.DebugInfo; import se.sics.mspsim.util.ELF; import se.sics.mspsim.util.ServiceComponent; -import se.sics.mspsim.util.ServiceComponent.Status; public class ControlUI extends JPanel implements ActionListener, SimEventListener, ServiceComponent { private static final long serialVersionUID = -2431892192775232653L; private static final String TITLE = "MSPSim monitor"; - private static final boolean USE_STACKUI = false; private ManagedWindow window; private JButton controlButton; private MSP430 cpu; private GenericNode node; private DebugUI dui; - private JFrame stackWindow; - private StackUI stackUI; private ELF elfData; private SourceViewer sourceViewer; @@ -99,16 +93,6 @@ private String name; this.node = (GenericNode) registry.getComponent("node"); elfData = (ELF) registry.getComponent("elf"); - DataChart test = new DataChart("Stack Monitor", "Bytes"); - test.setupStackFrame(cpu); - if (USE_STACKUI) { - this.stackUI = new StackUI(cpu); - stackWindow = new JFrame("Stack"); - stackWindow.add(this.stackUI); - WindowUtils.restoreWindowBounds("StackUI", stackWindow); - WindowUtils.addSaveOnShutdown("StackUI", stackWindow); - stackWindow.setVisible(true); - } WindowManager wm = (WindowManager) registry.getComponent("windowManager"); window = wm.createWindow("ControlUI"); JPanel jp = new JPanel(); diff --git a/se/sics/mspsim/ui/StackUI.java b/se/sics/mspsim/ui/StackUI.java index b24f9f3..9f3d829 100644 --- a/se/sics/mspsim/ui/StackUI.java +++ b/se/sics/mspsim/ui/StackUI.java @@ -49,9 +49,12 @@ import javax.swing.JPanel; import se.sics.mspsim.core.CPUMonitor; import se.sics.mspsim.core.MSP430; +import se.sics.mspsim.util.ComponentRegistry; import se.sics.mspsim.util.MapTable; +import se.sics.mspsim.util.ServiceComponent; +import se.sics.mspsim.util.ServiceComponent.Status; -public class StackUI extends JPanel implements CPUMonitor { +public class StackUI extends JPanel implements CPUMonitor, ServiceComponent { private static final long serialVersionUID = 8648239617509299768L; @@ -77,6 +80,14 @@ public class StackUI extends JPanel implements CPUMonitor { private boolean update = false; +private Status status; + +private ComponentRegistry registry; + +private ManagedWindow window; + +private String name; + public StackUI(MSP430 cpu) { this(cpu, 2500); } @@ -102,28 +113,36 @@ public class StackUI extends JPanel implements CPUMonitor { // this.stackStartAddress - this.heapStartAddress); // diagram.setShowGrid(true); // add(diagram, BorderLayout.CENTER); - chartPanel = new ChartPanel(); - - ConstantLineChart maxChart = new ConstantLineChart("Max", this.stackStartAddress - this.heapStartAddress); - maxChart.setConfig("color", Color.red); - chartPanel.addChart(maxChart); - - minStackChart = new LineChart("Min Stack"); - minStackChart.setConfig("color", Color.green); - chartPanel.addChart(minStackChart); - - maxStackChart = new LineChart("Max Stack"); - maxStackChart.setConfig("color", Color.green); - chartPanel.addChart(maxStackChart); - chartPanel.setAxisChart(maxStackChart); - - add(chartPanel, BorderLayout.CENTER); - setPreferredSize(new Dimension(320, 200)); } -// public void addNote(String note) { -// notes[pos] = note; -// } + private void setup() { + if (chartPanel != null) return; + chartPanel = new ChartPanel(); + + ConstantLineChart maxChart = new ConstantLineChart("Max", this.stackStartAddress - this.heapStartAddress); + maxChart.setConfig("color", Color.red); + chartPanel.addChart(maxChart); + + minStackChart = new LineChart("Min Stack"); + minStackChart.setConfig("color", Color.green); + chartPanel.addChart(minStackChart); + + maxStackChart = new LineChart("Max Stack"); + maxStackChart.setConfig("color", Color.green); + chartPanel.addChart(maxStackChart); + chartPanel.setAxisChart(maxStackChart); + + add(chartPanel, BorderLayout.CENTER); + setPreferredSize(new Dimension(320, 200)); + setSize(320, 200); + setMinimumSize(new Dimension(320, 200)); + + WindowManager wm = (WindowManager) registry.getComponent("windowManager"); + if (wm != null) { + window = wm.createWindow("stackui"); + window.add(this); + } + } public void paint(Graphics g) { if (update) { @@ -174,4 +193,28 @@ public class StackUI extends JPanel implements CPUMonitor { } } +public Status getStatus() { + return status; +} + +public void init(String name, ComponentRegistry registry) { + this.registry = registry; + this.name = name; +} + +public String getName() { + return name; +} + +public void start() { + setup(); + status = Status.STARTED; + window.setVisible(true); +} + +public void stop() { + status = Status.STOPPED; + window.setVisible(false); +} + }