/** * 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.rfxcom.internal.messages; import javax.xml.bind.DatatypeConverter; /** * Base class for RFXCOM data classes. All other data classes should extend this class. * * @author Pauli Anttila * @since 1.2.0 */ public abstract class RFXComBaseMessage implements RFXComMessageInterface { public enum PacketType { INTERFACE_CONTROL(0), INTERFACE_MESSAGE(1), TRANSMITTER_MESSAGE(2), UNDECODED_RF_MESSAGE(3), LIGHTING1(16), LIGHTING2(17), LIGHTING3(18), LIGHTING4(19), LIGHTING5(20), LIGHTING6(21), CHIME(22), FAN(23), CURTAIN1(24), BLINDS1(25), RFY(26), SECURITY1(32), SECURITY2(33), CAMERA1(40), REMOTE_CONTROL(48), THERMOSTAT1(64), THERMOSTAT2(65), THERMOSTAT3(66), BBQ1(78), TEMPERATURE_RAIN(79), TEMPERATURE(80), HUMIDITY(81), TEMPERATURE_HUMIDITY(82), BAROMETRIC(83), TEMPERATURE_HUMIDITY_BAROMETRIC(84), RAIN(85), WIND(86), UV(87), DATE_TIME(88), CURRENT(89), ENERGY(90), CURRENT_ENERGY(91), POWER(92), WEIGHT(93), GAS(94), WATER(95), RFXSENSOR(112), RFXMETER(113), FS20(114), IO_LINES(128), UNKNOWN(255); private final int packetType; PacketType(int packetType) { this.packetType = packetType; } PacketType(byte packetType) { this.packetType = packetType; } public byte toByte() { return (byte) packetType; } public static PacketType fromByte(int input) { for (PacketType packetType : PacketType.values()) { if (packetType.packetType == input) { return packetType; } } return PacketType.UNKNOWN; } } public byte[] rawMessage; public PacketType packetType = PacketType.UNKNOWN; public byte packetId = 0; public byte subType = 0; public byte seqNbr = 0; public byte id1 = 0; public byte id2 = 0; public RFXComBaseMessage() { } public RFXComBaseMessage(byte[] data) { encodeMessage(data); } @Override public void encodeMessage(byte[] data) { rawMessage = data; packetId = data[1]; packetType = PacketType.fromByte(data[1]); subType = data[2]; seqNbr = data[3]; id1 = data[4]; if (data.length > 5) { id2 = data[5]; } } @Override public String toString() { String str = ""; str += "Raw data = " + DatatypeConverter.printHexBinary(rawMessage); str += "\n - Packet type = " + packetType; str += "\n - Seq number = " + (short) (seqNbr & 0xFF); return str; } @Override public String generateDeviceId() { return id1 + "." + id2; } }