Merge branch 'master' of gitolite@git.ctdo.de:bunti
Conflicts: bunti_server/src/main/java/de/ctdo/dmx/DMXMixer.java
This commit is contained in:
commit
0bd6c5acf7
|
@ -1,103 +0,0 @@
|
|||
package de.ctdo.dmx;
|
||||
|
||||
import java.net.SocketException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import artnet4j.ArtNet;
|
||||
import artnet4j.ArtNetException;
|
||||
import artnet4j.ArtNetNode;
|
||||
import artnet4j.packets.ArtDmxPacket;
|
||||
|
||||
public class DMXMixer {
|
||||
|
||||
final int TICKS_BETWEEN_DMX_SEND = 20;
|
||||
final int DMX_MIN_CHANNEL = 0;
|
||||
final int DMX_MAX_CHANNEL = 512;
|
||||
final String ARTNET_DEVICE_ADDRESS = "192.168.0.90";
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(DMXMixer.class);
|
||||
int[] dmx512databuffer = new int[512];
|
||||
static int sequenceID = 0;
|
||||
ArtNet artnet = new ArtNet();
|
||||
ArtNetNode firstNodeFound = null;
|
||||
ArtDmxPacket artnetDmxPacket = null;
|
||||
long ticksLastBufferFlush = 0;
|
||||
|
||||
|
||||
|
||||
protected final List<DMXDataChangedListener> listeners = new ArrayList<DMXDataChangedListener>();
|
||||
|
||||
|
||||
public void addListener(DMXDataChangedListener l) {
|
||||
synchronized (listeners) {
|
||||
listeners.add(l);
|
||||
}
|
||||
}
|
||||
public void removeListener(DMXDataChangedListener l) {
|
||||
synchronized (listeners) {
|
||||
listeners.remove(l);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public DMXMixer() {
|
||||
|
||||
artnetDmxPacket = new ArtDmxPacket();
|
||||
artnetDmxPacket.setUniverse(0, 0);
|
||||
|
||||
try {
|
||||
artnet.start();
|
||||
}
|
||||
catch (ArtNetException e) {
|
||||
logger.error("ArtNetException... " + e.toString());
|
||||
}
|
||||
catch (SocketException e) {
|
||||
logger.error("SocketException... " + e.toString());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void sendOutDMXBuffer() {
|
||||
|
||||
byte[] arr = new byte[dmx512databuffer.length];
|
||||
for (int i = 0; i < dmx512databuffer.length; i++) {
|
||||
arr[i] = (byte)dmx512databuffer[i];
|
||||
}
|
||||
artnetDmxPacket.setSequenceID(sequenceID % 255);
|
||||
artnetDmxPacket.setDMX(arr, arr.length);
|
||||
artnet.unicastPacket(artnetDmxPacket, ARTNET_DEVICE_ADDRESS);
|
||||
|
||||
sequenceID++;
|
||||
|
||||
ticksLastBufferFlush = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void sendOutDMXBufferIfNeeded() {
|
||||
if(ticksLastBufferFlush + TICKS_BETWEEN_DMX_SEND < System.currentTimeMillis()) {
|
||||
sendOutDMXBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
public void setDMX512Channel(int channel, int value) {
|
||||
if(channel < DMX_MIN_CHANNEL || channel > DMX_MAX_CHANNEL) {
|
||||
return;
|
||||
}
|
||||
if(value < 0) value = 0;
|
||||
if(value > 255) value = 255;
|
||||
|
||||
dmx512databuffer[channel-1] = value;
|
||||
|
||||
|
||||
sendOutDMXBufferIfNeeded();
|
||||
|
||||
for (DMXDataChangedListener l : this.listeners) {
|
||||
l.DMXDataChanged(dmx512databuffer);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue