From 4310011f0ef0f3b5900e489e4c9cd26d0bad2db1 Mon Sep 17 00:00:00 2001 From: Paul Martin Date: Mon, 14 Apr 2025 15:12:02 +0200 Subject: [PATCH 1/2] Working Component Management --- .../fabrik/simulator/pic16f84/Commands.java | 3 +- .../pic16f84/Controller_Frontend.java | 46 ++++++------------ .../simulator/pic16f84/CreateWindow.java | 29 ++++++++--- .../simulator/pic16f84/DataRegister.java | 4 +- .../fabrik/simulator/pic16f84/EEPROM.java | 13 ++--- .../fabrik/simulator/pic16f84/IOPorts.java | 4 +- .../fabrik/simulator/pic16f84/Interrupts.java | 12 ++--- .../simulator/pic16f84/PICComponent.java | 17 +++++-- .../simulator/pic16f84/PICComponents.java | 4 +- .../fabrik/simulator/pic16f84/PreScaler.java | 21 ++++---- .../simulator/pic16f84/ProgramStack.java | 4 +- .../java/fabrik/simulator/pic16f84/Table.java | 48 ++++++++----------- .../java/fabrik/simulator/pic16f84/Timer.java | 15 ++---- .../pic16f84/ToggleButtonGroupExt.java | 20 ++++---- .../pic16f84/TryComponentManagement.java | 18 ------- .../simulator/pic16f84/WatchdogTimer.java | 25 ++-------- .../interfaces/PreScalerInterface.java | 15 ++++++ .../pic16f84/interfaces/TableInterface.java | 4 +- .../interfaces/ToggleButtonInterface.java | 4 +- .../fabrik/simulator/pic16f84/frontend.fxml | 2 +- 20 files changed, 138 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/fabrik/simulator/pic16f84/TryComponentManagement.java create mode 100644 src/main/java/fabrik/simulator/pic16f84/interfaces/PreScalerInterface.java diff --git a/src/main/java/fabrik/simulator/pic16f84/Commands.java b/src/main/java/fabrik/simulator/pic16f84/Commands.java index 49edeb0..8116fde 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Commands.java +++ b/src/main/java/fabrik/simulator/pic16f84/Commands.java @@ -559,6 +559,7 @@ public class Commands extends PICComponent implements CommandInterface { @Override public void initialize(PICComponents picComponents) { - + System.out.println("Commands"); + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java index 260bb47..587b4a2 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java +++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java @@ -37,12 +37,12 @@ import java.util.Set; import static java.lang.Math.max; -public class Controller_Frontend implements FrontendControllerInterface { +public class Controller_Frontend extends PICComponent implements FrontendControllerInterface { private int [] prog; private int [][] read; private int [] ind; - + private PICComponents picComponents; private double executionTimeMultiplier = 1; @@ -83,30 +83,10 @@ public class Controller_Frontend implements FrontendControllerInterface { private static volatile boolean isAutoRunActive = false; private static volatile boolean isSleeping = false; - private final CommandInterface commands; - private final WatchdogTimerInterface watchdogTimer; - private final ProgramStackInterface programStack; - private final WindowManagement createWindow; - private final TableInterface table; - private final DataRegisterInterface dataRegister; - private final IOPortInterface ioPorts; - private final ToggleButtonInterface toggleButtonExt; - private final ParseFile fileParser; - - public Controller_Frontend(CommandInterface commands, WatchdogTimerInterface watchdogTimer, - ProgramStackInterface programStack, WindowManagement createWindow, TableInterface table, - DataRegisterInterface dataRegister, IOPortInterface ioPorts, ToggleButtonInterface toggleButtons, - ParseFile fileParser) { - this.commands = commands; - this.watchdogTimer = watchdogTimer; - this.programStack = programStack; - this.createWindow = createWindow; - this.table = table; - this.dataRegister = dataRegister; - this.ioPorts = ioPorts; - this.toggleButtonExt = toggleButtons; - this.fileParser = fileParser; + public Controller_Frontend() { + super(); + System.out.println(this); } @@ -258,8 +238,8 @@ public class Controller_Frontend implements FrontendControllerInterface { commands.decode(0); } watchdogTimer.testAndTrigger(); - table.refresh(); - createWindow.refreshTable(); + Table.refresh(); + CreateWindow.refreshTable(); ioPorts.refreshUI(getTRISbuttons(), getPORTbuttons()); updateStack(); updateWatchdog(); @@ -303,6 +283,8 @@ public class Controller_Frontend implements FrontendControllerInterface { stopAutoRun(null); if(selectedFile != null){ String fileAddress = selectedFile.getAbsolutePath(); + System.out.println(dataRegister); + if (null == dataRegister) dataRegister = (DataRegisterInterface) picComponents.getComponent(DataRegisterInterface.class); dataRegister.initDataRegister(); dataRegister.resetPC(); toggleLEDs(null); @@ -322,7 +304,7 @@ public class Controller_Frontend implements FrontendControllerInterface { commands.resetTotalExecutionTime(); watchdogTimer.reset(); wdtCheck.setSelected(false); - table.refresh(); + Table.refresh(); read = ParseFile.parseDatei(fileAddress); prog = read [0]; ind = read[1]; @@ -491,8 +473,8 @@ public class Controller_Frontend implements FrontendControllerInterface { allPORTButtons[i].getToggles().get(0).setSelected(true); allTRISButtons[i].getToggles().get(1).setSelected(false); allPORTButtons[i].getToggles().get(1).setSelected(false); - toggleButtonExt.get().addAlwaysOneSelectedSupport(allTRISButtons[i]); - toggleButtonExt.get().addAlwaysOneSelectedSupport(allPORTButtons[i]); + toggleButtonExt.addAlwaysOneSelectedSupport(allTRISButtons[i]); + toggleButtonExt.addAlwaysOneSelectedSupport(allPORTButtons[i]); } ledCheckA.setSelected(false); @@ -601,7 +583,9 @@ public class Controller_Frontend implements FrontendControllerInterface { @Override public void initialize(PICComponents picComponents) { - + super.initialize(picComponents); + this.picComponents = picComponents; + System.out.println("Frontend"); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java b/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java index fec424e..c8263e3 100644 --- a/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java +++ b/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java @@ -1,11 +1,14 @@ package fabrik.simulator.pic16f84; +import fabrik.simulator.pic16f84.interfaces.*; import javafx.application.Application; import javafx.fxml.FXMLLoader; +import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.Tab; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -14,18 +17,30 @@ import java.io.IOException; import java.util.Objects; public class CreateWindow extends Application { - - private static VBox table; + private PICComponents picComponents = new PICComponents(); // Subjekt public static GridPane grid = new GridPane(); + private static VBox table; @Override public void start(Stage primaryStage) throws IOException { - //DataRegister.initDataRegister(); - //table = Table.refresh(); - FXMLLoader codewindow = new FXMLLoader(CreateWindow.class.getResource("frontend.fxml")); - Parent code = codewindow.load(); + picComponents.registerComponent(CommandInterface.class, new Commands()); + picComponents.registerComponent(ToggleButtonInterface.class, new ToggleButtonGroupExt()); + picComponents.registerComponent(FrontendControllerInterface.class, new Controller_Frontend()); + picComponents.registerComponent(DataRegisterInterface.class, new DataRegister()); + picComponents.registerComponent(EEPROMInterface.class, new EEPROM()); + picComponents.registerComponent(InterruptInterface.class, new Interrupts()); + picComponents.registerComponent(IOPortInterface.class, new IOPorts()); + picComponents.registerComponent(PreScalerInterface.class, new PreScaler()); + picComponents.registerComponent(ProgramStackInterface.class, new ProgramStack()); + picComponents.registerComponent(TimerInterface.class, new Timer()); + picComponents.registerComponent(WatchdogTimerInterface.class, new WatchdogTimer()); + picComponents.initAll(); + FXMLLoader codewindow = new FXMLLoader(CreateWindow.class.getResource("frontend.fxml")); + codewindow.setController(picComponents.getComponent(FrontendControllerInterface.class)); + Parent code = codewindow.load(); + table = Table.init(picComponents); grid.add(table, 1, 1); grid.add(code, 0, 1); @@ -44,7 +59,7 @@ public class CreateWindow extends Application { public static void refreshTable() { grid.getChildren().remove(table); - //table= Table.refresh(); + table= Table.refresh(); grid.add(table, 1, 1); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java index 2251556..42a7245 100644 --- a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java +++ b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java @@ -1,8 +1,6 @@ package fabrik.simulator.pic16f84; import fabrik.simulator.pic16f84.interfaces.DataRegisterInterface; -import fabrik.simulator.pic16f84.interfaces.EEPROMInterface; -import fabrik.simulator.pic16f84.interfaces.IOPortInterface; import java.util.Arrays; @@ -62,7 +60,7 @@ public class DataRegister extends PICComponent implements DataRegisterInterface carryFlag = 0; zeroFlag = 0; digitCarryFlag = 0; - super.ioPorts.resetTRIS(); + ioPorts.resetTRIS(); System.out.println(Arrays.toString(dataRegister)); } diff --git a/src/main/java/fabrik/simulator/pic16f84/EEPROM.java b/src/main/java/fabrik/simulator/pic16f84/EEPROM.java index 6dbad2e..ddd3034 100644 --- a/src/main/java/fabrik/simulator/pic16f84/EEPROM.java +++ b/src/main/java/fabrik/simulator/pic16f84/EEPROM.java @@ -14,7 +14,7 @@ import java.nio.file.Paths; import fabrik.simulator.pic16f84.interfaces.*; -public class EEPROM implements EEPROMInterface { +public class EEPROM extends PICComponent implements EEPROMInterface { private final int EEDATA = 0x08; private final int EEADR = 0x09; private final int EECON1 = 0x88; @@ -28,15 +28,11 @@ public class EEPROM implements EEPROMInterface { private boolean readControl = false; private boolean writeControl = false; private boolean [] eecon2stages = {false, false}; - - private final DataRegisterInterface dataRegister; - private final CommandInterface commands; + private double startTime; - public EEPROM (DataRegisterInterface dataRegister, CommandInterface commands){ - this.dataRegister = dataRegister; - this.commands = commands; + public EEPROM (){ } public long read (int address) { @@ -176,6 +172,7 @@ public class EEPROM implements EEPROMInterface { @Override public void initialize(PICComponents picComponents) { - + System.out.println("EEPROM"); + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/IOPorts.java b/src/main/java/fabrik/simulator/pic16f84/IOPorts.java index bf6c3bc..d723dc6 100644 --- a/src/main/java/fabrik/simulator/pic16f84/IOPorts.java +++ b/src/main/java/fabrik/simulator/pic16f84/IOPorts.java @@ -192,8 +192,8 @@ public class IOPorts extends PICComponent implements IOPortInterface { } public void refreshTable(ToggleButtonGroup parent) { - table.refresh(); - createWindow.refreshTable(); + Table.refresh(); + CreateWindow.refreshTable(); } private int[] getToggleParams(ToggleButtonGroup parent) { diff --git a/src/main/java/fabrik/simulator/pic16f84/Interrupts.java b/src/main/java/fabrik/simulator/pic16f84/Interrupts.java index 6f6ca99..d734b1c 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Interrupts.java +++ b/src/main/java/fabrik/simulator/pic16f84/Interrupts.java @@ -6,7 +6,7 @@ import fabrik.simulator.pic16f84.interfaces.DataRegisterInterface; import fabrik.simulator.pic16f84.interfaces.FrontendControllerInterface; import fabrik.simulator.pic16f84.interfaces.InterruptInterface; -public class Interrupts implements InterruptInterface { +public class Interrupts extends PICComponent implements InterruptInterface { private final int INTCON = 0xB; private final int T0IF = 0x2; private final int ISR = 0x4; @@ -19,14 +19,8 @@ public class Interrupts implements InterruptInterface { private final int INTE = 0x4; private final int INTF = 0x1; - private final DataRegisterInterface dataRegister; - private final CommandInterface commands; - private final FrontendControllerInterface frontendController; - public Interrupts (DataRegisterInterface dataRegister, CommandInterface commands, FrontendControllerInterface frontendController) { - this.dataRegister = dataRegister; - this.commands = commands; - this.frontendController = frontendController; + public Interrupts () { } public void triggerTMR0(boolean manual) { @@ -73,6 +67,6 @@ public class Interrupts implements InterruptInterface { @Override public void initialize(PICComponents picComponents) { - + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/PICComponent.java b/src/main/java/fabrik/simulator/pic16f84/PICComponent.java index 9a22f9f..1989679 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PICComponent.java +++ b/src/main/java/fabrik/simulator/pic16f84/PICComponent.java @@ -9,16 +9,27 @@ public abstract class PICComponent { IOPortInterface ioPorts; TimerInterface timer; InterruptInterface interrupts; - TableInterface table; - WindowManagement createWindow; + //TableInterface table; + //WindowManagement createWindow; FrontendControllerInterface frontendController; WatchdogTimerInterface watchdogTimer; ProgramStackInterface programStack; + CommandInterface commands; + ToggleButtonInterface toggleButtonExt; void initialize(PICComponents picComponents) { + toggleButtonExt = (ToggleButtonInterface) picComponents.getComponent(ToggleButtonInterface.class); dataRegister = (DataRegisterInterface) picComponents.getComponent(DataRegisterInterface.class); eeprom = (EEPROMInterface) picComponents.getComponent(EEPROMInterface.class); ioPorts = (IOPortInterface) picComponents.getComponent(IOPortInterface.class); - System.out.print("Initializing PIC Component "); + preScaler = (PreScaler) picComponents.getComponent(PreScalerInterface.class); + timer = (TimerInterface) picComponents.getComponent(TimerInterface.class); + interrupts = (InterruptInterface) picComponents.getComponent(InterruptInterface.class); + //table = (TableInterface) picComponents.getComponent(TableInterface.class); + //createWindow = (WindowManagement) picComponents.getComponent(WindowManagement.class); + frontendController = (FrontendControllerInterface) picComponents.getComponent(FrontendControllerInterface.class); + watchdogTimer = (WatchdogTimerInterface) picComponents.getComponent(WatchdogTimerInterface.class); + programStack = (ProgramStackInterface) picComponents.getComponent(ProgramStackInterface.class); + commands = (CommandInterface) picComponents.getComponent(CommandInterface.class); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/PICComponents.java b/src/main/java/fabrik/simulator/pic16f84/PICComponents.java index 8e54dc7..e40062f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PICComponents.java +++ b/src/main/java/fabrik/simulator/pic16f84/PICComponents.java @@ -21,9 +21,7 @@ public class PICComponents { } public void initAll() { - for (PICComponentInterface component : componentCatalogue.values()) { - component.initialize(this); - } + for (PICComponentInterface component : componentCatalogue.values()) component.initialize(this); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/PreScaler.java b/src/main/java/fabrik/simulator/pic16f84/PreScaler.java index 3ef57c7..a54909f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PreScaler.java +++ b/src/main/java/fabrik/simulator/pic16f84/PreScaler.java @@ -2,46 +2,49 @@ package fabrik.simulator.pic16f84; import fabrik.simulator.pic16f84.interfaces.*; -public class PreScaler extends PICComponent implements PICComponentInterface { +public class PreScaler extends PICComponent implements PreScalerInterface { private final int PSA = 0x3; private final int OPTION = 0x81; - private final TimerInterface timer; private int scaler; - public PreScaler (DataRegisterInterface dataRegister, TimerInterface timer) { + public PreScaler () { super(); scaler = 0b111; - this.dataRegister = dataRegister; - this.timer = timer; } - public boolean isPrescalerOnTimer (){ + @Override + public boolean isPrescalerOnTimer(){ return dataRegister.getDirectBit(OPTION, PSA) == 0; } + @Override public int getScaler() { return scaler; } - public int getFactor () { + @Override + public int getFactor() { int scale = dataRegister.getDirectRegister(OPTION) & 0b111; int timer = isPrescalerOnTimer() ? 1 : 0; return (int) Math.pow (2, scale+timer); } - public void reset (){ + @Override + public void reset(){ dataRegister.setDirectBit(OPTION, 0, 0); dataRegister.setDirectBit(OPTION, 1, 0); dataRegister.setDirectBit(OPTION, 2, 0); } + @Override public void resetFromRegister() { scaler = getFactor(); } + @Override public void decrement(boolean manual) { scaler--; if (scaler == 0) { @@ -52,6 +55,6 @@ public class PreScaler extends PICComponent implements PICComponentInterface { @Override public void initialize(PICComponents picComponents) { - + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java b/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java index 104d7e7..0ee1725 100644 --- a/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java +++ b/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java @@ -5,7 +5,7 @@ import fabrik.simulator.pic16f84.interfaces.ProgramStackInterface; import java.util.ArrayList; import java.util.List; -public class ProgramStack implements ProgramStackInterface { +public class ProgramStack extends PICComponent implements ProgramStackInterface { private List returnStack = new ArrayList<>(8); private int stackIndex = 0; @@ -49,6 +49,6 @@ public class ProgramStack implements ProgramStackInterface { @Override public void initialize(PICComponents picComponents) { - + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/Table.java b/src/main/java/fabrik/simulator/pic16f84/Table.java index 9e32ca8..3e0f734 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Table.java +++ b/src/main/java/fabrik/simulator/pic16f84/Table.java @@ -1,12 +1,10 @@ package fabrik.simulator.pic16f84; -import fabrik.simulator.pic16f84.interfaces.CommandInterface; -import fabrik.simulator.pic16f84.interfaces.WindowManagement; -import fabrik.simulator.pic16f84.interfaces.DataRegisterInterface; -import fabrik.simulator.pic16f84.interfaces.IOPortInterface; +import fabrik.simulator.pic16f84.interfaces.*; import javafx.beans.property.SimpleStringProperty; import javafx.geometry.Insets; +import javafx.scene.chart.PieChart; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TableColumn; @@ -21,28 +19,16 @@ import static javafx.application.Application.launch; public class Table { - //Hier wird die Tabelle aktualisiert - //Tabelle aktualisieren - - private final WindowManagement createWindow; - private final DataRegisterInterface dataRegister; - private final CommandInterface command; - private final PreScaler preScaler; - private final IOPortInterface ioPorts; - - - public Table (DataRegisterInterface dataRegister, WindowManagement createWindow, CommandInterface command, PreScaler preScaler, IOPortInterface ioPorts){ - - this.dataRegister = dataRegister; - this.createWindow = createWindow; - this.command = command; - this.preScaler = preScaler; - this.ioPorts = ioPorts; - } + //Hier wird die Tabelle aktualisiert + //Tabelle aktualisieren + private static DataRegisterInterface dataRegister; + private static CommandInterface commands; private static final int NUM_COLUMNS = 8; // Anzahl der Spalten private static final double TABLE_WIDTH = 425; // Breite der TableView private static final double TABLE_HEIGHT = 600; // Höhe der TableView + private static IOPortInterface ioPorts; + private static PreScalerInterface preScaler; private static String formatHex(String s) { return (s.length() == 1) ? "0" + s : s; @@ -60,9 +46,17 @@ public class Table { return s; } + public static VBox init(PICComponents picComponents){ + dataRegister = (DataRegisterInterface) picComponents.getComponent(DataRegisterInterface.class); + commands = (CommandInterface) picComponents.getComponent(CommandInterface.class); + ioPorts = (IOPortInterface) picComponents.getComponent(IOPortInterface.class); + preScaler = (PreScalerInterface) picComponents.getComponent(PreScalerInterface.class); + return refresh(); + } - public VBox refresh(){ - // Erstelle eine Instanz der DataRegister-Klasse + public static VBox refresh() { + + // Erstelle eine Instanz der dataRegister-Klasse // Erstelle eine TableView für die Datenanzeige @@ -108,7 +102,7 @@ public class Table { Label spacing = new Label(" "); Label spacing2 = new Label(" "); - Label wRegisterLabel = new Label("W-Register: 0x" + formatHex(Integer.toHexString(command.get_wRegister()).toUpperCase())); + Label wRegisterLabel = new Label("W-Register: 0x" + formatHex(Integer.toHexString(commands.get_wRegister()).toUpperCase())); Label cLabel = new Label("Carry-Flag: " + dataRegister.getCarryFlag()); Label dcLabel = new Label("DigitCarry-Flag: " + dataRegister.getDigitCarryFlag()); Label zLabel = new Label("Zero-Flag: " + dataRegister.getZeroFlag()); @@ -147,7 +141,7 @@ public class Table { } - private void triggerReset() { + private static void triggerReset() { dataRegister.initDataRegister(); ioPorts.refreshUI(Controller_Frontend.getTRISbuttons(), Controller_Frontend.getPORTbuttons()); CreateWindow.refreshTable(); @@ -158,7 +152,7 @@ public class Table { } // Hilfsklasse für die Datenanzeige in der TableView - public class DataEntry { + public static class DataEntry { private final String address; private final String value; diff --git a/src/main/java/fabrik/simulator/pic16f84/Timer.java b/src/main/java/fabrik/simulator/pic16f84/Timer.java index 331eb90..168d7f4 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Timer.java +++ b/src/main/java/fabrik/simulator/pic16f84/Timer.java @@ -5,7 +5,7 @@ import fabrik.simulator.pic16f84.interfaces.FrontendControllerInterface; import fabrik.simulator.pic16f84.interfaces.InterruptInterface; import fabrik.simulator.pic16f84.interfaces.TimerInterface; -public class Timer implements TimerInterface { +public class Timer extends PICComponent implements TimerInterface { private final int TIMERREG = 0x1; private final int T0SE = 0x4; private final int T0CS = 0x5; @@ -13,16 +13,7 @@ public class Timer implements TimerInterface { private int oldpin = 0; - private final DataRegisterInterface dataRegister; - private final InterruptInterface interrupts; - private final PreScaler preScaler; - private final FrontendControllerInterface frontendController; - - public Timer (DataRegisterInterface dataRegister, InterruptInterface interrupts, PreScaler preScaler, FrontendControllerInterface frontendController){ - this.dataRegister = dataRegister; - this.interrupts = interrupts; - this.preScaler = preScaler; - this.frontendController = frontendController; + public Timer (){ } public void cycles(int cycles){ @@ -77,6 +68,6 @@ public class Timer implements TimerInterface { @Override public void initialize(PICComponents picComponents) { - + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java b/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java index 67e14ca..1871d8a 100644 --- a/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java +++ b/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java @@ -2,6 +2,7 @@ package fabrik.simulator.pic16f84; import com.gluonhq.charm.glisten.control.ToggleButtonGroup; import fabrik.simulator.pic16f84.interfaces.IOPortInterface; +import fabrik.simulator.pic16f84.interfaces.ToggleButtonInterface; import javafx.collections.ListChangeListener; import javafx.event.EventHandler; import javafx.scene.control.Toggle; @@ -10,21 +11,12 @@ import javafx.scene.input.MouseEvent; import java.io.IOException; -public class ToggleButtonGroupExt { +public class ToggleButtonGroupExt extends PICComponent implements ToggleButtonInterface { - private IOPortInterface ioPorts; private static ToggleButtonGroupExt me; - public ToggleButtonGroupExt(IOPortInterface ioPorts) { - this.ioPorts = ioPorts; - } - - public static ToggleButtonGroupExt get(IOPortInterface ioPorts) { - if (me == null) { - me = new ToggleButtonGroupExt(ioPorts); - } - return me; + public ToggleButtonGroupExt() { } @@ -65,4 +57,10 @@ public class ToggleButtonGroupExt { mouseEvent.consume(); } }; + + @Override + public void initialize(PICComponents picComponents) { + System.out.println("ToggleButtonGroupExt"); + super.initialize(picComponents); + } } diff --git a/src/main/java/fabrik/simulator/pic16f84/TryComponentManagement.java b/src/main/java/fabrik/simulator/pic16f84/TryComponentManagement.java deleted file mode 100644 index 7995bf2..0000000 --- a/src/main/java/fabrik/simulator/pic16f84/TryComponentManagement.java +++ /dev/null @@ -1,18 +0,0 @@ -package fabrik.simulator.pic16f84; - -import fabrik.simulator.pic16f84.interfaces.DataRegisterInterface; -import fabrik.simulator.pic16f84.interfaces.IOPortInterface; - -public class TryComponentManagement { - public static void main(String[] args) { - DataRegisterInterface dataRegister = new DataRegister(); - IOPortInterface ioPorts = new IOPorts(); - - PICComponents picComponents = new PICComponents(); // Subjekt - - picComponents.registerComponent(DataRegisterInterface.class, dataRegister); - picComponents.registerComponent(IOPortInterface.class, ioPorts); - - picComponents.initAll(); - } -} diff --git a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java index 829db49..8c9f352 100644 --- a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java +++ b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java @@ -2,29 +2,14 @@ package fabrik.simulator.pic16f84; import fabrik.simulator.pic16f84.interfaces.*; -public class WatchdogTimer implements WatchdogTimerInterface { +public class WatchdogTimer extends PICComponent implements WatchdogTimerInterface { private long watchdogTime; private double lastReset = 0; private boolean enabled = false; private long rawtimer = 0; private long realtimer = 0; - - private final DataRegisterInterface dataRegister; - private final ProgramStackInterface programStack; - private final FrontendControllerInterface frontendController; - private final PreScaler preScaler; - private final CommandInterface command; - - - public WatchdogTimer( DataRegisterInterface dataRegister, ProgramStackInterface programStack, FrontendControllerInterface frontendController,PreScaler preScaler, CommandInterface command){ - - this.dataRegister = dataRegister; - this.programStack = programStack; - this.preScaler = preScaler; - this.command = command; - this.frontendController = frontendController; - + public WatchdogTimer(){ } private long getTimeFromRegister() { @@ -36,7 +21,7 @@ public class WatchdogTimer implements WatchdogTimerInterface { if (enabled) { if (realtimer >= (watchdogTime + lastReset - 1)) { dataRegister.clearBit(3, 4); - lastReset = command.getTotalExecutionTime(); + lastReset = commands.getTotalExecutionTime(); frontendController.stopRunFromBackend("Watchdog Timer"); } else { @@ -47,7 +32,7 @@ public class WatchdogTimer implements WatchdogTimerInterface { } public void reset (){ - lastReset = command.getTotalExecutionTime(); + lastReset = commands.getTotalExecutionTime(); rawtimer = 0; realtimer = 0; preScaler.reset(); @@ -69,6 +54,6 @@ public class WatchdogTimer implements WatchdogTimerInterface { @Override public void initialize(PICComponents picComponents) { - + super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/PreScalerInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/PreScalerInterface.java new file mode 100644 index 0000000..83cdb1a --- /dev/null +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/PreScalerInterface.java @@ -0,0 +1,15 @@ +package fabrik.simulator.pic16f84.interfaces; + +public interface PreScalerInterface extends PICComponentInterface{ + boolean isPrescalerOnTimer(); + + int getScaler(); + + int getFactor(); + + void reset(); + + void resetFromRegister(); + + void decrement(boolean manual); +} diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/TableInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/TableInterface.java index c2e4362..8d6e594 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/TableInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/TableInterface.java @@ -1,5 +1,7 @@ package fabrik.simulator.pic16f84.interfaces; +import javafx.scene.layout.VBox; + public interface TableInterface extends PICComponentInterface { - void refresh(); + VBox refresh(); } diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/ToggleButtonInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/ToggleButtonInterface.java index 550e0a9..e90d3f1 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/ToggleButtonInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/ToggleButtonInterface.java @@ -1,7 +1,7 @@ package fabrik.simulator.pic16f84.interfaces; -import fabrik.simulator.pic16f84.ToggleButtonGroupExt; +import com.gluonhq.charm.glisten.control.ToggleButtonGroup; public interface ToggleButtonInterface extends PICComponentInterface { - ToggleButtonGroupExt get(); + void addAlwaysOneSelectedSupport(ToggleButtonGroup allTRISButton); } diff --git a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml index 587a88a..26d74de 100644 --- a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml +++ b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml @@ -11,7 +11,7 @@ - + -- 2.36.6 From 087b132362590d480cd0a21473100638c2af683a Mon Sep 17 00:00:00 2001 From: LucaaMueller Date: Sun, 25 May 2025 18:57:16 +0200 Subject: [PATCH 2/2] Refactoring - Extract Method, Large Class --- .../pic16f84/Controller_Frontend.java | 38 ++++++++----------- .../simulator/pic16f84/ExecutionState.java | 19 ++++++++++ .../FrontendControllerInterface.java | 4 -- 3 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 src/main/java/fabrik/simulator/pic16f84/ExecutionState.java diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java index b8e436a..6b5ea96 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java +++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java @@ -72,8 +72,6 @@ public class Controller_Frontend extends PICComponent implements FrontendControl @FXML private CheckBox wdtCheck; - private static volatile boolean isAutoRunActive = false; - private static volatile boolean isSleeping = false; public Controller_Frontend() { @@ -82,21 +80,21 @@ public class Controller_Frontend extends PICComponent implements FrontendControl } - public boolean isSleeping (){ - return isSleeping; - } + //Refactoring public void stopRunFromBackend(String message) { - isAutoRunActive = false; + ExecutionState.setAutoRunActive(false); + handleSleepOrReset(); showStopDialog(message); + } private void handleSleepOrReset() { - if (isSleeping) { - wakeUpFromSleep(); + if (ExecutionState.isSleeping()) { + ExecutionState.wakeUp(); } else { dataRegister.resetPC(); } @@ -123,31 +121,26 @@ public class Controller_Frontend extends PICComponent implements FrontendControl } + //Refactoring Ende - public void sleep() { - isSleeping = true; - } - public void wakeUpFromSleep() { - isSleeping = false; - } @FXML private void stopAutoRun(ActionEvent event) { - isAutoRunActive = false; + ExecutionState.setAutoRunActive(false); } @FXML public void autoRunGUI(ActionEvent event) { - if (!isAutoRunActive) { - isAutoRunActive = true; + if (!ExecutionState.isAutoRunActive()) { + ExecutionState.setAutoRunActive(true) ; } Thread autoRunThread = new Thread(() -> { try { - while (dataRegister.getPC() < prog.length && isAutoRunActive){ + while (dataRegister.getPC() < prog.length && ExecutionState.isAutoRunActive()){ Platform.runLater(() -> { try { @@ -167,6 +160,7 @@ public class Controller_Frontend extends PICComponent implements FrontendControl } + private void updateExecutionTimeMultiplier() { String selectedOption = executionTimeComboBox.getValue(); commands.setExecutionTimeMultiplier(selectedOption); @@ -181,7 +175,7 @@ public class Controller_Frontend extends PICComponent implements FrontendControl int currentIndex; // Aktuelle Zeile abrufen - if (!isSleeping) + if (!ExecutionState.isSleeping()) currentIndex = ind[dataRegister.getPC()]; else currentIndex = ind[dataRegister.getPC()]-1; @@ -210,14 +204,14 @@ public class Controller_Frontend extends PICComponent implements FrontendControl lstContentListView.getSelectionModel().select(currentIndex); String selectedRowStyle; - if (!isSleeping) + if (!ExecutionState.isSleeping()) selectedRowStyle = "-fx-background-color: red; -fx-text-fill: white;"; else selectedRowStyle = "-fx-background-color: teal; -fx-text-fill: white;"; markSelectedRow(currentIndex, selectedRowStyle); - if (!isSleeping) { + if (!ExecutionState.isSleeping()) { commands.decode(prog[dataRegister.getPC()]); dataRegister.increasePC(); } @@ -285,7 +279,7 @@ public class Controller_Frontend extends PICComponent implements FrontendControl } catch (NullPointerException ignored) {} } programStack.reset(); - wakeUpFromSleep(); + ExecutionState.wakeUp(); breakpoints.clear(); ioPorts.refreshUI(getTRISbuttons(), getPORTbuttons()); commands.resetTotalExecutionTime(); diff --git a/src/main/java/fabrik/simulator/pic16f84/ExecutionState.java b/src/main/java/fabrik/simulator/pic16f84/ExecutionState.java new file mode 100644 index 0000000..f35c969 --- /dev/null +++ b/src/main/java/fabrik/simulator/pic16f84/ExecutionState.java @@ -0,0 +1,19 @@ +package fabrik.simulator.pic16f84; + +public class ExecutionState { + + private static boolean isAutoRunActive = false; + private static boolean isSleeping = false; + private static double executionTimeMultiplier = 1; + + public static boolean isAutoRunActive() { return isAutoRunActive; } + public static void setAutoRunActive(boolean active) { isAutoRunActive = active; } + + public static boolean isSleeping() { return isSleeping; } + public static void sleep() { isSleeping = true; } + public static void wakeUp() { isSleeping = false; } + + public static double getExecutionTimeMultiplier() { return executionTimeMultiplier; } + public static void setExecutionTimeMultiplier(double multiplier) { executionTimeMultiplier = multiplier; } + } + diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java index bc7aeb8..fb3e010 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java @@ -2,11 +2,7 @@ package fabrik.simulator.pic16f84.interfaces; public interface FrontendControllerInterface extends PICComponentInterface { - void sleep(); - void wakeUpFromSleep(); - - boolean isSleeping(); void stopRunFromBackend(String watchdogTimer); } -- 2.36.6