/** * 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.event.ZWaveNetworkEvent; import org.openhab.binding.zwave.internal.protocol.event.ZWaveNetworkEvent.State; import org.openhab.binding.zwave.internal.protocol.event.ZWaveNetworkEvent.Type; 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 RemoveFailedNodeMessageClass extends ZWaveCommandProcessor { private static final Logger logger = LoggerFactory.getLogger(RemoveFailedNodeMessageClass.class); private final int FAILED_NODE_REMOVE_STARTED = 0x00; private final int FAILED_NODE_NOT_PRIMARY_CONTROLLER = 0x02; private final int FAILED_NODE_NO_CALLBACK_FUNCTION = 0x04; private final int FAILED_NODE_NOT_FOUND = 0x08; private final int FAILED_NODE_REMOVE_PROCESS_BUSY = 0x10; private final int FAILED_NODE_REMOVE_FAIL = 0x20; private final int FAILED_NODE_OK = 0x00; private final int FAILED_NODE_REMOVED = 0x01; private final int FAILED_NODE_NOT_REMOVED = 0x02; public SerialMessage doRequest(int nodeId) { logger.debug("NODE {}: Marking node as having failed.", nodeId); // Queue the request SerialMessage newMessage = new SerialMessage(SerialMessageClass.RemoveFailedNodeID, SerialMessageType.Request, SerialMessageClass.RemoveFailedNodeID, SerialMessagePriority.High); byte[] newPayload = { (byte) nodeId, (byte) 0xfe }; newMessage.setMessagePayload(newPayload); return newMessage; } @Override public boolean handleResponse(ZWaveController zController, SerialMessage lastSentMessage, SerialMessage incomingMessage) { logger.debug("Got RemoveFailedNode response."); int nodeId = lastSentMessage.getMessagePayloadByte(0); switch (incomingMessage.getMessagePayloadByte(0)) { case FAILED_NODE_REMOVE_STARTED: logger.debug("NODE {}: Remove failed node successfully placed on stack.", nodeId); break; case FAILED_NODE_NOT_PRIMARY_CONTROLLER: logger.error("NODE {}: Remove failed node failed as not Primary Controller for node!", nodeId); transactionComplete = true; break; case FAILED_NODE_NO_CALLBACK_FUNCTION: logger.error("NODE {}: Remove failed node failed as no callback function!", nodeId); transactionComplete = true; break; case FAILED_NODE_NOT_FOUND: logger.error("NODE {}: Remove failed node failed as node not found!", nodeId); transactionComplete = true; break; case FAILED_NODE_REMOVE_PROCESS_BUSY: logger.error("NODE {}: Remove failed node failed as Controller Busy!", nodeId); transactionComplete = true; break; case FAILED_NODE_REMOVE_FAIL: logger.error("NODE {}: Remove failed node failed!", nodeId); transactionComplete = true; break; default: logger.error("NODE {}: Remove failed node not placed on stack due to error 0x{}.", nodeId, Integer.toHexString(incomingMessage.getMessagePayloadByte(0))); transactionComplete = true; break; } return true; } @Override public boolean handleRequest(ZWaveController zController, SerialMessage lastSentMessage, SerialMessage incomingMessage) { int nodeId = lastSentMessage.getMessagePayloadByte(0); logger.debug("NODE {}: Got RemoveFailedNode request.", nodeId); switch (incomingMessage.getMessagePayloadByte(0)) { case FAILED_NODE_OK: logger.error("NODE {}: Unable to remove failed node as it is not a failed node!", nodeId); transactionComplete = true; break; case FAILED_NODE_REMOVED: logger.debug("NODE {}: Successfully removed node from controller database!", nodeId); zController.notifyEventListeners(new ZWaveNetworkEvent(Type.DeleteNode, nodeId, State.Success)); transactionComplete = true; break; case FAILED_NODE_NOT_REMOVED: logger.error("NODE {}: Unable to remove failed node!", nodeId); transactionComplete = true; break; default: logger.error("NODE {}: Remove failed node failed with error 0x{}.", nodeId, Integer.toHexString(incomingMessage.getMessagePayloadByte(0))); transactionComplete = true; break; } return true; } }