/**
* 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.zwave.internal.protocol.serialmessage;
import org.openhab.binding.zwave.internal.protocol.SerialMessage;
import org.openhab.binding.zwave.internal.protocol.SerialMessage.SerialMessageClass;
import org.openhab.binding.zwave.internal.protocol.SerialMessage.SerialMessagePriority;
import org.openhab.binding.zwave.internal.protocol.SerialMessage.SerialMessageType;
import org.openhab.binding.zwave.internal.protocol.ZWaveController;
import org.openhab.binding.zwave.internal.protocol.ZWaveDeviceType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class processes a serial message from the zwave controller
*
* @author Chris Jackson
* @since 1.5.0
*/
public class GetControllerCapabilitiesMessageClass extends ZWaveCommandProcessor {
private static final Logger logger = LoggerFactory.getLogger(GetControllerCapabilitiesMessageClass.class);
private final byte CONTROLLER_IS_SECONDARY = 0x01;
private final byte CONTROLLER_ON_OTHER_NETWORK = 0x02;
private final byte CONTROLLER_NODEID_SERVER_PRESENT = 0x04;
private final byte CONTROLLER_IS_REAL_PRIMARY = 0x08;
private final byte CONTROLLER_IS_SUC = 0x10;
private boolean isSecondary = false;
private boolean isOnOtherNetwork = false;
private boolean isServerPresent = false;
private boolean isRealPrimary = false;
private boolean isSUC = false;
public SerialMessage doRequest() {
logger.debug("Creating GET_CONTROLLER_CAPABILITIES message");
return new SerialMessage(SerialMessageClass.GetControllerCapabilities, SerialMessageType.Request,
SerialMessageClass.GetControllerCapabilities, SerialMessagePriority.High);
}
@Override
public boolean handleResponse(ZWaveController zController, SerialMessage lastSentMessage,
SerialMessage incomingMessage) {
logger.trace("Handle Message Get Controller Capabilities - Length {}",
incomingMessage.getMessagePayload().length);
isSecondary = ((incomingMessage.getMessagePayloadByte(0) & CONTROLLER_IS_SECONDARY) != 0) ? true : false;
isOnOtherNetwork = ((incomingMessage.getMessagePayloadByte(0) & CONTROLLER_ON_OTHER_NETWORK) != 0) ? true
: false;
isServerPresent = ((incomingMessage.getMessagePayloadByte(0) & CONTROLLER_NODEID_SERVER_PRESENT) == 1) ? true
: false;
isRealPrimary = ((incomingMessage.getMessagePayloadByte(0) & CONTROLLER_IS_REAL_PRIMARY) != 0) ? true : false;
isSUC = ((incomingMessage.getMessagePayloadByte(0) & CONTROLLER_IS_SUC) != 0) ? true : false;
logger.debug("Controller is secondary = {}", isSecondary);
logger.debug("Controller is on other network = {}", isOnOtherNetwork);
logger.debug("Node ID Server is present = {}", isServerPresent);
logger.debug("Controller is real primary = {}", isRealPrimary);
logger.debug("Controller is SUC = {}", isSUC);
checkTransactionComplete(lastSentMessage, incomingMessage);
return true;
}
public boolean getIsSecondary() {
return isSecondary;
}
public boolean getIsOnOtherNetwork() {
return isOnOtherNetwork;
}
public boolean getIsServerPresent() {
return isServerPresent;
}
public boolean getIsRealPrimary() {
return isRealPrimary;
}
public boolean getIsSUC() {
return isSUC;
}
public ZWaveDeviceType getDeviceType() {
if (isSecondary) {
return ZWaveDeviceType.SECONDARY;
} else {
if (isSUC) {
return ZWaveDeviceType.SUC;
} else {
return ZWaveDeviceType.PRIMARY;
}
}
}
}