/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.binding.lifx.internal.protocol; import static org.eclipse.smarthome.binding.lifx.LifxBindingConstants.*; import java.nio.ByteBuffer; import org.eclipse.smarthome.binding.lifx.internal.fields.Field; import org.eclipse.smarthome.binding.lifx.internal.fields.HSBK; import org.eclipse.smarthome.binding.lifx.internal.fields.HSBKField; import org.eclipse.smarthome.binding.lifx.internal.fields.UInt32Field; import org.eclipse.smarthome.binding.lifx.internal.fields.UInt8Field; /** * @author Wouter Born - Add support for MultiZone light control */ public class SetColorZonesRequest extends Packet { public static final int TYPE = 0x1F5; public static final Field<Integer> FIELD_START_INDEX = new UInt8Field(); public static final Field<Integer> FIELD_END_INDEX = new UInt8Field(); public static final HSBKField FIELD_COLOR = new HSBKField(); public static final Field<Long> FIELD_FADE_TIME = new UInt32Field().little(); public static final Field<Integer> FIELD_APPLY = new UInt8Field(); private int startIndex = MIN_ZONE_INDEX; private int endIndex = MAX_ZONE_INDEX; private HSBK color; private long fadeTime; private ApplicationRequest apply; public HSBK getColor() { return color; } public int getHue() { return color.getHue(); } public int getSaturation() { return color.getSaturation(); } public int getBrightness() { return color.getBrightness(); } public int getKelvin() { return color.getKelvin(); } public long getFadeTime() { return fadeTime; } public ApplicationRequest getApply() { return apply; } public SetColorZonesRequest() { setTagged(false); setAddressable(true); setResponseRequired(true); } public SetColorZonesRequest(HSBK color, long fadeTime, ApplicationRequest apply) { this(MIN_ZONE_INDEX, MAX_ZONE_INDEX, color, fadeTime, apply); } public SetColorZonesRequest(int index, HSBK color, long fadeTime, ApplicationRequest apply) { this(index, index, color, fadeTime, apply); } public SetColorZonesRequest(int startIndex, int endIndex, HSBK color, long fadeTime, ApplicationRequest apply) { this(); this.startIndex = startIndex; this.endIndex = endIndex; this.color = color; this.fadeTime = fadeTime; this.apply = apply; } @Override public int packetType() { return TYPE; } @Override protected int packetLength() { return 15; } @Override protected void parsePacket(ByteBuffer bytes) { startIndex = FIELD_START_INDEX.value(bytes); endIndex = FIELD_END_INDEX.value(bytes); color = FIELD_COLOR.value(bytes); fadeTime = FIELD_FADE_TIME.value(bytes); apply = ApplicationRequest.fromValue(FIELD_APPLY.value(bytes)); } @Override protected ByteBuffer packetBytes() { return ByteBuffer.allocate(packetLength()).put(FIELD_START_INDEX.bytes(startIndex)) .put(FIELD_END_INDEX.bytes(endIndex)).put(FIELD_COLOR.bytes(color)).put(FIELD_FADE_TIME.bytes(fadeTime)) .put(FIELD_APPLY.bytes(apply.getValue())); } @Override public int[] expectedResponses() { return new int[] {}; } }