Mapping for Asana hackathon
[SugarCubes.git] / _PandaDriver.pde
index d2998a729cdcc22342a5e02899d886cbc4e1d691..5d8ad249bbe3171446033c720c1d15f60cfda226 100644 (file)
@@ -15,7 +15,13 @@ import oscP5.*;
  * will be moved into GLucose once stabilized.
  */
 public static class PandaDriver {
-
+  
+  interface Listener {
+    public void onToggle(boolean enabled);
+  }
+  
+  private Listener listener = null;
+  
   // IP address
   public final String ip;
   
@@ -36,23 +42,6 @@ public static class PandaDriver {
 
   private static final int NO_POINT = -1;
 
-  public PandaDriver(String ip) {
-    this.ip = ip;
-    
-    // Initialize our OSC output stuff
-    address = new NetAddress(ip, 9001);
-    message = new OscMessage("/shady/pointbuffer");
-
-    // Build the array of points, initialize all to nothing
-    points = new int[PandaMapping.PIXELS_PER_BOARD];
-    for (int i = 0; i < points.length; ++i) {
-      points[i] = NO_POINT;
-    }
-  }
-
-  private final static int FORWARD = -1;
-  private final static int BACKWARD = -2;
-
   ////////////////////////////////////////////////////////////////
   //
   // READ THIS RIGHT NOW BEFORE YOU MODIFY THE BELOW!!!!!!!!!!!!!
@@ -86,6 +75,8 @@ public static class PandaDriver {
   //
   ////////////////////////////////////////////////////////////////
   
+  private final static int FORWARD = -1;
+  private final static int BACKWARD = -2;
 
   /**
    * These constant arrays indicate the order in which the strips of a cube
@@ -93,10 +84,17 @@ public static class PandaDriver {
    * corner of the cube the data wire comes in.
    */
   private final static int[][] CUBE_STRIP_ORDERINGS = new int[][] {
+//    {  2,  1,  0,  3, 13, 12, 15, 14,  4,  7,  6,  5, 11, 10,  9,  8 }, // FRONT_LEFT
+//    {  6,  5,  4,  7,  1,  0,  3,  2,  8, 11, 10,  9, 15, 14, 13, 12 }, // FRONT_RIGHT
+//    { 14, 13, 12, 15,  9,  8, 11, 10,  0,  3,  2,  1,  7,  6,  5,  4 }, // REAR_LEFT
+//    { 10,  9,  8, 11,  5,  4,  7,  6, 12, 15, 14, 13,  3,  2,  1,  0 }, // REAR_RIGHT
+
+
     {  2,  1,  0,  3, 13, 12, 15, 14,  4,  7,  6,  5, 11, 10,  9,  8 }, // FRONT_LEFT
     {  6,  5,  4,  7,  1,  0,  3,  2,  8, 11, 10,  9, 15, 14, 13, 12 }, // FRONT_RIGHT
     { 14, 13, 12, 15,  9,  8, 11, 10,  0,  3,  2,  1,  7,  6,  5,  4 }, // REAR_LEFT
-    { 10,  9,  8, 11,  5,  4,  7,  6, 12, 15, 14, 13,  3,  2,  1,  0 }, // REAR_RIGHT
+    {  9,  8, 11,  5,  4,  7,  6, 10, 14,  2,  1,  0,  3, 13, 12, 15 }, // REAR_RIGHT
+
   };
   
   private final static int[][] BASS_STRIP_ORDERING = {
@@ -147,7 +145,7 @@ public static class PandaDriver {
   // as cubes with Wiring.FRONT_LEFT. If this needs to be changed,
   // remove this null assignment and change the below to have mappings
   // for the LEFT and RIGHT speaker
-  private final static int[][][] SPEAKER_STRIP_ORDERING = null; /* {
+  private final static int[][][] SPEAKER_STRIP_ORDERING = {
     // Left speaker
     { 
       // Front face, counter-clockwise from bottom left
@@ -164,14 +162,25 @@ public static class PandaDriver {
       {0, BACKWARD },
       {3, BACKWARD },
     }
-  };*/
-  
-  private final static int[][] LEFT_SPEAKER_STRIP_ORDERING = {
   };
-  
+
+  public PandaDriver(String ip) {
+    this.ip = ip;
+    
+    // Initialize our OSC output stuff
+    address = new NetAddress(ip, 9001);
+    message = new OscMessage("/shady/pointbuffer");
+    
+    // Build the array of points, initialize all to nothing
+    points = new int[PandaMapping.PIXELS_PER_BOARD];
+    for (int i = 0; i < points.length; ++i) {
+      points[i] = NO_POINT;
+    }
+  }
+    
   public PandaDriver(String ip, Model model, PandaMapping pm) {
     this(ip);
-
+    
     // Ok, we are initialized, time to build the array if points in order to
     // send out. We start at the head of our point buffer, and work our way
     // down. This is the order in which points will be sent down the wire.
@@ -262,7 +271,7 @@ public static class PandaDriver {
   
   private int mapStrip(Strip s, int direction, int[] points, int pi) {
     if (direction == FORWARD) {
-      for (Point p : s.points) {
+      for (LXPoint p : s.points) {
         points[pi++] = p.index;
       }
     } else if (direction == BACKWARD) {
@@ -275,23 +284,35 @@ public static class PandaDriver {
     return pi;
   }
 
-  public void disable() {
-    if (enabled) {
-      enabled = false;
-      println("PandaBoard/" + ip + ": OFF");
+  public PandaDriver setListener(Listener listener) {
+    this.listener = listener;
+    return this;
+  }
+
+  public void setEnabled(boolean enabled) {
+    if (this.enabled != enabled) {
+      this.enabled = enabled;
+      println("PandaBoard/" + ip + ": " + (enabled ? "ON" : "OFF"));
+      if (listener != null) {
+        listener.onToggle(enabled);
+      }
     }
   }
   
+  public boolean isEnabled() {
+    return this.enabled;
+  }
+
+  public void disable() {
+    setEnabled(false);
+  }
+  
   public void enable() {
-    if (!enabled) {
-      enabled = true;
-      println("PandaBoard/" + ip + ": ON");
-    }
+    setEnabled(true);
   }
 
   public void toggle() {
-    enabled = !enabled;
-    println("PandaBoard/" + ip + ": " + (enabled ? "ON" : "OFF"));    
+    setEnabled(!enabled);
   }
 
   public final void send(int[] colors) {
@@ -323,6 +344,7 @@ public static class PandaDriver {
     }
   }
   
+
   private void sendPacket(int packetNum) {
     message.clearArguments();
     message.add(packetNum);
@@ -335,4 +357,3 @@ public static class PandaDriver {
     }
   }
 }
-