aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Xpl2Client.cpp269
-rw-r--r--src/Xpl2Client.h28
2 files changed, 111 insertions, 186 deletions
diff --git a/src/Xpl2Client.cpp b/src/Xpl2Client.cpp
index f7b280f..ba6a1ec 100644
--- a/src/Xpl2Client.cpp
+++ b/src/Xpl2Client.cpp
@@ -6,34 +6,21 @@
#include <QDebug>
+bool Xpl2Client::s_wireDebug = false;
+
Xpl2Client::Xpl2Client (QObject *parent) : QObject (parent)
{
- connect (&m_commandSocket, &QTcpSocket::connected, this,
- &Xpl2Client::onCommandSocketConnected);
- connect (&m_commandSocket, &QTcpSocket::disconnected, this,
- &Xpl2Client::onCommandSocketDisconnected);
- connect (&m_commandSocket, &QTcpSocket::readyRead, this,
- &Xpl2Client::onCommandSocketMessageReady);
- connect (&m_commandSocket, &QAbstractSocket::errorOccurred, this,
- &Xpl2Client::onCommandSocketError);
-
- connect (&m_imagingSocket, &QTcpSocket::connected, this,
- &Xpl2Client::onImagingSocketConnected);
- connect (&m_imagingSocket, &QTcpSocket::disconnected, this,
- &Xpl2Client::onImagingSocketDisconnected);
- connect (&m_imagingSocket, &QTcpSocket::readyRead, this,
- &Xpl2Client::onImagingSocketMessageReady);
- connect (&m_imagingSocket, &QAbstractSocket::errorOccurred, this,
- &Xpl2Client::onImagingSocketError);
-
- connect (&m_statusSocket, &QTcpSocket::connected, this,
- &Xpl2Client::onStatusSocketConnected);
- connect (&m_statusSocket, &QTcpSocket::disconnected, this,
- &Xpl2Client::onStatusSocketDisconnected);
- connect (&m_statusSocket, &QTcpSocket::readyRead, this,
- &Xpl2Client::onStatusSocketMessageReady);
- connect (&m_statusSocket, &QAbstractSocket::errorOccurred, this,
- &Xpl2Client::onStatusSocketError);
+ for (auto *socket : { &m_commandSocket, &m_imagingSocket, &m_statusSocket })
+ {
+ connect (socket, &QTcpSocket::connected, this,
+ &Xpl2Client::onSocketConnected);
+ connect (socket, &QTcpSocket::disconnected, this,
+ &Xpl2Client::onSocketDisconnected);
+ connect (socket, &QTcpSocket::readyRead, this,
+ &Xpl2Client::onSocketMessageReady);
+ connect (socket, &QAbstractSocket::errorOccurred, this,
+ &Xpl2Client::onSocketError);
+ }
}
/* ------------------------------------------------------------------ */
@@ -61,21 +48,6 @@ Xpl2Client::isConnected () const
return m_connected;
}
-bool
-Xpl2Client::wireDebug () const
-{
- return m_wireDebug;
-}
-
-void
-Xpl2Client::setWireDebug (bool enabled)
-{
- if (m_wireDebug == enabled)
- return;
- m_wireDebug = enabled;
- emit wireDebugChanged ();
-}
-
int
Xpl2Client::controllerId () const
{
@@ -100,6 +72,12 @@ Xpl2Client::printheadCount () const
return m_printheadCount;
}
+void
+Xpl2Client::enableWireDebug ()
+{
+ s_wireDebug = true;
+}
+
/* ------------------------------------------------------------------ */
/* Connection */
/* ------------------------------------------------------------------ */
@@ -142,59 +120,55 @@ Xpl2Client::sendCommand (QTcpSocket &socket, const QByteArray &command,
{
if (socket.state () != QAbstractSocket::ConnectedState)
{
- emit errorOccurred (QStringLiteral ("Socket not connected for %1")
+ emit errorOccurred (QStringLiteral ("Not connected for %1")
.arg (QString::fromUtf8 (command)));
return;
}
QByteArray data = Xpl2Protocol::buildMessage (command, params);
socket.write (data);
- if (m_wireDebug)
- emit wireDebugMessage (QStringLiteral ("TX [%1:%2] %3")
- .arg (socket.peerAddress ().toString ())
- .arg (socket.peerPort ())
- .arg (QString::fromUtf8 (data).trimmed ()));
+ QByteArray wire;
+ if (s_wireDebug)
+ wire = " >> " + data.trimmed ();
+ qDebug ("%s TX %s%s", qPrintable (logTag (&socket)), command.constData (),
+ wire.constData ());
}
void
Xpl2Client::dispatchCommandMessage (const Xpl2Protocol::ParsedMessage &msg)
{
if (msg.command == "KA_PING")
- {
- handleKaPing (m_commandSocket);
- return;
- }
- if (msg.command == "GS_JC_VERSION")
- {
- handleGsJcVersion (msg.params);
- return;
- }
+ handleKaPing (m_commandSocket);
+ else if (msg.command == "GS_JC_VERSION")
+ handleGsJcVersion (msg.params);
+ else
+ qWarning ("%s Unknown command: %s", qPrintable (logTag (&m_commandSocket)),
+ msg.command.constData ());
}
void
Xpl2Client::dispatchImagingMessage (const Xpl2Protocol::ParsedMessage &msg)
{
if (msg.command == "KA_PING")
- {
- handleKaPing (m_imagingSocket);
- return;
- }
+ handleKaPing (m_imagingSocket);
+ else
+ qWarning ("%s Unknown command: %s", qPrintable (logTag (&m_imagingSocket)),
+ msg.command.constData ());
}
void
Xpl2Client::dispatchStatusMessage (const Xpl2Protocol::ParsedMessage &msg)
{
if (msg.command == "KA_PING")
- {
- handleKaPing (m_statusSocket);
- return;
- }
+ handleKaPing (m_statusSocket);
+ else
+ qWarning ("%s Unknown command: %s", qPrintable (logTag (&m_statusSocket)),
+ msg.command.constData ());
}
void
Xpl2Client::handleKaPing (QTcpSocket &socket)
{
- qDebug () << "KA_PING received, replying";
sendCommand (socket, "KA_PING", { 1 });
}
@@ -210,6 +184,16 @@ Xpl2Client::handleGsJcVersion (const QVariantList &params)
m_firmwareVersion = params[1].toString ();
m_hardwareVersion = params[2].toString ();
m_printheadCount = params[3].toInt ();
+ qDebug ("%s controller=%d fw=%s hw=%s phCount=%d",
+ qPrintable (logTag (&m_commandSocket)), m_controllerId,
+ qPrintable (m_firmwareVersion), qPrintable (m_hardwareVersion),
+ m_printheadCount);
+ emit statusMessage (
+ QStringLiteral ("RX JC Version: controller=%1 fw=%2 hw=%3 phCount=%4")
+ .arg (m_controllerId)
+ .arg (m_firmwareVersion)
+ .arg (m_hardwareVersion)
+ .arg (m_printheadCount));
emit jcVersionReceived ();
}
@@ -230,137 +214,90 @@ Xpl2Client::updateConnectedState ()
emit connectedChanged ();
}
-/* ------------------------------------------------------------------ */
-/* Socket slots — command */
-/* ------------------------------------------------------------------ */
-
-void
-Xpl2Client::onCommandSocketConnected ()
-{
- emit statusMessage (QStringLiteral ("Command socket connected"));
- updateConnectedState ();
-}
-
-void
-Xpl2Client::onCommandSocketDisconnected ()
-{
- emit statusMessage (QStringLiteral ("Command socket disconnected"));
- updateConnectedState ();
-}
-
-void
-Xpl2Client::onCommandSocketMessageReady ()
+QString
+Xpl2Client::logTag (const QTcpSocket *socket) const
{
- while (m_commandSocket.canReadLine ())
+ const char *name = "Unknown";
+ quint16 port = 0;
+ if (socket == &m_commandSocket)
{
- QByteArray raw = m_commandSocket.readLine ();
- if (m_wireDebug)
- emit wireDebugMessage (
- QStringLiteral ("RX [%1:%2] %3")
- .arg (m_commandSocket.peerAddress ().toString ())
- .arg (m_commandSocket.peerPort ())
- .arg (QString::fromUtf8 (raw).trimmed ()));
-
- auto msg = Xpl2Protocol::parseMessage (raw);
- if (msg.valid)
- dispatchCommandMessage (msg);
+ name = "Command";
+ port = m_commandPort;
}
-}
-
-void
-Xpl2Client::onCommandSocketError (QAbstractSocket::SocketError error)
-{
- Q_UNUSED (error)
- emit errorOccurred (
- QStringLiteral ("Command: %1").arg (m_commandSocket.errorString ()));
-}
-
-/* ------------------------------------------------------------------ */
-/* Socket slots — imaging */
-/* ------------------------------------------------------------------ */
-
-void
-Xpl2Client::onImagingSocketConnected ()
-{
- emit statusMessage (QStringLiteral ("Imaging socket connected"));
- updateConnectedState ();
-}
-
-void
-Xpl2Client::onImagingSocketDisconnected ()
-{
- emit statusMessage (QStringLiteral ("Imaging socket disconnected"));
- updateConnectedState ();
-}
-
-void
-Xpl2Client::onImagingSocketMessageReady ()
-{
- while (m_imagingSocket.canReadLine ())
+ else if (socket == &m_imagingSocket)
{
- QByteArray raw = m_imagingSocket.readLine ();
- if (m_wireDebug)
- emit wireDebugMessage (
- QStringLiteral ("RX [%1:%2] %3")
- .arg (m_imagingSocket.peerAddress ().toString ())
- .arg (m_imagingSocket.peerPort ())
- .arg (QString::fromUtf8 (raw).trimmed ()));
-
- auto msg = Xpl2Protocol::parseMessage (raw);
- if (msg.valid)
- dispatchImagingMessage (msg);
+ name = "Imaging";
+ port = m_imagingPort;
+ }
+ else if (socket == &m_statusSocket)
+ {
+ name = "Status";
+ port = m_statusPort;
}
-}
-void
-Xpl2Client::onImagingSocketError (QAbstractSocket::SocketError error)
-{
- Q_UNUSED (error)
- emit errorOccurred (
- QStringLiteral ("Imaging: %1").arg (m_imagingSocket.errorString ()));
+ return QStringLiteral ("[%1:%2]").arg (name).arg (port).leftJustified (15);
}
/* ------------------------------------------------------------------ */
-/* Socket slots — status */
+/* Socket slots */
/* ------------------------------------------------------------------ */
void
-Xpl2Client::onStatusSocketConnected ()
+Xpl2Client::onSocketConnected ()
{
- emit statusMessage (QStringLiteral ("Status socket connected"));
+ auto *socket = qobject_cast<QTcpSocket *> (sender ());
+ qInfo ("%s Connected", qPrintable (logTag (socket)));
updateConnectedState ();
}
void
-Xpl2Client::onStatusSocketDisconnected ()
+Xpl2Client::onSocketDisconnected ()
{
- emit statusMessage (QStringLiteral ("Status socket disconnected"));
+ auto *socket = qobject_cast<QTcpSocket *> (sender ());
+ if (!socket)
+ {
+ /* Identify by elimination — which socket just left ConnectedState? */
+ for (auto *s : { &m_commandSocket, &m_imagingSocket, &m_statusSocket })
+ if (s->state () != QAbstractSocket::ConnectedState)
+ qInfo ("%s Disconnected", qPrintable (logTag (s)));
+ }
+ else
+ qInfo ("%s Disconnected", qPrintable (logTag (socket)));
updateConnectedState ();
}
void
-Xpl2Client::onStatusSocketMessageReady ()
+Xpl2Client::onSocketMessageReady ()
{
- while (m_statusSocket.canReadLine ())
+ auto *socket = qobject_cast<QTcpSocket *> (sender ());
+ while (socket->canReadLine ())
{
- QByteArray raw = m_statusSocket.readLine ();
- if (m_wireDebug)
- emit wireDebugMessage (
- QStringLiteral ("RX [%1:%2] %3")
- .arg (m_statusSocket.peerAddress ().toString ())
- .arg (m_statusSocket.peerPort ())
- .arg (QString::fromUtf8 (raw).trimmed ()));
-
+ QByteArray raw = socket->readLine ();
auto msg = Xpl2Protocol::parseMessage (raw);
if (msg.valid)
- dispatchStatusMessage (msg);
+ {
+ QByteArray wire;
+ if (s_wireDebug)
+ wire = " << " + raw.trimmed ();
+ qDebug ("%s RX %s%s", qPrintable (logTag (socket)),
+ msg.command.constData (), wire.constData ());
+
+ if (socket == &m_commandSocket)
+ dispatchCommandMessage (msg);
+ else if (socket == &m_imagingSocket)
+ dispatchImagingMessage (msg);
+ else
+ dispatchStatusMessage (msg);
+ }
}
}
void
-Xpl2Client::onStatusSocketError (QAbstractSocket::SocketError error)
+Xpl2Client::onSocketError (QAbstractSocket::SocketError error)
{
Q_UNUSED (error)
- emit errorOccurred (
- QStringLiteral ("Status: %1").arg (m_statusSocket.errorString ()));
+ auto *socket = qobject_cast<QTcpSocket *> (sender ());
+ emit errorOccurred (QStringLiteral ("%1 %2")
+ .arg (logTag (socket))
+ .arg (socket->errorString ()));
}
diff --git a/src/Xpl2Client.h b/src/Xpl2Client.h
index 9212771..41729fd 100644
--- a/src/Xpl2Client.h
+++ b/src/Xpl2Client.h
@@ -18,8 +18,6 @@ class Xpl2Client : public QObject
Q_PROPERTY (QString host READ host WRITE setHost NOTIFY hostChanged)
Q_PROPERTY (bool connected READ isConnected NOTIFY connectedChanged)
- Q_PROPERTY (
- bool wireDebug READ wireDebug WRITE setWireDebug NOTIFY wireDebugChanged)
Q_PROPERTY (int controllerId READ controllerId NOTIFY jcVersionReceived)
Q_PROPERTY (
QString firmwareVersion READ firmwareVersion NOTIFY jcVersionReceived)
@@ -35,14 +33,13 @@ public:
bool isConnected () const;
- bool wireDebug () const;
- void setWireDebug (bool enabled);
-
int controllerId () const;
QString firmwareVersion () const;
QString hardwareVersion () const;
int printheadCount () const;
+ static void enableWireDebug ();
+
Q_INVOKABLE void connectToServer ();
Q_INVOKABLE void disconnectFromServer ();
Q_INVOKABLE void getJcVersion ();
@@ -50,25 +47,15 @@ public:
signals:
void hostChanged ();
void connectedChanged ();
- void wireDebugChanged ();
void errorOccurred (const QString &error);
void statusMessage (const QString &message);
- void wireDebugMessage (const QString &message);
void jcVersionReceived ();
private slots:
- void onCommandSocketConnected ();
- void onCommandSocketDisconnected ();
- void onCommandSocketMessageReady ();
- void onCommandSocketError (QAbstractSocket::SocketError error);
- void onImagingSocketConnected ();
- void onImagingSocketDisconnected ();
- void onImagingSocketMessageReady ();
- void onImagingSocketError (QAbstractSocket::SocketError error);
- void onStatusSocketConnected ();
- void onStatusSocketDisconnected ();
- void onStatusSocketMessageReady ();
- void onStatusSocketError (QAbstractSocket::SocketError error);
+ void onSocketConnected ();
+ void onSocketDisconnected ();
+ void onSocketMessageReady ();
+ void onSocketError (QAbstractSocket::SocketError error);
private:
void sendCommand (QTcpSocket &socket, const QByteArray &command,
@@ -79,6 +66,7 @@ private:
void handleKaPing (QTcpSocket &socket);
void handleGsJcVersion (const QVariantList &params);
void updateConnectedState ();
+ QString logTag (const QTcpSocket *socket) const;
QTcpSocket m_commandSocket;
QTcpSocket m_imagingSocket;
@@ -88,7 +76,7 @@ private:
quint16 m_imagingPort = 9111;
quint16 m_statusPort = 9112;
bool m_connected = false;
- bool m_wireDebug = false;
+ static bool s_wireDebug;
int m_controllerId = 0;
QString m_firmwareVersion;
QString m_hardwareVersion;