Package org.openhab.binding.zwave.internal.protocol.serialmessage

Source Code of org.openhab.binding.zwave.internal.protocol.serialmessage.AddNodeMessageClass

/**
* Copyright (c) 2010-2014, openHAB.org and others.
*
* 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 AddNodeMessageClass extends ZWaveCommandProcessor {
  private static final Logger logger = LoggerFactory.getLogger(AddNodeMessageClass.class);

  private final int ADD_NODE_ANY                       = 0x01;
  private final int ADD_NODE_CONTROLLER                = 0x02;
  private final int ADD_NODE_SLAVE                     = 0x03;
  private final int ADD_NODE_EXISTING                  = 0x04;
  private final int ADD_NODE_STOP                      = 0x05;
  private final int ADD_NODE_STOP_FAILED               = 0x06;

  private final int ADD_NODE_STATUS_LEARN_READY        = 0x01;
  private final int ADD_NODE_STATUS_NODE_FOUND         = 0x02;
  private final int ADD_NODE_STATUS_ADDING_SLAVE       = 0x03;
  private final int ADD_NODE_STATUS_ADDING_CONTROLLER  = 0x04;
  private final int ADD_NODE_STATUS_PROTOCOL_DONE      = 0x05;
  private final int ADD_NODE_STATUS_DONE               = 0x06;
  private final int ADD_NODE_STATUS_FAILED             = 0x07;
 
  private final int OPTION_HIGH_POWER                  = 0x80;

  public SerialMessage doRequestStart(boolean highPower) {
    logger.debug("Setting controller into INCLUSION mode.");

    // Queue the request
    SerialMessage newMessage = new SerialMessage(SerialMessage.SerialMessageClass.AddNodeToNetwork, SerialMessage.SerialMessageType.Request,
        SerialMessage.SerialMessageClass.AddNodeToNetwork, SerialMessage.SerialMessagePriority.High);
    byte[] newPayload = { (byte) ADD_NODE_ANY, (byte)255 };
    if(highPower == true)
      newPayload[0] |= OPTION_HIGH_POWER;

      newMessage.setMessagePayload(newPayload);
      return newMessage;
    }

  public SerialMessage doRequestStop() {
    logger.debug("Ending INCLUSION mode.");

    // Queue the request
    SerialMessage newMessage = new SerialMessage(SerialMessage.SerialMessageClass.AddNodeToNetwork, SerialMessage.SerialMessageType.Request,
        SerialMessage.SerialMessageClass.AddNodeToNetwork, SerialMessage.SerialMessagePriority.High);
    byte[] newPayload = { (byte) ADD_NODE_STOP };

      newMessage.setMessagePayload(newPayload);
      return newMessage;
    }

  @Override
  public boolean handleRequest(ZWaveController zController, SerialMessage lastSentMessage, SerialMessage incomingMessage) {
    switch(incomingMessage.getMessagePayloadByte(1)) {
    case ADD_NODE_STATUS_LEARN_READY:
      logger.debug("Learn ready.");
      zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.IncludeStart));
      break;
    case ADD_NODE_STATUS_NODE_FOUND:
      logger.debug("New node found.");
      break;
    case ADD_NODE_STATUS_ADDING_SLAVE:
      logger.debug("NODE {}: Adding slave.", incomingMessage.getMessagePayloadByte(2));
      zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.IncludeSlaveFound, incomingMessage.getMessagePayloadByte(2)));
      break;
    case ADD_NODE_STATUS_ADDING_CONTROLLER:
      logger.debug("NODE {}: Adding controller.", incomingMessage.getMessagePayloadByte(2));
      zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.IncludeControllerFound, incomingMessage.getMessagePayloadByte(2)));
      break;
    case ADD_NODE_STATUS_PROTOCOL_DONE:
      logger.debug("Protocol done.");
      break;
    case ADD_NODE_STATUS_DONE:
      logger.debug("Done.");
      zController.sendData(doRequestStop());
      // If the node ID is 0, ignore!
      if(incomingMessage.getMessagePayloadByte(2) != 0)
        zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.IncludeDone, incomingMessage.getMessagePayloadByte(2)));
      break;
    case ADD_NODE_STATUS_FAILED:
      logger.debug("Failed.");
      zController.sendData(doRequestStop());
      zController.notifyEventListeners(new ZWaveInclusionEvent(ZWaveInclusionEvent.Type.IncludeFail));
      break;
    default:
      logger.debug("Unknown request ({}).", incomingMessage.getMessagePayloadByte(1));
      break;
    }
    checkTransactionComplete(lastSentMessage, incomingMessage);

    return transactionComplete;
  }
}
TOP

Related Classes of org.openhab.binding.zwave.internal.protocol.serialmessage.AddNodeMessageClass

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.