Dependency inversions
This commit is contained in:
@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user