Dependency inversions

This commit is contained in:
2025-01-26 15:44:01 +01:00
parent c8f23176d2
commit 52daa062df
27 changed files with 955 additions and 482 deletions

View File

@ -2,6 +2,8 @@ package fabrik.simulator.pic16f84;
import com.gluonhq.charm.glisten.control.ToggleButtonGroup;
import fabrik.simulator.pic16f84.interfaces.*;
import fabrik.simulator.pic16f84.interfaces.WatchdogTimerInterface;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
@ -35,17 +37,17 @@ import java.util.Set;
import static java.lang.Math.max;
public class Controller_Frontend {
public class Controller_Frontend implements FrontendControllerInterface {
private int [] prog;
private int [][] read;
private int [] ind;
private static double executionTimeMultiplier = 1;
private double executionTimeMultiplier = 1;
public static double getExecutionTimeMultiplier(){
public double getExecutionTimeMultiplier(){
return executionTimeMultiplier;
}
@ -53,12 +55,6 @@ public class Controller_Frontend {
private boolean continueExecutionAfterBreakpoint = false;
@FXML
private ComboBox<String> executionTimeComboBox;
@ -84,24 +80,46 @@ public class Controller_Frontend {
@FXML
private CheckBox wdtCheck;
private static volatile boolean isAutoRunActive = false;
private static volatile boolean isSleeping = false;
public static boolean isSleeping (){
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 boolean isSleeping (){
return isSleeping;
}
public static void stopRunFromBackend(String message){
public void stopRunFromBackend(String message){
isAutoRunActive = false;
if (isSleeping)
wakeUpFromSleep();
else
DataRegister.resetPC();
dataRegister.resetPC();
Stage stoppedStage = new Stage();
stoppedStage.setTitle("Programm unterbrochen!");
VBox vbox = new VBox();
@ -118,11 +136,11 @@ public class Controller_Frontend {
stoppedStage.show();
}
public static void sleep() {
public void sleep() {
isSleeping = true;
}
public static void wakeUpFromSleep() {
public void wakeUpFromSleep() {
isSleeping = false;
}
@ -140,7 +158,7 @@ public class Controller_Frontend {
Thread autoRunThread = new Thread(() -> {
try {
while (DataRegister.getPC() < prog.length && isAutoRunActive){
while (dataRegister.getPC() < prog.length && isAutoRunActive){
Platform.runLater(() -> {
try {
@ -197,9 +215,9 @@ public class Controller_Frontend {
int currentIndex;
// Aktuelle Zeile abrufen
if (!isSleeping)
currentIndex = ind[DataRegister.getPC()];
currentIndex = ind[dataRegister.getPC()];
else
currentIndex = ind[DataRegister.getPC()]-1;
currentIndex = ind[dataRegister.getPC()]-1;
// Überprüfung ob ein Breakpoint gesetzt ist testte
@ -233,19 +251,19 @@ public class Controller_Frontend {
markSelectedRow(currentIndex, selectedRowStyle);
if (!isSleeping) {
Commands.decode(prog[DataRegister.getPC()]);
DataRegister.increasePC();
commands.decode(prog[dataRegister.getPC()]);
dataRegister.increasePC();
}
else {
Commands.decode(0);
commands.decode(0);
}
WatchdogTimer.testAndTrigger();
Table.refresh();
CreateWindow.refreshTable();
IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
watchdogTimer.testAndTrigger();
table.refresh();
createWindow.refreshTable();
ioPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
updateStack();
updateWatchdog();
long totalExecutionTime = Commands.getTotalExecutionTime();
double totalExecutionTime = commands.getTotalExecutionTime();
totalExecutionTimeLabel.setText("Total Execution Time: " + totalExecutionTime + "µs");
}
@ -285,26 +303,26 @@ public class Controller_Frontend {
stopAutoRun(null);
if(selectedFile != null){
String fileAddress = selectedFile.getAbsolutePath();
DataRegister.initDataRegister();
DataRegister.resetPC();
dataRegister.initDataRegister();
dataRegister.resetPC();
toggleLEDs(null);
IOPorts.reset();
ioPorts.reset();
for (ToggleButtonGroup toggleButtonGroup : allPORTbuttons) {
try {
toggleButtonGroup.getToggles().get(0).setSelected(true);
toggleButtonGroup.getToggles().get(1).setSelected(false);
IOPorts.setPORTfromUI(toggleButtonGroup);
ioPorts.setPORTfromUI(toggleButtonGroup);
} catch (NullPointerException ignored) {}
}
ProgramStack.reset();
programStack.reset();
wakeUpFromSleep();
breakpoints.clear();
IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
Commands.resetTotalExecutionTime();
WatchdogTimer.reset();
ioPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
commands.resetTotalExecutionTime();
watchdogTimer.reset();
wdtCheck.setSelected(false);
Table.refresh();
table.refresh();
read = ParseFile.parseDatei(fileAddress);
prog = read [0];
ind = read[1];
@ -396,11 +414,11 @@ public class Controller_Frontend {
@FXML
public void toggleWatchdog(ActionEvent actionEvent) {
if (wdtCheck.isSelected()){
WatchdogTimer.enable();
watchdogTimer.enable();
}
else{
WatchdogTimer.disable();
watchdogTimer.disable();
}
}
@ -473,15 +491,15 @@ public class Controller_Frontend {
allPORTButtons[i].getToggles().get(0).setSelected(true);
allTRISButtons[i].getToggles().get(1).setSelected(false);
allPORTButtons[i].getToggles().get(1).setSelected(false);
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allTRISButtons[i]);
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allPORTButtons[i]);
toggleButtonExt.get().addAlwaysOneSelectedSupport(allTRISButtons[i]);
toggleButtonExt.get().addAlwaysOneSelectedSupport(allPORTButtons[i]);
}
ledCheckA.setSelected(false);
ledCheckB.setSelected(false);
setTRISbuttons(allTRISButtons);
setPORTbuttons(allPORTButtons);
IOPorts.setLEDs(allLEDsA, allLEDsB);
ioPorts.setLEDs(allLEDsA, allLEDsB);
lstContentListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
@ -554,7 +572,7 @@ public class Controller_Frontend {
@FXML
public void toggleLEDs (ActionEvent actionEvent) {
IOPorts.setLEDs(new boolean[]{ledCheckA.isSelected(), ledCheckB.isSelected()});
ioPorts.setLEDs(new boolean[]{ledCheckA.isSelected(), ledCheckB.isSelected()});
}
@FXML
@ -568,9 +586,9 @@ public class Controller_Frontend {
}
private void updateStack (){
stackIndex.setText("Stack-Pointer: " + ProgramStack.getStackPointer());
stackIndex.setText("Stack-Pointer: " + programStack.getStackPointer());
ObservableList<String> observedList = FXCollections.observableArrayList();
List<Integer> stackList = ProgramStack.getStack();
List<Integer> stackList = programStack.getStack();
for (Integer integer : stackList) {
observedList.add("0x" + format(Integer.toHexString(integer).toUpperCase()));
}
@ -578,7 +596,7 @@ public class Controller_Frontend {
}
private void updateWatchdog (){
wdtCheck.setText("Watchdog-Timer: " + WatchdogTimer.get() + "µs");
wdtCheck.setText("Watchdog-Timer: " + watchdogTimer.get() + "µs");
}
}