2 * Copyright (c) 2010-2020 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.io.transport.modbus.endpoint;
15 import org.apache.commons.lang.builder.EqualsBuilder;
16 import org.apache.commons.lang.builder.StandardToStringStyle;
17 import org.apache.commons.lang.builder.ToStringBuilder;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
21 import net.wimpi.modbus.util.SerialParameters;
24 * Serial endpoint. Endpoint differentiates different modbus slaves only by the serial port.
27 * Endpoint contains SerialParameters which should be enough to establish the connection.
29 * @author Sami Salonen - Initial contribution
32 public class ModbusSerialSlaveEndpoint implements ModbusSlaveEndpoint {
34 private SerialParameters serialParameters;
35 private static StandardToStringStyle toStringStyle = new StandardToStringStyle();
38 toStringStyle.setUseShortClassName(true);
41 public ModbusSerialSlaveEndpoint(String portName, int baudRate, int flowControlIn, int flowControlOut, int databits,
42 int stopbits, int parity, String encoding, boolean echo, int receiveTimeoutMillis) {
43 this(new SerialParameters(portName, baudRate, flowControlIn, flowControlOut, databits, stopbits, parity,
44 encoding, echo, receiveTimeoutMillis));
47 public ModbusSerialSlaveEndpoint(String portName, int baudRate, String flowControlIn, String flowControlOut,
48 int databits, String stopbits, String parity, String encoding, boolean echo, int receiveTimeoutMillis) {
49 SerialParameters parameters = new SerialParameters();
50 parameters.setPortName(portName);
51 parameters.setBaudRate(baudRate);
52 parameters.setFlowControlIn(flowControlIn);
53 parameters.setFlowControlOut(flowControlOut);
54 parameters.setDatabits(databits);
55 parameters.setStopbits(stopbits);
56 parameters.setParity(parity);
57 parameters.setEncoding(encoding);
58 parameters.setEcho(echo);
59 parameters.setReceiveTimeoutMillis(receiveTimeoutMillis);
60 this.serialParameters = parameters;
63 private ModbusSerialSlaveEndpoint(SerialParameters serialParameters) {
64 this.serialParameters = serialParameters;
67 public SerialParameters getSerialParameters() {
68 return serialParameters;
72 public <R> R accept(ModbusSlaveEndpointVisitor<R> factory) {
73 return factory.visit(this);
76 public String getPortName() {
77 return serialParameters.getPortName();
81 public int hashCode() {
82 // hashcode & equal is determined purely by port name
83 return serialParameters.getPortName().hashCode();
87 public boolean equals(@Nullable Object obj) {
88 // equals is determined purely by port name
95 if (obj.getClass() != getClass()) {
98 ModbusSerialSlaveEndpoint rhs = (ModbusSerialSlaveEndpoint) obj;
99 return new EqualsBuilder().append(serialParameters.getPortName(), rhs.serialParameters.getPortName())
104 public String toString() {
105 return new ToStringBuilder(this, toStringStyle).append("portName", serialParameters.getPortName()).toString();