aboutsummaryrefslogtreecommitdiffstats
path: root/src/Xpl2Client.h
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-13 11:47:00 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-13 11:47:00 +0100
commita2b1ccf17845e55caef7f69a5e68f49a55b6a166 (patch)
treea7e8c414dbadeeb9bcac29478cf3fbf7e99a4a05 /src/Xpl2Client.h
parent34faf3cdea798c1948229ec1bb53c828e2b40bb7 (diff)
downloadQtXpl2-a2b1ccf17845e55caef7f69a5e68f49a55b6a166.tar.gz
QtXpl2-a2b1ccf17845e55caef7f69a5e68f49a55b6a166.zip
XPL2 protocol foundation: wire framing, typed API, KA_PING, GS_JC_VERSION
Add Xpl2Protocol namespace with buildMessage/parseMessage for wire serialization. Replace raw send/receive API on Xpl2Client with typed protocol methods and internal dispatch. Auto-reply to KA_PING on all sockets (qDebug only). Add GS_JC_VERSION as first typed command with controllerId, firmwareVersion, hardwareVersion, printheadCount properties. Upgrade mock server from echo to line-based command dispatch with 1s KA_PING timer and canned GS_JC_VERSION response. Unknown commands produce qWarning instead of echo. Overhaul demo: remove raw send UI and port config, add wireDebug toggle and Get JC Version button.
Diffstat (limited to 'src/Xpl2Client.h')
-rw-r--r--src/Xpl2Client.h64
1 files changed, 36 insertions, 28 deletions
diff --git a/src/Xpl2Client.h b/src/Xpl2Client.h
index 7ce70ae..9212771 100644
--- a/src/Xpl2Client.h
+++ b/src/Xpl2Client.h
@@ -4,6 +4,8 @@
*/
#pragma once
+#include "Xpl2Protocol.h"
+
#include <QObject>
#include <QQmlEngine>
#include <QTcpSocket>
@@ -15,13 +17,15 @@ class Xpl2Client : public QObject
QML_SINGLETON
Q_PROPERTY (QString host READ host WRITE setHost NOTIFY hostChanged)
- Q_PROPERTY (quint16 commandPort READ commandPort WRITE setCommandPort NOTIFY
- commandPortChanged)
- Q_PROPERTY (quint16 imagingPort READ imagingPort WRITE setImagingPort NOTIFY
- imagingPortChanged)
- Q_PROPERTY (quint16 statusPort READ statusPort WRITE setStatusPort NOTIFY
- statusPortChanged)
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)
+ Q_PROPERTY (
+ QString hardwareVersion READ hardwareVersion NOTIFY jcVersionReceived)
+ Q_PROPERTY (int printheadCount READ printheadCount NOTIFY jcVersionReceived)
public:
explicit Xpl2Client (QObject *parent = nullptr);
@@ -29,52 +33,51 @@ public:
QString host () const;
void setHost (const QString &host);
- quint16 commandPort () const;
- void setCommandPort (quint16 port);
-
- quint16 imagingPort () const;
- void setImagingPort (quint16 port);
+ bool isConnected () const;
- quint16 statusPort () const;
- void setStatusPort (quint16 port);
+ bool wireDebug () const;
+ void setWireDebug (bool enabled);
- bool isConnected () const;
+ int controllerId () const;
+ QString firmwareVersion () const;
+ QString hardwareVersion () const;
+ int printheadCount () const;
Q_INVOKABLE void connectToServer ();
Q_INVOKABLE void disconnectFromServer ();
- Q_INVOKABLE void sendToCommandSocket (const QString &message);
- Q_INVOKABLE void sendToImagingSocket (const QString &message);
- Q_INVOKABLE void sendToStatusSocket (const QString &message);
+ Q_INVOKABLE void getJcVersion ();
signals:
void hostChanged ();
- void commandPortChanged ();
- void imagingPortChanged ();
- void statusPortChanged ();
void connectedChanged ();
- void commandSocketResponseReceived (const QString &response);
- void imagingSocketResponseReceived (const QString &response);
- void statusSocketResponseReceived (const QString &response);
+ 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 onCommandSocketReadyRead ();
+ void onCommandSocketMessageReady ();
void onCommandSocketError (QAbstractSocket::SocketError error);
void onImagingSocketConnected ();
void onImagingSocketDisconnected ();
- void onImagingSocketReadyRead ();
+ void onImagingSocketMessageReady ();
void onImagingSocketError (QAbstractSocket::SocketError error);
void onStatusSocketConnected ();
void onStatusSocketDisconnected ();
- void onStatusSocketReadyRead ();
+ void onStatusSocketMessageReady ();
void onStatusSocketError (QAbstractSocket::SocketError error);
private:
- void sendToSocket (QTcpSocket &socket, const QString &label,
- const QString &message);
+ void sendCommand (QTcpSocket &socket, const QByteArray &command,
+ const QVariantList &params = {});
+ void dispatchCommandMessage (const Xpl2Protocol::ParsedMessage &msg);
+ void dispatchImagingMessage (const Xpl2Protocol::ParsedMessage &msg);
+ void dispatchStatusMessage (const Xpl2Protocol::ParsedMessage &msg);
+ void handleKaPing (QTcpSocket &socket);
+ void handleGsJcVersion (const QVariantList &params);
void updateConnectedState ();
QTcpSocket m_commandSocket;
@@ -85,4 +88,9 @@ private:
quint16 m_imagingPort = 9111;
quint16 m_statusPort = 9112;
bool m_connected = false;
+ bool m_wireDebug = false;
+ int m_controllerId = 0;
+ QString m_firmwareVersion;
+ QString m_hardwareVersion;
+ int m_printheadCount = 0;
};