import netP5.*;
import oscP5.*;
+//import hypermedia.net.*;
+
+
+
+
/**
* DOUBLE BLACK DIAMOND DOUBLE BLACK DIAMOND
*
* This class implements the output function to the Panda Boards. It
* will be moved into GLucose once stabilized.
*/
-public static class PandaDriver {
+public static class PandaDriver extends Thread{
+ int lastSeen;
+ void start(){super.start();}
+ void run(){
+ while(true){
+ if(queue.size()>0) {
+ for(int i=0; i<queue.size(); i++){
+ this.sendNow(queue.get(queue.size()-1));
+ queue.clear();
+ }
+ } else {
+ try{sleep(1);} catch(Exception e){}
+ }
+ }
+ }
+
+ //UDP udp; // define the UDP object
// IP address
public final String ip;
public PandaDriver(String ip) {
this.ip = ip;
+ //udp = new UDP(this, 10000);
+
// 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;
}
+ this.start();
}
private final static int FORWARD = -1;
private final static int BACKWARD = -2;
+ ////////////////////////////////////////////////////////////////
+ //
+ // READ THIS RIGHT NOW BEFORE YOU MODIFY THE BELOW!!!!!!!!!!!!!
+ // READ THIS RIGHT NOW BEFORE YOU MODIFY THE BELOW!!!!!!!!!!!!!
+ // READ THIS RIGHT NOW BEFORE YOU MODIFY THE BELOW!!!!!!!!!!!!!
+ //
+ // The mappings below indicate the physical order of strips
+ // connected to a pandaboard channel. The strip numbers are a
+ // reflection of how the model is built.
+ //
+ // For ANYTHING in the model which is a rectangular prism,
+ // which means Cubes, the BassBox, and each Speaker, the
+ // strips are numbered incrementally by face. The first
+ // face is always the FRONT, which you are looking at.
+ // The next face is the RIGHT, then the BACK, then the LEFT.
+ //
+ // For every face, the strips are ordered numerically moving
+ // clockwise from the the TOP LEFT.
+ //
+ // So, for a cube:
+ //
+ // Strip 0: front face, top strip, left to right
+ // Strip 1: front face, right strip, top to bottom
+ // Strip 2: front face, bottom strip, right to left
+ // Strip 3: front face, left strip, bottom to top
+ //
+ // Strip 4: right face, top strip, left to right
+ // ... and so on
+ // Strip 14: left face, bottom strip, right to left
+ // Strip 15: left face, left strip, bottom to top
+ //
+ ////////////////////////////////////////////////////////////////
+
+
/**
* These constant arrays indicate the order in which the strips of a cube
* are wired. There are four different options, depending on which bottom
private final static int[][] BASS_STRIP_ORDERING = {
// front face, counterclockwise from bottom front left
- {2, BACKWARD },
- {1, BACKWARD },
+ {2, BACKWARD /* if this strip has extra pixels, you can add them here */ /*, 4 */ },
+ {1, BACKWARD /* if this strip is short some pixels, substract them here */ /*, -3 */ },
{0, BACKWARD },
{3, BACKWARD },
{3, FORWARD},
{2, BACKWARD},
{1, FORWARD},
- {0, BACKWARD, /* dummy pixels at the end of string, remove when strip is fixed */ 4},
+ {0, BACKWARD},
{7, FORWARD},
};
private final static int[][] LEFT_SPEAKER_STRIP_ORDERING = {
};
+
+ ArrayList<int[]> queue;
public PandaDriver(String ip, Model model, PandaMapping pm) {
this(ip);
+
+ queue = new ArrayList<int[]>();
// 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
}
public final void send(int[] colors) {
- if (!enabled) {
+ queue.add(colors);
+ }
+ public final void sendNow(int[] colors) {
+ if (!enabled || colors==null) {
return;
}
int len = 0;
int packetNum = 0;
- for (int index : points) {
- int c = (index < 0) ? 0 : colors[index];
+ if(points==null) { return; }
+ for (int index: points) {
+ int c = 0;
+ if(index>0) { c= colors[index]; }
byte r = (byte) ((c >> 16) & 0xFF);
byte g = (byte) ((c >> 8) & 0xFF);
byte b = (byte) ((c) & 0xFF);
}
}
+
private void sendPacket(int packetNum) {
message.clearArguments();
message.add(packetNum);
message.add(packet.length);
message.add(packet);
try {
+ //udp.send(packet, "10.200.1.29", 9001);
OscP5.flush(message, address);
} catch (Exception x) {
x.printStackTrace();
}
}
}
-