/** * 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.ZWaveController; import org.openhab.binding.zwave.internal.protocol.event.ZWaveInclusionEvent; 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 RemoveNodeMessageClass extends ZWaveCommandProcessor { private static final Logger logger = LoggerFactory.getLogger(RemoveNodeMessageClass.class); private final int REMOVE_NODE_ANY = 0x01; private final int REMOVE_NODE_CONTROLLER = 0x02; private final int REMOVE_NODE_SLAVE = 0x03; private final int REMOVE_NODE_STOP = 0x05; private final int REMOVE_NODE_STATUS_LEARN_READY = 0x01; private final int REMOVE_NODE_STATUS_NODE_FOUND = 0x02; private final int REMOVE_NODE_STATUS_REMOVING_SLAVE = 0x03; private final int REMOVE_NODE_STATUS_REMOVING_CONTROLLER = 0x04; private final int REMOVE_NODE_STATUS_DONE = 0x06; private final int REMOVE_NODE_STATUS_FAILED = 0x07; public SerialMessage doRequestStart(boolean highPower) { logger.debug("Setting controller into EXCLUSION mode."); // Queue the request SerialMessage newMessage = new SerialMessage(SerialMessage.SerialMessageClass.RemoveNodeFromNetwork, SerialMessage.SerialMessageType.Request, SerialMessage.SerialMessageClass.RemoveNodeFromNetwork, SerialMessage.SerialMessagePriority.High); byte[] newPayload = { (byte) REMOVE_NODE_ANY, (byte) 255 }; newMessage.setMessagePayload(newPayload); return newMessage; } public SerialMessage doRequestStop() { logger.debug("Ending EXCLUSION mode."); // Queue the request SerialMessage newMessage = new SerialMessage(SerialMessage.SerialMessageClass.RemoveNodeFromNetwork, SerialMessage.SerialMessageType.Request, SerialMessage.SerialMessageClass.RemoveNodeFromNetwork, SerialMessage.SerialMessagePriority.High); byte[] newPayload = { (byte) REMOVE_NODE_STOP }; newMessage.setMessagePayload(newPayload); return newMessage; } @Override public boolean handleRequest(ZWaveController zController, SerialMessage lastSentMessage, SerialMessage incomingMessage) { switch (incomingMessage.getMessagePayloadByte(1)) { case REMOVE_NODE_STATUS_LEARN_READY: logger.debug("Remove Node: Learn ready."); zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.ExcludeStart)); break; case REMOVE_NODE_STATUS_NODE_FOUND: logger.debug("Remove Node: Node found for removal."); break; case REMOVE_NODE_STATUS_REMOVING_SLAVE: logger.debug("NODE {}: Removing slave.", incomingMessage.getMessagePayloadByte(2)); zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.ExcludeSlaveFound, incomingMessage.getMessagePayloadByte(2))); break; case REMOVE_NODE_STATUS_REMOVING_CONTROLLER: logger.debug("NODE {}: Removing controller.", incomingMessage.getMessagePayloadByte(2)); zController.notifyEventListeners(new ZWaveInclusionEvent( ZWaveInclusionEvent.Type.ExcludeControllerFound, incomingMessage.getMessagePayloadByte(2))); break; case REMOVE_NODE_STATUS_DONE: logger.debug("NODE {}: Removed from network.", incomingMessage.getMessagePayloadByte(2)); zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.ExcludeDone, incomingMessage.getMessagePayloadByte(2))); break; case REMOVE_NODE_STATUS_FAILED: logger.debug("Remove Node: Failed."); zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.ExcludeFail)); break; default: logger.debug("Remove Node: Unknown request ({}).", incomingMessage.getMessagePayloadByte(1)); break; } checkTransactionComplete(lastSentMessage, incomingMessage); return transactionComplete; } }