]> git.basschouten.com Git - openhab-addons.git/blob
a335185911ef6b279c40b668c31f75c60df8a8a0
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.io.transport.modbus.endpoint;
14
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;
20
21 import net.wimpi.modbus.util.SerialParameters;
22
23 /**
24  * Serial endpoint. Endpoint differentiates different modbus slaves only by the serial port.
25  * port.
26  *
27  * Endpoint contains SerialParameters which should be enough to establish the connection.
28  *
29  * @author Sami Salonen - Initial contribution
30  */
31 @NonNullByDefault
32 public class ModbusSerialSlaveEndpoint implements ModbusSlaveEndpoint {
33
34     private SerialParameters serialParameters;
35     private static StandardToStringStyle toStringStyle = new StandardToStringStyle();
36
37     static {
38         toStringStyle.setUseShortClassName(true);
39     }
40
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));
45     }
46
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;
61     }
62
63     private ModbusSerialSlaveEndpoint(SerialParameters serialParameters) {
64         this.serialParameters = serialParameters;
65     }
66
67     public SerialParameters getSerialParameters() {
68         return serialParameters;
69     }
70
71     @Override
72     public <R> R accept(ModbusSlaveEndpointVisitor<R> factory) {
73         return factory.visit(this);
74     }
75
76     public String getPortName() {
77         return serialParameters.getPortName();
78     }
79
80     @Override
81     public int hashCode() {
82         // hashcode & equal is determined purely by port name
83         return serialParameters.getPortName().hashCode();
84     }
85
86     @Override
87     public boolean equals(@Nullable Object obj) {
88         // equals is determined purely by port name
89         if (obj == null) {
90             return false;
91         }
92         if (obj == this) {
93             return true;
94         }
95         if (obj.getClass() != getClass()) {
96             return false;
97         }
98         ModbusSerialSlaveEndpoint rhs = (ModbusSerialSlaveEndpoint) obj;
99         return new EqualsBuilder().append(serialParameters.getPortName(), rhs.serialParameters.getPortName())
100                 .isEquals();
101     }
102
103     @Override
104     public String toString() {
105         return new ToStringBuilder(this, toStringStyle).append("portName", serialParameters.getPortName()).toString();
106     }
107 }