2012-03-03 01:29:06 +00:00
|
|
|
package de.ctdo.bunti.dmx;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
import de.ctdo.bunti.DeviceChangedEvent;
|
2012-03-03 01:29:06 +00:00
|
|
|
import de.ctdo.bunti.dao.BuntiDevicesDAO;
|
|
|
|
import de.ctdo.bunti.model.*;
|
|
|
|
|
|
|
|
@Component
|
|
|
|
public class DMXMixerImpl implements DMXMixer {
|
2012-03-03 12:00:53 +00:00
|
|
|
private Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
|
private final int TICKS_BETWEEN_DMX_SEND = 20;
|
|
|
|
// private final String ARTNET_DEVICE_ADDRESS = "192.168.0.90";
|
2012-03-03 01:29:06 +00:00
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
private int[] dmx512databuffer = new int[DMX.DMX_CHANNELS_MAX+1];
|
2012-03-03 01:29:06 +00:00
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
// private int sequenceID = 0;
|
|
|
|
private long ticksLastBufferFlush = 0;
|
|
|
|
private BuntiDevicesDAO devicesDAO;
|
2012-03-03 01:29:06 +00:00
|
|
|
|
|
|
|
@Autowired
|
|
|
|
public void setDevicesDAO(BuntiDevicesDAO devicesDAO) {
|
|
|
|
this.devicesDAO = devicesDAO;
|
|
|
|
}
|
2012-03-03 12:00:53 +00:00
|
|
|
|
2012-03-03 01:29:06 +00:00
|
|
|
|
|
|
|
private void sendOutDMXBuffer() {
|
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.append("DMX Data: ");
|
|
|
|
|
|
|
|
byte[] arr = new byte[dmx512databuffer.length];
|
|
|
|
for (int i = 0; i < dmx512databuffer.length; i++) {
|
|
|
|
arr[i] = (byte)dmx512databuffer[i];
|
|
|
|
sb.append(i);
|
|
|
|
sb.append("=");
|
|
|
|
sb.append(dmx512databuffer[i]);
|
|
|
|
sb.append(", ");
|
|
|
|
}
|
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
// sequenceID++;
|
2012-03-03 01:29:06 +00:00
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
logger.debug(sb.toString());
|
2012-03-03 01:29:06 +00:00
|
|
|
}
|
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
|
2012-03-03 01:29:06 +00:00
|
|
|
public void sendOutDMXBufferIfNeeded() {
|
|
|
|
if(ticksLastBufferFlush + TICKS_BETWEEN_DMX_SEND < System.currentTimeMillis()) {
|
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
// mergeDevicesIntoBuffer();
|
2012-03-03 01:29:06 +00:00
|
|
|
sendOutDMXBuffer();
|
|
|
|
ticksLastBufferFlush = System.currentTimeMillis();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
private void updateDevice(BuntiDevice device, Map<String, Object> options) {
|
|
|
|
BuntiDMXDevice dmxDev = (BuntiDMXDevice)device;
|
|
|
|
boolean retval = dmxDev.setValuesFromOptions(options);
|
|
|
|
|
|
|
|
if( retval ) {
|
|
|
|
dmxDev.mergeDMXData(dmx512databuffer);
|
2012-03-03 01:29:06 +00:00
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
sendOutDMXBufferIfNeeded();
|
|
|
|
} else {
|
|
|
|
logger.error("setValuesFromOptions failed");
|
2012-03-03 01:29:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2012-03-03 12:00:53 +00:00
|
|
|
|
|
|
|
// private void mergeDevicesIntoBuffer() {
|
|
|
|
//
|
|
|
|
// for (BuntiDMXDevice buntiDMXDevice : devicesDAO.getAllDMXDevices()) {
|
|
|
|
// long lastchanged = buntiDMXDevice.getLastChanged();
|
|
|
|
// long lastSend = buntiDMXDevice.getLastSendOut();
|
|
|
|
//
|
|
|
|
// if (lastchanged >= lastSend) {
|
|
|
|
// buntiDMXDevice.mergeDMXData(dmx512databuffer);
|
|
|
|
// logger.debug("merged " + buntiDMXDevice + " into dmx buffer");
|
|
|
|
// buntiDMXDevice.setSendOutNow();
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// }
|
2012-03-03 01:29:06 +00:00
|
|
|
|
|
|
|
// public void setDMX512Channel(int channel, int value) {
|
|
|
|
// if(!DMX.checkChannelBoundaries(channel)) return;
|
|
|
|
// value = DMX.sanitizeDMXValue(value);
|
|
|
|
//
|
|
|
|
// dmx512databuffer[channel] = value;
|
|
|
|
//
|
|
|
|
// sendOutDMXBufferIfNeeded();
|
|
|
|
// }
|
|
|
|
|
|
|
|
@Override
|
2012-03-03 12:00:53 +00:00
|
|
|
public void onApplicationEvent(DeviceChangedEvent arg0) {
|
2012-03-03 01:29:06 +00:00
|
|
|
|
2012-03-03 12:00:53 +00:00
|
|
|
if( arg0.getDevice() instanceof BuntiDMXDevice) {
|
|
|
|
|
|
|
|
updateDevice(arg0.getDevice(), arg0.getOptions());
|
|
|
|
|
2012-03-03 01:29:06 +00:00
|
|
|
}
|
|
|
|
}
|
2012-03-03 12:00:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-03 01:29:06 +00:00
|
|
|
|
|
|
|
}
|