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 // Module Status Updates
34 void updateMountStatus(const QJsonObject &status, bool throttle = false);
35 void updateCaptureStatus(const QJsonObject &status);
36 void updateFocusStatus(const QJsonObject &status);
37 void updateGuideStatus(const QJsonObject &status);
38 void updateDomeStatus(const QJsonObject &status);
39 void updateCapStatus(const QJsonObject &status);
40
41 // Send devices as they come
42 void sendEvent(const QString &message, KSNotification::EventSource source, KSNotification::EventType event);
43 void sendScopes();
44 void sendDSLRLenses();
45 void sendDrivers();
46 void sendDevices();
47 void sendTrains();
48 void sendTrainProfiles();
49
50 // Scheduler
51 void sendSchedulerJobs();
52 void sendSchedulerJobList(QJsonArray jobsList);
53 void sendSchedulerStatus(const QJsonObject &status);
54
55 signals:
56 void connected();
57 void disconnected();
58 void expired(const QUrl &url);
59 void optionsUpdated();
60 void resetPolarView();
61
62 public slots:
63 // Connection
64 void sendConnection();
65 void sendModuleState(const QString &name);
66 void clearPendingProperties();
67
68 // Ekos
69 void setEkosStatingStatus(Ekos::CommunicationStatus status);
70
71 // INDI
72 void setINDIStatus(Ekos::CommunicationStatus status);
73
74 // Alignment
75 void setAlignStatus(Ekos::AlignState newState);
76 void setAlignSolution(const QVariantMap &solution);
77 void sendAlignSettings(const QVariantMap &settings);
78
79 // Guide
80 void sendGuideSettings(const QVariantMap &settings);
81
82 // Focus
83 void sendFocusSettings(const QVariantMap &settings);
84
85 // Mount
86 void sendMountSettings(const QVariantMap &settings);
87
88 // Dark Library
89 void sendDarkLibrarySettings(const QVariantMap &settings);
90
91 //Scheduler
92 void sendSchedulerSettings(const QVariantMap &settings);
93
94 // Polar
95 void setPAHStage(Ekos::PolarAlignmentAssistant::Stage stage);
96 void setPAHMessage(const QString &message);
97 void setPolarResults(QLineF correctionVector, double polarError, double azError, double altError);
98 void setUpdatedErrors(double total, double az, double alt);
99 void setPAHEnabled(bool enabled);
100 void setBoundingRect(QRect rect, QSize view, double currentZoom);
101
102 // Capture
103 void sendCaptureSequence(const QJsonArray &sequenceArray);
104 void sendPreviewLabel(const QString &preview);
105 void sendCaptureSettings(const QVariantMap &settings);
106
107 // Focus
108 void autofocusAborted();
109
110 // DSLR
111 void requestDSLRInfo(const QString &cameraName);
112
113 // Port Selection
114 void requestPortSelection(bool show);
115
116 // Trains
117 void requestOpticalTrains(bool show);
118
119 // Dialogs
120 void sendDialog(const QJsonObject &message);
121 void processDialogResponse(const QJsonObject &payload);
122
123 // Process properties
124 void processNewProperty(INDI::Property prop);
125 void processDeleteProperty(INDI::Property prop);
126 void processUpdateProperty(INDI::Property prop);
127
128 // Process message
129 void processMessage(const QSharedPointer<ISD::GenericDevice> &device, int id);
130
131 // StellarSolver
132 void sendStellarSolverProfiles();
133
134 void sendManualRotatorStatus(double currentPA, double targetPA, double threshold);
135
136 private slots:
137
138 // Connection
139 void onConnected();
140 void onDisconnected();
141
142 // Communication
143 void onTextReceived(const QString &);
144
145 private:
146 // Profiles
147 void sendProfiles();
148 void setProfileMapping(const QJsonObject &payload);
149 void sendStates();
150
151 // Capture
152 void processCaptureCommands(const QString &command, const QJsonObject &payload);
153 void sendTemperature(double value);
154
155 // Mount
156 void processMountCommands(const QString &command, const QJsonObject &payload);
157
158 // Focus
159 void processFocusCommands(const QString &command, const QJsonObject &payload);
160
161 // Guide
162 void processGuideCommands(const QString &command, const QJsonObject &payload);
163
164 // Align
165 void processAlignCommands(const QString &command, const QJsonObject &payload);
166
167 // Scheduler
168 void processSchedulerCommands(const QString &command, const QJsonObject &payload);
169
170 // Polar
171 void processPolarCommands(const QString &command, const QJsonObject &payload);
172
173 // Profile
174 void processProfileCommands(const QString &command, const QJsonObject &payload);
175
176 // Options
177 void processOptionsCommands(const QString &command, const QJsonObject &payload);
178
179 // Scopes
180 void processScopeCommands(const QString &command, const QJsonObject &payload);
181
182 // DSLRs
183 void processDSLRCommands(const QString &command, const QJsonObject &payload);
184
185 // Trains
186 void processTrainCommands(const QString &command, const QJsonObject &payload);
187
188 // Filter Manager commands
189 void processFilterManagerCommands(const QString &command, const QJsonObject &payload);
190
191 // Dark Library commands
192 void processDarkLibraryCommands(const QString &command, const QJsonObject &payload);
193
194 // Low-level Device commands
195 void processDeviceCommands(const QString &command, const QJsonObject &payload);
196
197 // Process Astronomy Library command
198 void processAstronomyCommands(const QString &command, const QJsonObject &payload);
199
200 void dispatchDebounceQueue();
201
202 KStarsDateTime getNextDawn();
203
204 void sendResponse(const QString &command, const QJsonObject &payload);
205 void sendResponse(const QString &command, const QJsonArray &payload);
206 void sendResponse(const QString &command, const QString &payload);
207 void sendResponse(const QString &command, bool payload);
208
209 void sendPendingProperties();
210
211 typedef struct
212 {
213 int number_integer;
214 uint number_unsigned_integer;
215 double number_double;
216 bool boolean;
217 QString text;
218 QUrl url;
219 } SimpleTypes;
220
221 QObject *findObject(const QString &name);
222 void invokeMethod(QObject *context, const QJsonObject &payload);
223 bool parseArgument(QVariant::Type type, const QVariant &arg, QGenericArgument &genericArg, SimpleTypes &types);
224
225 Ekos::Manager *m_Manager { nullptr };
227
228 bool m_sendBlobs { true};
229
230 QMap<QString, QSet<QString>> m_PropertySubscriptions;
231 QLineF correctionVector;
232 QRect m_BoundingRect;
233 QSize m_ViewSize;
234 double m_CurrentZoom {100};
235
236 QSet<INDI::Property *> m_PendingProperties;
237 QTimer m_PendingPropertiesTimer;
238 QTimer m_DebouncedSend;
239 QMap<QString, QVariantMap> m_DebouncedMap;
240
241 QDateTime m_ThrottleTS;
242 CatalogsDB::DBManager m_DSOManager;
243
244 typedef enum
245 {
246 North,
247 East,
248 South,
249 West,
250 All
251 } Direction;
252
253 // Throttle interval
254 static const uint16_t THROTTLE_INTERVAL = 1000;
255};
256
257}
Manages the catalog database and provides an interface to provide an interface to query and modify th...
Definition catalogsdb.h:183
Extension of QDateTime for KStars KStarsDateTime can represent the date/time as a Julian Day,...
Generic record interfaces and implementations.
Definition cloud.cpp:23
AlignState
Definition ekos.h:145
Q_OBJECTQ_OBJECT
virtual bool event(QEvent *e)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:19:02 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.