/**
* Copyright (c) 2010-2016 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.openhab.binding.powermax.internal.message;
import java.util.Arrays;
import org.openhab.binding.powermax.internal.state.PowerMaxState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A class for SETTINGS and SETTINGS_ITEM messages handling
*
* @author Laurent Garnier
* @since 1.9.0
*/
public class PowerMaxSettingsMessage extends PowerMaxBaseMessage {
private static final Logger logger = LoggerFactory.getLogger(PowerMaxSettingsMessage.class);
/**
* Constructor
*
* @param message
* the received message as a buffer of bytes
*/
public PowerMaxSettingsMessage(byte[] message) {
super(message);
}
/**
* {@inheritDoc}
*/
@Override
public PowerMaxState handleMessage() {
super.handleMessage();
PowerMaxState updatedState = new PowerMaxState();
byte[] message = getRawData();
int index = message[2] & 0x000000FF;
int page = message[3] & 0x000000FF;
int length = 0;
if (getReceiveType() == PowerMaxReceiveType.SETTINGS) {
length = message.length - 6;
updatedState.setUpdateSettings(Arrays.copyOfRange(message, 2, 2 + 2 + length));
} else if (getReceiveType() == PowerMaxReceiveType.SETTINGS_ITEM) {
length = message[4] & 0x000000FF;
byte[] data = new byte[length + 2];
int i = 0;
for (int j = 2; j <= 3; j++) {
data[i++] = message[j];
}
for (int j = 0; j < length; j++) {
data[i++] = message[j + 5];
}
updatedState.setUpdateSettings(data);
}
if (logger.isDebugEnabled()) {
logger.debug("Received Powermax setting page {} index {} length {}", String.format("%02X (%d)", page, page),
String.format("%02X (%d)", index, index), String.format("%02X (%d)", length, length));
}
return updatedState;
}
@Override
public String toString() {
String str = super.toString();
byte[] message = getRawData();
int index = message[2] & 0x000000FF;
int page = message[3] & 0x000000FF;
str += "\n - page = " + String.format("%02X (%d)", page, page);
str += "\n - index = " + String.format("%02X (%d)", index, index);
return str;
}
}