blob: 9212771b81a2477fbf794bfc29ef9a92d826969a (
plain)
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
|
/**
* @file Xpl2Client.h
* @brief TCP client for the Alchemie XPL2 printhead protocol.
*/
#pragma once
#include "Xpl2Protocol.h"
#include <QObject>
#include <QQmlEngine>
#include <QTcpSocket>
class Xpl2Client : public QObject
{
Q_OBJECT
QML_ELEMENT
QML_SINGLETON
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)
Q_PROPERTY (
QString hardwareVersion READ hardwareVersion NOTIFY jcVersionReceived)
Q_PROPERTY (int printheadCount READ printheadCount NOTIFY jcVersionReceived)
public:
explicit Xpl2Client (QObject *parent = nullptr);
QString host () const;
void setHost (const QString &host);
bool isConnected () const;
bool wireDebug () const;
void setWireDebug (bool enabled);
int controllerId () const;
QString firmwareVersion () const;
QString hardwareVersion () const;
int printheadCount () const;
Q_INVOKABLE void connectToServer ();
Q_INVOKABLE void disconnectFromServer ();
Q_INVOKABLE void getJcVersion ();
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);
private:
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;
QTcpSocket m_imagingSocket;
QTcpSocket m_statusSocket;
QString m_host = QStringLiteral ("127.0.0.1");
quint16 m_commandPort = 9110;
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;
};
|