1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qmodbustcpclient.h"
5#include "qmodbustcpclient_p.h"
6
7#include <QtCore/qurl.h>
8
9QT_BEGIN_NAMESPACE
10
11/*!
12 \class QModbusTcpClient
13 \inmodule QtSerialBus
14 \since 5.8
15
16 \brief The QModbusTcpClient class is the interface class for Modbus TCP client device.
17
18 QModbusTcpClient communicates with the Modbus backend providing users with a convenient API.
19*/
20
21/*!
22 Constructs a QModbusTcpClient with the specified \a parent.
23*/
24QModbusTcpClient::QModbusTcpClient(QObject *parent)
25 : QModbusClient(*new QModbusTcpClientPrivate, parent)
26{
27 Q_D(QModbusTcpClient);
28 d->setupTcpSocket();
29}
30
31/*!
32 Destroys the QModbusTcpClient instance.
33*/
34QModbusTcpClient::~QModbusTcpClient()
35{
36 close();
37}
38
39/*!
40 \internal
41*/
42QModbusTcpClient::QModbusTcpClient(QModbusTcpClientPrivate &dd, QObject *parent)
43 : QModbusClient(dd, parent)
44{
45 Q_D(QModbusTcpClient);
46 d->setupTcpSocket();
47}
48
49/*!
50 \reimp
51*/
52bool QModbusTcpClient::open()
53{
54 if (state() == QModbusDevice::ConnectedState)
55 return true;
56
57 Q_D(QModbusTcpClient);
58 if (d->m_socket->state() != QAbstractSocket::UnconnectedState)
59 return false;
60
61 const QUrl url = QUrl::fromUserInput(userInput: d->m_networkAddress + QStringLiteral(":")
62 + QString::number(d->m_networkPort));
63
64 if (!url.isValid()) {
65 setError(errorText: tr(s: "Invalid connection settings for TCP communication specified."),
66 error: QModbusDevice::ConnectionError);
67 qCWarning(QT_MODBUS) << "(TCP client) Invalid host:" << url.host() << "or port:"
68 << url.port();
69 return false;
70 }
71
72 d->m_socket->connectToHost(hostName: url.host(), port: url.port());
73
74 return true;
75}
76
77/*!
78 \reimp
79*/
80void QModbusTcpClient::close()
81{
82 if (state() == QModbusDevice::UnconnectedState)
83 return;
84
85 Q_D(QModbusTcpClient);
86 d->m_socket->disconnectFromHost();
87}
88
89QT_END_NAMESPACE
90

source code of qtserialbus/src/serialbus/qmodbustcpclient.cpp