X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_PandaDriver.pde;h=5d8ad249bbe3171446033c720c1d15f60cfda226;hb=270a8b44cd8296bb40fa74e4fcf2e7f7c4f1192c;hp=2c8b96c43653502ed1632cee9a6e73a1989cef7c;hpb=e28f168cec8ae5a8c25cae159af94f5b0aa7b342;p=SugarCubes.git diff --git a/_PandaDriver.pde b/_PandaDriver.pde index 2c8b96c..5d8ad24 100644 --- a/_PandaDriver.pde +++ b/_PandaDriver.pde @@ -1,11 +1,6 @@ import netP5.*; import oscP5.*; -//import hypermedia.net.*; - - - - /** * DOUBLE BLACK DIAMOND DOUBLE BLACK DIAMOND * @@ -19,24 +14,14 @@ import oscP5.*; * 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; - + 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(); - // 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. @@ -290,7 +271,7 @@ public static class PandaDriver extends Thread{ 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) { @@ -303,38 +284,45 @@ public static class PandaDriver extends Thread{ 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); @@ -363,7 +351,6 @@ public static class PandaDriver extends Thread{ 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();