瀏覽代碼

Make the output state and the links implement the new interfaces

Fabio Battaglia 5 年之前
父節點
當前提交
566bdaa83e

+ 3 - 1
src/main/java/info/hkzlab/dupal/analyzer/board/boardio/DuPALAnalyzer.java

@@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory;
 
 import info.hkzlab.dupal.analyzer.devices.*;
 import info.hkzlab.dupal.analyzer.exceptions.*;
+import info.hkzlab.dupal.analyzer.palanalisys.explorers.OSExplorer;
 import info.hkzlab.dupal.analyzer.utilities.BitUtils;
 
 public class DuPALAnalyzer {
@@ -79,8 +80,9 @@ public class DuPALAnalyzer {
     public void startAnalisys() throws InvalidIOPinStateException, ICStateException, DuPALBoardException {
         if(ioAsOutMask < 0) {
             ioAsOutMask = detectIOTypeMask(dpci);
-
             logger.info("detectIOTypeMask -> Detected the following IO Type mask: " + String.format("%06X", ioAsOutMask));
         }
+
+        OSExplorer.exploreOutStates(dpci, ioAsOutMask);
     }
 }

+ 9 - 0
src/main/java/info/hkzlab/dupal/analyzer/exceptions/DuPALAnalyzerException.java

@@ -0,0 +1,9 @@
+package info.hkzlab.dupal.analyzer.exceptions;
+
+public class DuPALAnalyzerException extends IllegalStateException {
+    private static final long serialVersionUID = 1L;
+
+    public DuPALAnalyzerException(String message) {
+        super(message);
+    }
+}

+ 12 - 1
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/explorers/OSExplorer.java

@@ -1,5 +1,8 @@
 package info.hkzlab.dupal.analyzer.palanalisys.explorers;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import info.hkzlab.dupal.analyzer.board.boardio.DuPALCmdInterface;
 import info.hkzlab.dupal.analyzer.devices.PALSpecs;
 import info.hkzlab.dupal.analyzer.exceptions.DuPALBoardException;
@@ -8,6 +11,8 @@ import info.hkzlab.dupal.analyzer.palanalisys.graph.OutStatePins;
 import info.hkzlab.dupal.analyzer.utilities.BitUtils;
 
 public class OSExplorer {
+    private static final Logger logger = LoggerFactory.getLogger(OSExplorer.class);
+
     private OSExplorer() {};
 
     public static void exploreOutStates(final DuPALCmdInterface dpci, int ioAsOutMask) throws DuPALBoardException {
@@ -16,6 +21,7 @@ public class OSExplorer {
         int ioAsOut_W = BitUtils.scatterBitField(BitUtils.consolidateBitField(ioAsOutMask, pSpecs.getMask_IO_R()), pSpecs.getMask_IO_W());
         int pinState_A, pinState_B;
         OutStatePins osp;
+        OutState curState;
 
         dpci.write(0); // Set every input pin (and I/Os too) to low
         pinState_A = dpci.read();
@@ -23,7 +29,12 @@ public class OSExplorer {
         pinState_B = dpci.read();
         osp = extractOutPinStates(pSpecs, ioAsOutMask, pinState_A, pinState_B);
 
-        new OutState(osp, maxLinks);
+        curState = new OutState(osp, maxLinks);
+        logger.info("exploreOutStates() -> Initial state: " + curState);
+
+        //while(curState != null) {
+
+        //}
     }
 
     private static OutStatePins extractOutPinStates(PALSpecs pSpecs, int ioAsOutMask, int read_a, int read_b) {

+ 1 - 1
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/graph/GraphLink.java

@@ -1,7 +1,7 @@
 package info.hkzlab.dupal.analyzer.palanalisys.graph;
 
 public interface GraphLink {
-    public int getLinkCombination();
+    public int getLinkInputs();
     public GraphState getSourceState();
     public GraphState getDestinationState();
 }

+ 1 - 1
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/graph/GraphState.java

@@ -1,7 +1,7 @@
 package info.hkzlab.dupal.analyzer.palanalisys.graph;
 
 public interface GraphState {
-    public int[] getInternalState();
+    public OutStatePins getInternalState();
     public boolean isStateFull();
     public GraphLink[] getLinks();
 }

+ 18 - 3
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/graph/OutLink.java

@@ -1,11 +1,11 @@
 package info.hkzlab.dupal.analyzer.palanalisys.graph;
 
-public class OutLink {
+public class OutLink implements GraphLink {
 
    public final int inputs;
-   public final OutLink src, dest;
+   public final OutState src, dest;
    
-   public OutLink(OutLink src, OutLink dest, int inputs) {
+   public OutLink(OutState src, OutState dest, int inputs) {
        this.src = src;
        this.dest = dest;
        this.inputs = inputs;
@@ -26,4 +26,19 @@ public class OutLink {
     public String toString() {
         return "<"+src+">-OL["+String.format("%08X", inputs)+"]-<"+dest+">";
     }
+
+    @Override
+    public int getLinkInputs() {
+        return inputs;
+    }
+
+    @Override
+    public GraphState getSourceState() {
+        return src;
+    }
+
+    @Override
+    public GraphState getDestinationState() {
+        return dest;
+    }
 }

+ 22 - 8
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/graph/OutState.java

@@ -1,8 +1,8 @@
 package info.hkzlab.dupal.analyzer.palanalisys.graph;
 
-import java.util.Arrays;
+import info.hkzlab.dupal.analyzer.exceptions.DuPALAnalyzerException;
 
-public class OutState {
+public class OutState implements GraphState {
     public final OutStatePins pins;
     private final OutLink[] links;
 
@@ -15,12 +15,11 @@ public class OutState {
         lastOutLinkIdx = 0;
     }
 
-    public OutLink getOutLinkAtIdx(int idx) {
-        return links[idx];
-    }
-
-    public int addOutLink(OutLink link) {
+    public int addOutLink(OutLink link) throws DuPALAnalyzerException {
         int idx = lastOutLinkIdx;
+
+        if(idx >= links.length) throw new DuPALAnalyzerException("Tried to insert a link above maximum possible for this State " + this.toString());
+
         lastOutLinkIdx++;
 
         setOutLinkAtIdx(link, idx);
@@ -50,7 +49,7 @@ public class OutState {
 
     @Override
     public String toString() {
-        return "OS["+String.format("%08X", pins.out)+"|"+String.format("%08X", pins.hiz)+"]";
+        return "OS[O:"+String.format("%08X", pins.out)+"|Z:"+String.format("%08X", pins.hiz)+"]";
     }
 
     @Override
@@ -64,4 +63,19 @@ public class OutState {
 
         return this.pins.equals(((OutState)o).pins);
     }
+
+    @Override
+    public OutStatePins getInternalState() {
+        return pins;
+    }
+
+    @Override
+    public boolean isStateFull() {
+        return links.length == lastOutLinkIdx;
+    }
+
+    @Override
+    public GraphLink[] getLinks() {
+        return links;
+    }
 }