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 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){}
- }
- }
+public static class PandaDriver {
+
+ interface Listener {
+ public void onToggle(boolean enabled);
}
-
- //UDP udp; // define the UDP object
-
+
+ private Listener listener = null;
+
// IP address
public final String ip;
private static final int NO_POINT = -1;
- 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!!!!!!!!!!!!!
//
////////////////////////////////////////////////////////////////
+ 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
// 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
{0, BACKWARD },
{3, BACKWARD },
}
- };*/
-
- private final static int[][] LEFT_SPEAKER_STRIP_ORDERING = {
};
- ArrayList<int[]> queue;
-
+ 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);
- 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
// down. This is the order in which points will be sent down the wire.
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) {
- queue.add(colors);
- }
- public final void sendNow(int[] colors) {
- if (!enabled || colors==null) {
+ if (!enabled) {
return;
}
int len = 0;
int packetNum = 0;
- if(points==null) { return; }
- for (int index: points) {
- int c = 0;
- if(index>0) { c= colors[index]; }
+ for (int index : points) {
+ int c = (index < 0) ? 0 : colors[index];
byte r = (byte) ((c >> 16) & 0xFF);
byte g = (byte) ((c >> 8) & 0xFF);
byte b = (byte) ((c) & 0xFF);
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();