From a2b1ccf17845e55caef7f69a5e68f49a55b6a166 Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Fri, 13 Mar 2026 11:47:00 +0100 Subject: 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. --- src/Xpl2Client.h | 64 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'src/Xpl2Client.h') 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 #include #include @@ -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 ¶ms = {}); + 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 ¶ms); 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; }; -- cgit v1.2.3