/** * 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.plcbus.internal.protocol; import java.util.ArrayList; import java.util.List; /** * DataFrame of PLCBus Protocol * * @author Robin Lenz * @since 1.0.0 */ public class DataFrame { private int userCode; private int home; private int unit; private CommandFrame commandFrame; /** * Create a new DataFrame */ public DataFrame() { } /** * Creates a new DataFrame with CommandFrame * * @param commandFrame * for DataFrame */ public DataFrame(CommandFrame commandFrame) { this.commandFrame = commandFrame; } /** * Sets the UserCode to DataFrame * * @param userCode * for DataFrame */ public void setUserCode(String userCode) { this.userCode = Convert.toByte(userCode, 16); } /** * Sets address to DataFrame * * @param address * for DataFrame */ public void SetAddress(String address) { this.home = getHomeFrom(address.charAt(0)); this.unit = getUnitFrom(address.charAt(1)); } private int getHomeFrom(char home) { switch (home) { case 'A': return 0; case 'B': return 1; case 'C': return 2; case 'D': return 3; case 'E': return 4; case 'F': return 5; case 'G': return 6; case 'H': return 7; case 'I': return 8; case 'J': return 9; case 'K': return 10; } return 0; } private int getUnitFrom(char unit) { switch (unit) { case '1': return 0; case '2': return 1; case '3': return 2; case '4': return 3; case '5': return 4; case '6': return 5; case '7': return 6; case '8': return 7; case '9': return 8; } return 0; } /** * Returns the Bytes of DataFrame * * @return bytes of DataFrame */ public List<Byte> getBytes() { List<Byte> result = new ArrayList<Byte>(); result.add(Convert.toByte(userCode)); result.add(Convert.toByte((home << 4) | unit)); if (commandFrame != null) { result.addAll(commandFrame.getBytes()); } return result; } /** * Initializes DataFrame from byte array * * @param data * byte of DataFrame */ public void parse(byte[] data) { userCode = data[0]; home = data[1] >>> 4; unit = data[1] & 0x0F; commandFrame = new CommandFrame(); commandFrame.parse(new byte[] { data[2], data[3], data[4] }); } /** * Gets the first parameter of CommandFrame * * @return first parameter */ public int getFirstParameter() { return commandFrame.getFirstParameter(); } /** * Gets the second parameter of CommandFrame * * @return second parameter */ public int getSecondParameter() { return commandFrame.getSecondParameter(); } /** * Gets the Command of CommandFrame * * @return Command of CommandFrame */ public Command getCommand() { return commandFrame.getCommand(); } }