1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
/**
* @file Xpl2Client.cpp
* @brief TCP client for the Alchemie XPL2 printhead protocol.
*/
#include "Xpl2Client.h"
Xpl2Client::Xpl2Client (QObject *parent) : QObject (parent)
{
connect (&m_socket, &QTcpSocket::connected, this, &Xpl2Client::onConnected);
connect (&m_socket, &QTcpSocket::disconnected, this,
&Xpl2Client::onDisconnected);
connect (&m_socket, &QTcpSocket::readyRead, this, &Xpl2Client::onReadyRead);
connect (&m_socket, &QAbstractSocket::errorOccurred, this,
&Xpl2Client::onErrorOccurred);
}
QString
Xpl2Client::host () const
{
return m_host;
}
void
Xpl2Client::setHost (const QString &host)
{
if (m_host == host)
return;
m_host = host;
emit hostChanged ();
}
quint16
Xpl2Client::commandPort () const
{
return m_commandPort;
}
void
Xpl2Client::setCommandPort (quint16 port)
{
if (m_commandPort == port)
return;
m_commandPort = port;
emit commandPortChanged ();
}
quint16
Xpl2Client::imagingPort () const
{
return m_imagingPort;
}
void
Xpl2Client::setImagingPort (quint16 port)
{
if (m_imagingPort == port)
return;
m_imagingPort = port;
emit imagingPortChanged ();
}
quint16
Xpl2Client::statusPort () const
{
return m_statusPort;
}
void
Xpl2Client::setStatusPort (quint16 port)
{
if (m_statusPort == port)
return;
m_statusPort = port;
emit statusPortChanged ();
}
bool
Xpl2Client::isConnected () const
{
return m_socket.state () == QAbstractSocket::ConnectedState;
}
void
Xpl2Client::connectToServer ()
{
if (isConnected ())
{
emit statusMessage (QStringLiteral ("Already connected"));
return;
}
emit statusMessage (QStringLiteral ("Connecting to %1:%2…")
.arg (m_host)
.arg (m_commandPort));
m_socket.connectToHost (m_host, m_commandPort);
}
void
Xpl2Client::disconnectFromServer ()
{
if (!isConnected ())
return;
m_socket.disconnectFromHost ();
}
void
Xpl2Client::sendCommand (const QString &command)
{
if (!isConnected ())
{
emit errorOccurred (QStringLiteral ("Not connected"));
return;
}
QByteArray data = command.toUtf8 () + '\n';
m_socket.write (data);
emit statusMessage (QStringLiteral ("Sent: %1").arg (command));
}
void
Xpl2Client::onConnected ()
{
emit connectedChanged ();
}
void
Xpl2Client::onDisconnected ()
{
emit connectedChanged ();
}
void
Xpl2Client::onReadyRead ()
{
while (m_socket.canReadLine ())
{
QString line = QString::fromUtf8 (m_socket.readLine ()).trimmed ();
emit responseReceived (line);
}
}
void
Xpl2Client::onErrorOccurred (QAbstractSocket::SocketError error)
{
Q_UNUSED (error)
emit errorOccurred (m_socket.errorString ());
}
|