FADING
}
+ public enum LevelWriteMode {
+ ALL((byte) 0x00),
+ COLORS((byte) 0xF0),
+ WHITES((byte) 0x0F);
+
+ public final byte byteValue;
+
+ private LevelWriteMode(byte byteValue) {
+ this.byteValue = byteValue;
+ }
+ }
+
public static final Integer DEFAULT_PORT = 5577;
protected static final int DEFAULT_SOCKET_TIMEOUT = 5000;
}
protected byte[] getBytesForColor(byte r, byte g, byte b, byte w, byte w2) {
+ return getBytesForColor(r, g, b, w, w2, LevelWriteMode.ALL);
+ }
+
+ protected byte[] getBytesForColor(byte r, byte g, byte b, byte w, byte w2, LevelWriteMode writeMode) {
byte[] bytes;
if (protocol == Protocol.LD382 || protocol == Protocol.LD382A) {
- bytes = new byte[] { 0x31, r, g, b, w, 0x00 };
+ bytes = new byte[] { 0x31, r, g, b, w, writeMode.byteValue };
} else if (protocol == Protocol.LD686) {
- bytes = new byte[] { 0x31, r, g, b, w, w2, 0x00 };
+ bytes = new byte[] { 0x31, r, g, b, w, w2, writeMode.byteValue };
} else {
throw new UnsupportedOperationException("Protocol " + protocol + " not yet implemented");
}
logger.debug("Setting color to {}", color);
LEDStateDTO ledState = getLEDStateDTO().withColor(color).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.COLORS);
}
@Override
logger.debug("Setting brightness to {}", brightness);
LEDStateDTO ledState = getLEDStateDTO().withBrightness(brightness).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.COLORS);
}
@Override
logger.debug("Changing brightness by {}", step);
LEDStateDTO ledState = getLEDStateDTO().withIncrementedBrightness(step).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.COLORS);
}
@Override
logger.debug("Setting (warm) white LED to {}", white);
LEDStateDTO ledState = getLEDStateDTO().withWhite(white).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.WHITES);
}
@Override
logger.debug("Changing white by {}", step);
LEDStateDTO ledState = getLEDStateDTO().withIncrementedWhite(step).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.WHITES);
}
@Override
logger.debug("Setting (warm) white 2 LED to {}", white2);
LEDStateDTO ledState = getLEDStateDTO().withWhite2(white2).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.WHITES);
}
@Override
logger.debug("Changing white by {}", step);
LEDStateDTO ledState = getLEDStateDTO().withIncrementedWhite2(step).withoutProgram();
- sendLEDData(ledState);
+ sendLEDData(ledState, LevelWriteMode.WHITES);
}
@Override
}
private synchronized void sendLEDData(final LEDStateDTO ledState) {
+ this.sendLEDData(ledState, LevelWriteMode.ALL);
+ }
+
+ private synchronized void sendLEDData(final LEDStateDTO ledState, LevelWriteMode writeMode) {
cachedLedStatus = ledState;
if (!ledUpdateFuture.isDone()) {
ledUpdateFuture.cancel(true);
byte w = (byte) (((int) (ledState.getWhite().doubleValue() * 255 / 100)) & 0xFF);
byte w2 = (byte) (((int) (ledState.getWhite2().doubleValue() * 255 / 100)) & 0xFF);
- bytes = getBytesForColor(r, g, b, w, w2);
+ bytes = getBytesForColor(r, g, b, w, w2, writeMode);
} else {
// program selected
byte p = (byte) (program & 0xFF);