12#include "indi/indiweather.h"
13#include "kstarsdatetime.h"
14#include "geolocation.h"
15#include "schedulertypes.h"
16#include "ekos/capture/capturetypes.h"
32class SchedulerModuleState :
public QObject
39 SchedulerModuleState();
53 const QString ¤tProfile()
const
55 return m_currentProfile;
62 void setCurrentProfile(
const QString &newName,
bool signal =
true);
68 void updateProfiles(
const QStringList &newProfiles);
70 SchedulerJob *activeJob(
const QString &trainname =
"")
const;
71 void setActiveJob(SchedulerJob *newActiveJob);
100 void updateJobStage(SchedulerJobStage stage);
118 void setDirty(
bool value)
126 return m_schedulerState;
130 const StartupState &startupState()
const
132 return m_startupState;
135 int currentPosition()
const
137 return m_currentPosition;
139 void setCurrentPosition(
int newCurrentPosition);
141 void setStartupState(StartupState state);
143 const QUrl &startupScriptURL()
const
145 return m_startupScriptURL;
147 void setStartupScriptURL(
const QUrl &newURL)
149 m_startupScriptURL = newURL;
152 const ShutdownState &shutdownState()
const
154 return m_shutdownState;
156 void setShutdownState(ShutdownState state);
158 const QUrl &shutdownScriptURL()
const
160 return m_shutdownScriptURL;
162 void setShutdownScriptURL(
const QUrl &newShutdownScriptURL)
164 m_shutdownScriptURL = newShutdownScriptURL;
167 const ParkWaitState &parkWaitState()
const
169 return m_parkWaitState;
171 void setParkWaitState(ParkWaitState state);
176 bool currentlySleeping()
178 return iterationTimer().
isActive() && timerState() == RUN_WAKEUP;
190 bool removeJob(
const int currentRow);
195 void refreshFollowerLists();
200 SchedulerJob *findLead(
int position,
bool upward =
true);
207 void enablePreemptiveShutdown(
const QDateTime &wakeupTime);
208 void disablePreemptiveShutdown();
209 const QDateTime &preemptiveShutdownWakeupTime()
const;
210 bool preemptiveShutdown()
const;
216 EkosState ekosState()
const
220 void setEkosState(EkosState state);
222 CommunicationStatus ekosCommunicationStatus()
const
224 return m_EkosCommunicationStatus;
226 void setEkosCommunicationStatus(CommunicationStatus newEkosCommunicationStatus)
228 m_EkosCommunicationStatus = newEkosCommunicationStatus;
231 void resetEkosConnectFailureCount(uint8_t newEkosConnectFailureCount = 0)
233 m_ekosConnectFailureCount = newEkosConnectFailureCount;
235 bool increaseEkosConnectFailureCount();
237 void resetParkingCapFailureCount(uint8_t value = 0)
239 m_parkingCapFailureCount = value;
241 bool increaseParkingCapFailureCount();
242 void resetParkingMountFailureCount(uint8_t value = 0)
244 m_parkingMountFailureCount = value;
246 bool increaseParkingMountFailureCount();
247 uint8_t parkingMountFailureCount()
const
249 return m_parkingMountFailureCount;
251 void resetParkingDomeFailureCount(uint8_t value = 0)
253 m_parkingDomeFailureCount = value;
255 bool increaseParkingDomeFailureCount();
257 int indexToUse()
const
261 void setIndexToUse(
int newIndexToUse)
263 m_IndexToUse = newIndexToUse;
266 int healpixToUse()
const
268 return m_HealpixToUse;
270 void setHealpixToUse(
int newHealpixToUse)
272 m_HealpixToUse = newHealpixToUse;
277 return m_CapturedFramesCount;
282 m_CapturedFramesCount = newCapturedFramesCount;
285 void setWeatherGracePeriodActive(
bool active)
287 m_WeatherGracePeriodActive = active;
289 bool weatherGracePeriodActive()
const
291 return m_WeatherGracePeriodActive;
297 void resetFailureCounters();
302 INDIState indiState()
const
306 void setIndiState(INDIState state);
308 CommunicationStatus indiCommunicationStatus()
const
310 return m_INDICommunicationStatus;
312 void setIndiCommunicationStatus(CommunicationStatus newINDICommunicationStatus)
314 m_INDICommunicationStatus = newINDICommunicationStatus;
315 emit indiCommunicationStatusChanged(m_INDICommunicationStatus);
318 void resetIndiConnectFailureCount(uint8_t newIndiConnectFailureCount = 0)
320 m_indiConnectFailureCount = newIndiConnectFailureCount;
322 bool increaseIndiConnectFailureCount();
327 bool isINDIConnected()
const
329 return (indiCommunicationStatus() == Ekos::Success);
334 bool mountReady()
const
338 void setMountReady(
bool readiness)
340 m_MountReady = readiness;
342 bool captureReady()
const
344 return m_CaptureReady;
346 void setCaptureReady(
bool readiness)
348 m_CaptureReady = readiness;
350 bool domeReady()
const
354 void setDomeReady(
bool readiness)
356 m_DomeReady = readiness;
358 bool capReady()
const
362 void setCapReady(
bool readiness)
364 m_CapReady = readiness;
367 uint16_t captureBatch()
const
369 return m_captureBatch;
371 void resetCaptureBatch()
375 uint16_t increaseCaptureBatch()
377 return m_captureBatch++;
380 uint8_t captureFailureCount()
const
382 return m_captureFailureCount;
384 void resetCaptureFailureCount()
386 m_captureFailureCount = 0;
388 bool increaseCaptureFailureCount();
390 uint8_t focusFailureCount(
const QString &trainname)
const
392 return m_focusFailureCount[trainname];
394 void resetFocusFailureCount(
const QString &trainname)
396 m_focusFailureCount[trainname] = 0;
398 void resetFocusFailureCount()
400 m_focusFailureCount.
clear();
402 bool increaseFocusFailureCount(
const QString &trainname);
404 bool increaseAllFocusFailureCounts();
406 bool autofocusCompleted(
const QString &trainname)
const;
407 void setAutofocusCompleted(
const QString &trainname,
bool value);
408 bool autofocusCompleted()
const;
410 void resetAutofocusCompleted()
412 m_autofocusCompleted.
clear();
415 uint8_t guideFailureCount()
const
417 return m_guideFailureCount;
419 void resetGuideFailureCount()
421 m_guideFailureCount = 0;
423 bool increaseGuideFailureCount();
425 uint8_t alignFailureCount()
const
427 return m_alignFailureCount;
429 void resetAlignFailureCount()
431 m_alignFailureCount = 0;
433 bool increaseAlignFailureCount();
435 int restartGuidingInterval()
const
437 return m_restartGuidingInterval;
442 return m_restartGuidingTime;
445 ISD::Weather::Status weatherStatus()
const
447 return m_weatherStatus;
449 void setWeatherStatus(ISD::Weather::Status newWeatherStatus)
451 m_weatherStatus = newWeatherStatus;
458 qint64 getCurrentOperationMsec()
const;
464 void startCurrentOperationTimer();
467 void cancelGuidingTimer();
468 bool isGuidingTimerActive();
469 void startGuidingTimer(
int milliseconds);
476 storedLocalTime = time;
478 static bool hasLocalTime()
480 return storedLocalTime !=
nullptr;
497 void calculateDawnDusk();
509 return m_PreDawnDateTime;
519 static bool hasGeo();
527 void setupNextIteration(SchedulerTimerState nextState);
528 void setupNextIteration(SchedulerTimerState nextState,
int milliseconds);
530 SchedulerTimerState timerState()
const
535 void setTimerState(SchedulerTimerState newTimerState)
537 m_timerState = newTimerState;
542 return m_iterationTimer;
547 return m_tickleTimer;
550 bool iterationSetup()
const
552 return m_iterationSetup;
554 void setIterationSetup(
bool setup)
556 m_iterationSetup = setup;
559 qint64 startMSecs()
const
563 void setStartMSecs(qint64 value)
565 m_startMSecs = value;
567 int increaseSchedulerIteration()
569 return ++m_schedulerIteration;
571 void resetSchedulerIteration()
573 m_schedulerIteration = 0;
576 int timerInterval()
const
578 return m_timerInterval;
580 void setTimerInterval(
int value)
582 m_timerInterval = value;
585 void setUpdatePeriodMs(
int ms)
587 m_UpdatePeriodMs = ms;
589 int updatePeriodMs()
const
591 return m_UpdatePeriodMs;
594 uint sequenceExecutionCounter()
const
596 return m_sequenceExecutionCounter;
598 void resetSequenceExecutionCounter()
600 m_sequenceExecutionCounter = 1;
602 void increaseSequenceExecutionCounter()
604 m_sequenceExecutionCounter++;
607 static uint maxFailureAttempts();
615 return logText().
join(
"\n");
624 bool checkRepeatSequence();
626 void resetSolverIteration()
628 m_solverIteration = 0;
630 uint32_t increaseSolverIteration()
632 return ++m_solverIteration;
640 void ekosStateChanged(EkosState state);
642 void indiStateChanged(INDIState state);
644 void indiCommunicationStatusChanged(CommunicationStatus status);
648 void startupStateChanged(StartupState state);
650 void shutdownStateChanged(ShutdownState state);
652 void parkWaitStateChanged(ParkWaitState state);
654 void profilesChanged();
656 void currentProfileChanged();
658 void newLog(
const QString &text);
660 void currentPositionChanged(
int pos);
662 void jobStageChanged(SchedulerJobStage stage);
664 void updateNightTime(SchedulerJob
const * job =
nullptr);
674 SchedulerJob *m_activeJob {
nullptr };
682 StartupState m_startupState { STARTUP_IDLE };
684 QUrl m_startupScriptURL;
686 ShutdownState m_shutdownState { SHUTDOWN_IDLE };
689 int m_currentPosition { -1 };
691 QUrl m_shutdownScriptURL;
693 ParkWaitState m_parkWaitState { PARKWAIT_IDLE };
701 bool m_dirty {
false };
705 EkosState m_ekosState { EKOS_IDLE };
707 INDIState m_indiState { INDI_IDLE };
709 CommunicationStatus m_EkosCommunicationStatus { Ekos::Idle };
710 CommunicationStatus m_INDICommunicationStatus { Ekos::Idle };
713 bool m_MountReady {
false };
714 bool m_CaptureReady {
false };
715 bool m_DomeReady {
false };
716 bool m_CapReady {
false };
721 int m_IndexToUse { -1 };
722 int m_HealpixToUse { -1 };
726 QMap <QString, bool> m_autofocusCompleted;
729 uint32_t m_solverIteration {0};
733 ISD::Weather::Status m_weatherStatus { ISD::Weather::WEATHER_IDLE };
739 uint m_sequenceExecutionCounter { 1 };
741 uint8_t m_indiConnectFailureCount { 0 };
743 uint8_t m_ekosConnectFailureCount { 0 };
745 uint8_t m_parkingCapFailureCount { 0 };
747 uint8_t m_parkingMountFailureCount { 0 };
749 uint8_t m_parkingDomeFailureCount { 0 };
751 uint16_t m_captureBatch { 0 };
753 uint8_t m_captureFailureCount { 0 };
755 QMap <QString, uint8_t> m_focusFailureCount;
757 uint8_t m_guideFailureCount { 0 };
759 uint8_t m_alignFailureCount { 0 };
768 SchedulerTimerState m_timerState { RUN_NOTHING };
771 int m_timerInterval { -1 };
774 bool m_iterationSetup {
false };
780 int m_schedulerIteration { 0 };
782 qint64 m_startMSecs { 0 };
785 int m_UpdatePeriodMs = 1000;
800 bool currentOperationTimeStarted {
false };
802 int m_restartGuidingInterval { -1 };
807 QDateTime m_preemptiveShutdownWakeupTime;
809 bool m_WeatherGracePeriodActive {
false};
The SchedulerProcess class holds the entire business logic for controlling the execution of the EKOS ...
Contains all relevant information for specifying a location on Earth: City Name, State/Province name,...
Extension of QDateTime for KStars KStarsDateTime can represent the date/time as a Julian Day,...
The SchedulerState class holds all attributes defining the scheduler's state.
Ekos is an advanced Astrophotography tool for Linux.
QMap< QString, uint16_t > CapturedFramesMap
mapping signature --> frames count
QString join(QChar separator) const const
bool isActive() const const