OverlayUI ui;
ControlUI controlUI;
MappingUI mappingUI;
-PandaDriver pandaFront;
-PandaDriver pandaRear;
+PandaDriver[] pandaBoards;
boolean mappingMode = false;
-
-boolean pandaBoardsEnabled = false;
-
boolean debugMode = false;
DebugUI debugUI;
int[][] frontChannels = glucose.mapping.buildFrontChannelList();
int[][] rearChannels = glucose.mapping.buildRearChannelList();
mappingTool = new MappingTool(glucose, frontChannels, rearChannels);
- pandaFront = new PandaDriver(new NetAddress("10.200.1.28", 9001), glucose.model, frontChannels);
- pandaRear = new PandaDriver(new NetAddress("10.200.1.29", 9001), glucose.model, rearChannels);
+ pandaBoards = new PandaDriver[] {
+ new PandaDriver("10.200.1.28", glucose.model, frontChannels),
+ new PandaDriver("10.200.1.29", glucose.model, rearChannels),
+ };
logTime("Build PandaDriver");
// Build overlay UI
}
// TODO(mcslee): move into GLucose engine
- if (pandaBoardsEnabled) {
- // pandaFront.send(colors);
- pandaRear.send(colors);
+ for (PandaDriver p : pandaBoards) {
+ p.send(colors);
}
}
}
break;
case 'p':
- pandaBoardsEnabled = !pandaBoardsEnabled;
- println("PandaBoard Output: " + (pandaBoardsEnabled ? "ON" : "OFF"));
+ for (PandaDriver p : pandaBoards) {
+ p.toggle();
+ }
break;
case 'u':
uiOn = !uiOn;
}
int mx, my;
-
void mousePressed() {
- if (mouseX > ui.leftPos) {
- ui.mousePressed();
- } else {
+ ui.mousePressed();
+ if (mouseX < ui.leftPos) {
if (debugMode) {
debugUI.mousePressed();
}
}
void mouseReleased() {
- if (mouseX > ui.leftPos) {
- ui.mouseReleased();
- }
+ ui.mouseReleased();
}
void mouseWheel(int delta) {
protected final int STATE_ACTIVE = 1;
protected final int STATE_PENDING = 2;
+ protected int[] pandaLeft = new int[pandaBoards.length];
+ protected final int pandaWidth = 56;
+ protected final int pandaHeight = 13;
+ protected final int pandaTop = height-16;
+
protected OverlayUI() {
leftPos = width - w;
leftTextPos = leftPos + 4;
text("FPS: " + (((int)(frameRate * 10)) / 10.), 4, height-6);
text("Target (-/+):", 50, height-6);
fill(#000000);
- rect(104, height-16, 20, 12);
+ rect(104, height-16, 20, 13);
fill(#666666);
text("" + targetFramerate, 108, height-6);
text("PandaOutput (p):", 134, height-6);
- fill(#000000);
- rect(214, height-16, 26, 12);
- fill(#666666);
- text(pandaBoardsEnabled ? "ON" : "OFF", 218, height-6);
+ int lPos = 214;
+ int pi = 0;
+ for (PandaDriver p : pandaBoards) {
+ pandaLeft[pi++] = lPos;
+ fill(p.enabled ? #666666 : #000000);
+ rect(lPos, pandaTop, pandaWidth, pandaHeight);
+ fill(p.enabled ? #000000 : #666666);
+ text(p.ip, lPos + 4, height-6);
+ lPos += 60;
+ }
}
patternKnobIndex = transitionKnobIndex = effectKnobIndex = -1;
releaseEffect = -1;
patternScrolling = false;
+
+ for (int p = 0; p < pandaLeft.length; ++p) {
+ int xp = pandaLeft[p];
+ if ((mouseX >= xp) &&
+ (mouseX < xp + pandaWidth) &&
+ (mouseY >= pandaTop) &&
+ (mouseY < pandaTop + pandaHeight)) {
+ pandaBoards[p].toggle();
+ }
+ }
+
+ if (mouseX < leftPos) {
+ return;
+ }
+
if (mouseY > tempoY) {
if (mouseY - tempoY < tempoHeight) {
lx.tempo.tap();
public void mousePressed() {
dragCube = dragStrip = dragChannel = false;
lastY = mouseY;
+
+ if (mouseX < leftPos) {
+ return;
+ }
+
if (mouseY >= stripFieldY) {
if (mouseY < stripFieldY + lineHeight) {
dragStrip = true;
*/
public class PandaDriver {
+ // IP address
+ public final String ip;
+
// Address to send to
private final NetAddress address;
+ // Whether board output is enabled
+ private boolean enabled = false;
+
// OSC message
private final OscMessage message;
// Packet data
private final byte[] packet = new byte[4*352]; // TODO: de-magic-number, UDP related?
- public PandaDriver(NetAddress address, Model model, int[][] channelList) {
- this.address = address;
+ public PandaDriver(String ip, Model model, int[][] channelList) {
+ this.ip = ip;
+ this.address = new NetAddress(ip, 9001);
message = new OscMessage("/shady/pointbuffer");
List<Integer> pointList = buildMappedList(model, channelList);
points = new int[pointList.size()];
points[i++] = value;
}
}
+
+ public void toggle() {
+ enabled = !enabled;
+ println("PandaBoard/" + ip + " Output: " + (enabled ? "ON" : "OFF"));
+ }
private ArrayList<Integer> buildMappedList(Model model, int[][] channelList) {
ArrayList<Integer> points = new ArrayList<Integer>();
}
public final void send(int[] colors) {
+ if (!enabled) {
+ return;
+ }
int len = 0;
int packetNum = 0;
for (int index : points) {