Kstars

message.h
1/*
2 SPDX-FileCopyrightText: 2018 Jasem Mutlaq <mutlaqja@ikarustech.com>
3
4 Message Channel
5
6 SPDX-License-Identifier: GPL-2.0-or-later
7*/
8
9#pragma once
10
11#include <QtWebSockets/QWebSocket>
12#include <memory>
13
14#include "ekos/ekos.h"
15#include "ekos/align/polaralignmentassistant.h"
16#include "ekos/manager.h"
17#include "catalogsdb.h"
18#include "nodemanager.h"
19#include <QQueue>
20
21namespace EkosLive
22{
23class Message : public QObject
24{
26
27 public:
28 explicit Message(Ekos::Manager *manager, QVector<QSharedPointer<NodeManager>> &nodeManagers);
29 virtual ~Message() = default;
30
31 bool isConnected() const;
32
33 struct PendingProperty
34 {
35 QString device;
36 QString name;
37 bool operator==(const PendingProperty &other) const
38 {
39 return device == other.device && name == other.name;
40 }
41 };
42
43 // Module Status Updates
44 void updateMountStatus(const QJsonObject &status, bool throttle = false);
45 void updateCaptureStatus(const QJsonObject &status);
46 void updateFocusStatus(const QJsonObject &status);
47 void updateGuideStatus(const QJsonObject &status);
48 void updateDomeStatus(const QJsonObject &status);
49 void updateCapStatus(const QJsonObject &status);
50 void updateAlignStatus(const QJsonObject &status);
51
52 // Send devices as they come
53 void sendEvent(const QString &message, KSNotification::EventSource source, KSNotification::EventType event);
54 void sendScopes();
55 void sendDSLRLenses();
56 void sendDrivers();
57 void sendDevices();
58 void sendTrains();
59 void sendTrainProfiles();
60
61 // Scheduler
62 void sendSchedulerJobs();
63 void sendSchedulerJobList(QJsonArray jobsList);
64 void sendSchedulerStatus(const QJsonObject &status);
65
66 signals:
67 void connected();
68 void disconnected();
69 void expired(const QUrl &url);
70 void optionsUpdated();
71 void resetPolarView();
72
73 public slots:
74 // Connection
75 void sendConnection();
76 void sendModuleState(const QString &name);
77 void setPendingPropertiesEnabled(bool enabled);
78
79 // Ekos
80 void setEkosStatingStatus(Ekos::CommunicationStatus status);
81
82 // INDI
83 void setINDIStatus(Ekos::CommunicationStatus status);
84
85 // Alignment
86 void setAlignStatus(Ekos::AlignState newState);
87 void setAlignSolution(const QVariantMap &solution);
88 void sendAlignSettings(const QVariantMap &settings);
89
90 // Guide
91 void sendGuideSettings(const QVariantMap &settings);
92
93 // Focus
94 void sendFocusSettings(const QVariantMap &settings);
95
96 // Mount
97 void sendMountSettings(const QVariantMap &settings);
98
99 // Dark Library
100 void sendDarkLibrarySettings(const QVariantMap &settings);
101
102 //Scheduler
103 void sendSchedulerSettings(const QVariantMap &settings);
104
105 // Polar
106 void setPAHStage(Ekos::PolarAlignmentAssistant::Stage stage);
107 void setPAHMessage(const QString &message);
108 void setPolarResults(QLineF correctionVector, double polarError, double azError, double altError);
109 void setUpdatedErrors(double total, double az, double alt);
110 void setPAHEnabled(bool enabled);
111 void setBoundingRect(QRect rect, QSize view, double currentZoom);
112
113 // Capture
114 void sendCaptureSequence(const QJsonArray &sequenceArray);
115 void sendPreviewLabel(const QString &preview);
116 void sendCaptureSettings(const QVariantMap &settings);
117
118 // Focus
119 void autofocusAborted();
120
121 // DSLR
122 void requestDSLRInfo(const QString &cameraName);
123
124 // Port Selection
125 void requestPortSelection(bool show);
126
127 // Trains
128 void requestOpticalTrains(bool show);
129
130 // Dialogs
131 void sendDialog(const QJsonObject &message);
132 void processDialogResponse(const QJsonObject &payload);
133
134 // Process properties
135 void processNewProperty(INDI::Property prop);
136 void processDeleteProperty(INDI::Property prop);
137 void processUpdateProperty(INDI::Property prop);
138
139 // Process message
140 void processMessage(const QSharedPointer<ISD::GenericDevice> &device, int id);
141
142 // StellarSolver
143 void sendStellarSolverProfiles();
144
145 void sendManualRotatorStatus(double currentPA, double targetPA, double threshold);
146
147 private slots:
148
149 // Connection
150 void onConnected();
151 void onDisconnected();
152
153 // Communication
154 void onTextReceived(const QString &);
155
156 private:
157 // Profiles
158 void sendProfiles();
159 void setProfileMapping(const QJsonObject &payload);
160 void sendStates();
161
162 // Capture
163 void processCaptureCommands(const QString &command, const QJsonObject &payload);
164 void sendTemperature(double value);
165
166 // Mount
167 void processMountCommands(const QString &command, const QJsonObject &payload);
168
169 // Focus
170 void processFocusCommands(const QString &command, const QJsonObject &payload);
171
172 // Guide
173 void processGuideCommands(const QString &command, const QJsonObject &payload);
174
175 // Align
176 void processAlignCommands(const QString &command, const QJsonObject &payload);
177
178 // Scheduler
179 void processSchedulerCommands(const QString &command, const QJsonObject &payload);
180
181 // Polar
182 void processPolarCommands(const QString &command, const QJsonObject &payload);
183
184 // Profile
185 void processProfileCommands(const QString &command, const QJsonObject &payload);
186
187 // Options
188 void processOptionsCommands(const QString &command, const QJsonObject &payload);
189
190 // Scopes
191 void processScopeCommands(const QString &command, const QJsonObject &payload);
192
193 // DSLRs
194 void processDSLRCommands(const QString &command, const QJsonObject &payload);
195
196 // Trains
197 void processTrainCommands(const QString &command, const QJsonObject &payload);
198
199 // Filter Manager commands
200 void processFilterManagerCommands(const QString &command, const QJsonObject &payload);
201
202 // Dark Library commands
203 void processDarkLibraryCommands(const QString &command, const QJsonObject &payload);
204
205 // Low-level Device commands
206 void processDeviceCommands(const QString &command, const QJsonObject &payload);
207
208 // Process Astronomy Library command
209 void processAstronomyCommands(const QString &command, const QJsonObject &payload);
210
211 // Process file commands
212 void processFileCommands(const QString &command, const QJsonObject &payload);
213
214 void dispatchDebounceQueue();
215
216 KStarsDateTime getNextDawn();
217
218 void sendResponse(const QString &command, const QJsonObject &payload);
219 void sendResponse(const QString &command, const QJsonArray &payload);
220 void sendResponse(const QString &command, const QString &payload);
221 void sendResponse(const QString &command, bool payload);
222
223 void sendPendingProperties();
224
225 typedef struct
226 {
227 int number_integer;
228 uint number_unsigned_integer;
229 double number_double;
230 bool boolean;
231 QString text;
232 QUrl url;
233 } SimpleTypes;
234
235 QObject *findObject(const QString &name);
236 void invokeMethod(QObject *context, const QJsonObject &payload);
237#if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0)
238 bool parseArgument(QVariant::Type type, const QVariant &arg, QMetaMethodArgument &genericArg, SimpleTypes &types);
239#else
240 bool parseArgument(QVariant::Type type, const QVariant &arg, QGenericArgument &genericArg, SimpleTypes &types);
241#endif
242 Ekos::Manager *m_Manager { nullptr };
243 QVector<QSharedPointer<NodeManager>> m_NodeManagers;
244
245 bool m_sendBlobs { true};
246
247 QMap<QString, QSet<QString>> m_PropertySubscriptions;
248 QLineF correctionVector;
249 QRect m_BoundingRect;
250 QSize m_ViewSize;
251 double m_CurrentZoom {100};
252
253 QSet<PendingProperty> m_PendingProperties;
254 QTimer m_PendingPropertiesTimer;
255 QTimer m_DebouncedSend;
256 QMap<QString, QVariantMap> m_DebouncedMap;
257
258 QDateTime m_ThrottleTS;
259 CatalogsDB::DBManager m_DSOManager;
260
261 typedef enum
262 {
263 North,
264 East,
265 South,
266 West,
267 All
268 } Direction;
269
270 // Throttle interval
271 static const uint16_t THROTTLE_INTERVAL = 1000;
272};
273
274inline uint qHash(const Message::PendingProperty &key, uint seed = 0) noexcept
275{
276 return qHash(key.device, seed) ^ qHash(key.name, seed);
277}
278
279}
Generic record interfaces and implementations.
Definition cloud.cpp:22
AlignState
Definition ekos.h:145
QObject(QObject *parent)
Q_OBJECTQ_OBJECT
virtual bool event(QEvent *e)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 21 2025 11:54:27 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.