checkpoint
authoradam <adam@megacz.com>
Thu, 19 Apr 2007 04:03:28 +0000 (05:03 +0100)
committeradam <adam@megacz.com>
Thu, 19 Apr 2007 04:03:28 +0000 (05:03 +0100)
Makefile
src/com/atmel/fpslic/Fpslic.java
src/edu/berkeley/slipway/AsyncPaperDemo.java
src/edu/berkeley/slipway/gui/G.java
src/edu/berkeley/slipway/gui/Gui.java
src/edu/berkeley/slipway/gui/ZoomingPanel.java

index a210e01..07d824e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,9 @@ endif
 run: slipway.jar 
        java -cp slipway.jar edu.berkeley.slipway.Demo 30
 
+demo: slipway.jar 
+       java -cp slipway.jar edu.berkeley.slipway.Demo2 30
+
 build/src/com/ftdi/usb/FtdiUart.c: src/com/ftdi/usb/FtdiUart.i
        mkdir -p `dirname $@`
        mkdir -p src/com/ftdi/usb
@@ -25,10 +28,10 @@ build/$(jnilib): build/src/com/ftdi/usb/FtdiUart.c upstream/libusb/.built
                $(linkerflags) \
                -o $@ -dynamiclib -framework JavaVM
 
-slipway.jar: build/$(jnilib) $(shell find src build/src -name \*.java) bitstreams/slipway_drone.bst
+slipway.jar: build/$(jnilib) $(shell find src build/src -name \*.java) bitstreams/slipway_drone_complete.bst
        mkdir -p build
        javac -d build $(shell find src build/src -name \*.java)
-       cp bitstreams/slipway_drone.bst build/edu/berkeley/slipway/
+       cp bitstreams/slipway_drone_complete.bst build/edu/berkeley/slipway/
        cd build; jar cvf ../$@ .
 
 
@@ -57,14 +60,15 @@ build/slipway_drone.hex: src/edu/berkeley/slipway/FtdiBoardSlave.c  upstream/avr
        upstream/prefix/bin/avr-objcopy -O ihex $@.o $@
 
 # this only works on my personal setup [adam]
-bitstreams/slipway_drone.bst: build/slipway_drone.hex
-       cp $< /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
-       fs flush /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
+bitstreams/slipway_drone_complete.bst: build/slipway_drone.hex
+       cp $<    /afs/research.cs.berkeley.edu/user/megacz/slipway/$<
+       fs flush /afs/research.cs.berkeley.edu/user/megacz/slipway/$<
        echo okay...
        read
-       rm /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
-       diff -u /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst $@ && exit -1; true
-       mv /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst $@
+       rm /afs/research.cs.berkeley.edu/user/megacz/slipway/$<
+       diff -u /afs/research.cs.berkeley.edu/user/megacz/slipway/$@ $@ && \
+               exit -1; true
+       mv /afs/research.cs.berkeley.edu/user/megacz/slipway/$@ $@
        touch $@
 
 
index 5056ba2..b72a69b 100644 (file)
@@ -495,7 +495,7 @@ public abstract class Fpslic {
         public int yi() {
             if ((mode4(0x02, row, col) & (1<<6))!=0) return L4;
             switch(mode4(0x04, row, col) & 0xff) {
-                case 0x80: return NORTH;
+                case (1<<7): return NORTH;
                 case (1<<5): return SOUTH;
                 case (1<<6): return WEST;
                 case (1<<4): return EAST;
index a51020a..2877678 100644 (file)
@@ -27,16 +27,16 @@ public class AsyncPaperDemo {
         //turnOnLeds();
         setupScanCell();
 
-        //runGui(24, 24);
-        
         for(int i=0; i<255; i++)
             fpslic.readCount();
 
+
         //System.in.read();
-        for(int i=240; i<400; i+=2) {
+        for(int i=400; i<402; i+=2) {
             go(i);
         }
-        //System.out.println("done");
+        runGui(24, 24);
+        System.out.println("done");
 
     }
 
@@ -62,7 +62,7 @@ public class AsyncPaperDemo {
         reconfigTopLeft();
         reconfigTopRight();
         fpslic.flush();
-
+        /*
         for(int i=0; i<23; i++){
             Fpslic.Cell c = fpslic.cell(0, i);
             c.ylut(0x00);
@@ -74,7 +74,7 @@ public class AsyncPaperDemo {
                 sw=sw.east())
                 sw.west().drives(sw, true);
         }
-
+        */
         String sizes = rsize+"";
         while(sizes.length()<3) sizes = "0"+sizes;
         String fname = "data/size"+sizes+".csv";
@@ -515,6 +515,7 @@ public class AsyncPaperDemo {
     private void runGui(int width, int height) throws Exception {
         Gui vis = new Gui(fpslic, fpslic, width, height);
         Frame fr = new Frame();
+        fr.setTitle("SLIPWAY Live Fabric Debugger");
         fr.addKeyListener(vis);
         fr.setLayout(new BorderLayout());
         fr.add(vis, BorderLayout.CENTER);
index 233e55b..18ad767 100644 (file)
@@ -42,4 +42,81 @@ public class G {
                              ));
     }
 
+    private ArrayList<AffineTransform> transformStack =
+        new ArrayList<AffineTransform>();
+
+    public void pushTransform() {
+        transformStack.add(new AffineTransform(g.getTransform()));
+    }
+    public void popTransform() {
+        AffineTransform t = transformStack.remove(transformStack.size()-1);
+        g.setTransform(t);
+    }
+
+    public void fillTriangle(double x1, double y1, 
+                             double x2, double y2, 
+                             double x3, double y3) {
+        GeneralPath gp = new GeneralPath();
+        gp.moveTo((float)x1, (float)y1);
+        gp.lineTo((float)x2, (float)y2);
+        gp.lineTo((float)x3, (float)y3);
+        gp.closePath();
+        g.fill(gp);
+    }
+
+    public void route(P p1, R r, P p2) {
+        if      (p1.x < r.minx() && p1.y < r.miny()) { line(p1, r.minx(), r.miny()); route(new P(r.minx(), r.miny()), r, p2); }
+        else if (p1.x > r.maxx() && p1.y < r.miny()) { line(p1, r.maxx(), r.miny()); route(new P(r.maxx(), r.miny()), r, p2); }
+        else if (p1.x < r.minx() && p1.y > r.maxy()) { line(p1, r.minx(), r.maxy()); route(new P(r.minx(), r.maxy()), r, p2); }
+        else if (p1.x > r.maxx() && p1.y > r.maxy()) { line(p1, r.maxx(), r.maxy()); route(new P(r.maxx(), r.maxy()), r, p2); }
+        else if (p1.x < r.minx()) { line(p1, r.minx(), p1.y); route(new P(r.minx(), p1.y), r, p2); }
+        else if (p1.x > r.maxx()) { line(p1, r.maxx(), p1.y); route(new P(r.maxx(), p1.y), r, p2); }
+        else if (p1.y < r.miny()) { line(p1, p1.x, r.miny()); route(new P(p1.x, r.miny()), r, p2); }
+        else if (p1.y > r.maxy()) { line(p1, p1.x, r.maxy()); route(new P(p1.x, r.maxy()), r, p2); }
+        else {
+            double updist    = Math.abs(r.maxy()-p2.y);
+            double downdist  = Math.abs(r.miny()-p2.y);
+            double leftdist  = Math.abs(r.minx()-p2.x);
+            double rightdist = Math.abs(r.maxx()-p2.x);
+            if (updist != 0 && updist <= downdist && updist <= leftdist && updist <= rightdist)
+                { line(p2, p2.x, r.maxy()); route(p1, r, new P(p2.x, r.maxy())); }
+            else if (downdist != 0 && downdist <= updist && downdist <= leftdist && downdist <= rightdist)
+                { line(p2, p2.x, r.miny()); route(p1, r, new P(p2.x, r.miny())); }
+            else if (leftdist != 0 && leftdist <= downdist && leftdist <= updist && leftdist <= rightdist)
+                { line(p2, r.minx(), p2.y); route(p1, r, new P(r.minx(), p2.y)); }
+            else if (rightdist != 0 && rightdist <= updist && rightdist <= downdist && rightdist <= leftdist)
+                { line(p2, r.maxx(), p2.y); route(p1, r, new P(r.maxx(), p2.y)); }
+            else {
+                if (p2.x == p1.x && (p2.x==r.maxx() || p2.x==r.minx())) line(p1, p2);
+                else if (p2.y == p1.y && (p2.y==r.maxy() || p2.y==r.miny())) line(p1, p2);
+
+                // these cases are where p1 and p2 are each on opposite sides
+                else if (p2.y==r.maxy() && p1.y==r.miny() && p1.x!=r.minx() && p1.x!=r.maxx() && p2.x!=r.minx() && p2.x!=r.maxx()) { }
+                else if (p1.y==r.maxy() && p2.y==r.miny() && p1.x!=r.minx() && p1.x!=r.maxx() && p2.x!=r.minx() && p2.x!=r.maxx()) { }
+                else if (p1.x==r.maxx() && p2.x==r.minx() && p1.y!=r.miny() && p1.y!=r.maxy() && p2.y!=r.miny() && p2.y!=r.maxy()) { }
+                else if (p2.x==r.maxx() && p1.x==r.minx() && p1.y!=r.miny() && p1.y!=r.maxy() && p2.y!=r.miny() && p2.y!=r.maxy()) { }
+
+                else {
+                    if (Math.abs(p1.x-p2.x) < Math.abs(p1.y-p2.y)) {
+                        if (p1.x == r.minx() || p1.x == r.maxx()) {
+                            line(p2, p1.x, p2.y);
+                            route(p1, r, new P(p1.x, p2.y));
+                        } else {
+                            line(p1, p2.x, p1.y);
+                            route(p2, r, new P(p2.x, p1.y));
+                        }
+                    } else {
+                        if (p1.y == r.miny() || p1.y == r.maxy()) {
+                            line(p2, p2.x, p1.y);
+                            route(p1, r, new P(p2.x, p1.y));
+                        } else {
+                            line(p1, p1.x, p2.y);
+                            route(p2, r, new P(p1.x, p2.y));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
 }
index 7b8acee..5dbac20 100644 (file)
@@ -71,6 +71,7 @@ public class Gui extends ZoomingPanel implements KeyListener, MouseMotionListene
 
 
 
+
         new Thread() {
             public void run() {
                 while(true) scan();
@@ -108,7 +109,8 @@ public class Gui extends ZoomingPanel implements KeyListener, MouseMotionListene
             return cell.relevant();
         }
         public void clear() {
-            gg.color(in ? selectedcell : (scanme() ? new Color(0xbb, 0xbb, 0xbb) : nonselectedcell));
+            gg.color(0xffffff);
+            //gg.color(in ? selectedcell : (scanme() ? new Color(0xbb, 0xbb, 0xbb) : nonselectedcell));
             g.fillRect(0, 0, SIZE, SIZE);
         }
         public void draw() {
@@ -564,7 +566,7 @@ public class Gui extends ZoomingPanel implements KeyListener, MouseMotionListene
         repaint();
     }
     public void drawKeyboard(Image keyboardImage, Graphics2D g) {
-        /*
+
                 int width = 300;
                 int height = (keyboardImage.getHeight(null) * width) / keyboardImage.getWidth(null);
                 g.drawImage(keyboardImage,
@@ -573,7 +575,7 @@ public class Gui extends ZoomingPanel implements KeyListener, MouseMotionListene
                             0, 0,
                             keyboardImage.getWidth(null), keyboardImage.getHeight(null),
                             null);
-        */
+
     }
 
     public void _paint(Graphics2D g) {
@@ -1153,8 +1155,11 @@ public class Gui extends ZoomingPanel implements KeyListener, MouseMotionListene
         public boolean result(boolean x, boolean y, boolean z) { return z; }
     }
 
-    private static Image keyboard1 = Toolkit.getDefaultToolkit().createImage("keyboard1.png");
-    private static Image keyboard2 = Toolkit.getDefaultToolkit().createImage("keyboard2.png");
-    private static Image keyboard3 = Toolkit.getDefaultToolkit().createImage("keyboard3.png");
+    private static Image keyboard1 =
+        Toolkit.getDefaultToolkit().createImage("images/keyboard1.png");
+    private static Image keyboard2 =
+        Toolkit.getDefaultToolkit().createImage("images/keyboard2.png");
+    private static Image keyboard3 =
+        Toolkit.getDefaultToolkit().createImage("images/keyboard3.png");
 
 }
index 4d934fd..fc51932 100644 (file)
@@ -16,7 +16,7 @@ import javax.swing.*;
 
 public abstract class ZoomingPanel extends JComponent implements KeyListener, MouseMotionListener, MouseListener {
 
-    double scale = 1.0;
+    double scale = 0.3;
     double oscale = 1.0;
     public    int dragx = 0;
     public    int dragy = 0;
@@ -24,7 +24,7 @@ public abstract class ZoomingPanel extends JComponent implements KeyListener, Mo
     protected int mousex;
     protected int mousey;
     protected AffineTransform transform = new AffineTransform();
-    private   Point2D recenter;
+    private   Point2D recenter = new Point2D.Double(-100, 2500);
     private   Point2D recenter2;
 
     private FtdiBoard ftdiboard;