12#include "indi/indiweather.h"
13#include "kstarsdatetime.h"
14#include "geolocation.h"
15#include "schedulertypes.h"
24class SchedulerProcess;
31class SchedulerModuleState :
public QObject
38 SchedulerModuleState();
52 const QString ¤tProfile()
const
54 return m_currentProfile;
61 void setCurrentProfile(
const QString &
newName,
bool signal =
true);
69 SchedulerJob *activeJob()
const
92 void updateJobStage(SchedulerJobStage stage);
109 void setDirty(
bool value)
117 return m_schedulerState;
121 const StartupState &startupState()
const
123 return m_startupState;
126 int currentPosition()
const
128 return m_currentPosition;
132 void setStartupState(StartupState state);
134 const QUrl &startupScriptURL()
const
136 return m_startupScriptURL;
140 m_startupScriptURL =
newURL;
143 const ShutdownState &shutdownState()
const
145 return m_shutdownState;
147 void setShutdownState(ShutdownState state);
149 const QUrl &shutdownScriptURL()
const
151 return m_shutdownScriptURL;
158 const ParkWaitState &parkWaitState()
const
160 return m_parkWaitState;
162 void setParkWaitState(ParkWaitState state);
167 bool currentlySleeping()
169 return iterationTimer().
isActive() && timerState() == RUN_WAKEUP;
181 bool removeJob(
const int currentRow);
189 void disablePreemptiveShutdown();
190 const QDateTime &preemptiveShutdownWakeupTime()
const;
191 bool preemptiveShutdown()
const;
197 EkosState ekosState()
const
201 void setEkosState(EkosState state);
203 CommunicationStatus ekosCommunicationStatus()
const
205 return m_EkosCommunicationStatus;
216 bool increaseEkosConnectFailureCount();
218 void resetParkingCapFailureCount(uint8_t value = 0)
220 m_parkingCapFailureCount = value;
222 bool increaseParkingCapFailureCount();
223 void resetParkingMountFailureCount(uint8_t value = 0)
225 m_parkingMountFailureCount = value;
227 bool increaseParkingMountFailureCount();
228 uint8_t parkingMountFailureCount()
const
230 return m_parkingMountFailureCount;
232 void resetParkingDomeFailureCount(uint8_t value = 0)
234 m_parkingDomeFailureCount = value;
236 bool increaseParkingDomeFailureCount();
238 int indexToUse()
const
247 int healpixToUse()
const
249 return m_HealpixToUse;
258 return m_CapturedFramesCount;
269 void resetFailureCounters();
274 INDIState indiState()
const
278 void setIndiState(INDIState state);
280 CommunicationStatus indiCommunicationStatus()
const
282 return m_INDICommunicationStatus;
293 bool increaseIndiConnectFailureCount();
298 bool isINDIConnected()
const
300 return (indiCommunicationStatus() == Ekos::Success);
305 bool mountReady()
const
313 bool captureReady()
const
315 return m_CaptureReady;
321 bool domeReady()
const
329 bool capReady()
const
338 uint16_t captureBatch()
const
340 return m_captureBatch;
342 void resetCaptureBatch()
346 uint16_t increaseCaptureBatch()
348 return m_captureBatch++;
351 uint8_t captureFailureCount()
const
353 return m_captureFailureCount;
355 void resetCaptureFailureCount()
357 m_captureFailureCount = 0;
359 bool increaseCaptureFailureCount();
361 uint8_t focusFailureCount()
const
363 return m_focusFailureCount;
365 void resetFocusFailureCount()
367 m_focusFailureCount = 0;
369 bool increaseFocusFailureCount();
371 bool autofocusCompleted()
const
373 return m_autofocusCompleted;
375 void setAutofocusCompleted(
bool value)
377 m_autofocusCompleted = value;
380 uint8_t guideFailureCount()
const
382 return m_guideFailureCount;
384 void resetGuideFailureCount()
386 m_guideFailureCount = 0;
388 bool increaseGuideFailureCount();
390 uint8_t alignFailureCount()
const
392 return m_alignFailureCount;
394 void resetAlignFailureCount()
396 m_alignFailureCount = 0;
398 bool increaseAlignFailureCount();
400 int restartGuidingInterval()
const
402 return m_restartGuidingInterval;
407 return m_restartGuidingTime;
410 ISD::Weather::Status weatherStatus()
const
412 return m_weatherStatus;
414 void setWeatherStatus(ISD::Weather::Status newWeatherStatus)
416 m_weatherStatus = newWeatherStatus;
423 qint64 getCurrentOperationMsec()
const;
429 void startCurrentOperationTimer();
432 void cancelGuidingTimer();
433 bool isGuidingTimerActive();
441 storedLocalTime = time;
443 static bool hasLocalTime()
445 return storedLocalTime !=
nullptr;
462 void calculateDawnDusk();
474 return m_PreDawnDateTime;
484 static bool hasGeo();
492 void setupNextIteration(SchedulerTimerState
nextState);
495 SchedulerTimerState timerState()
const
507 return m_iterationTimer;
510 bool iterationSetup()
const
512 return m_iterationSetup;
514 void setIterationSetup(
bool setup)
516 m_iterationSetup = setup;
519 qint64 startMSecs()
const
523 void setStartMSecs(qint64 value)
525 m_startMSecs = value;
527 int increaseSchedulerIteration()
529 return ++m_schedulerIteration;
531 void resetSchedulerIteration()
533 m_schedulerIteration = 0;
536 int timerInterval()
const
538 return m_timerInterval;
540 void setTimerInterval(
int value)
542 m_timerInterval = value;
545 void setUpdatePeriodMs(
int ms)
547 m_UpdatePeriodMs =
ms;
549 int updatePeriodMs()
const
551 return m_UpdatePeriodMs;
554 uint sequenceExecutionCounter()
const
556 return m_sequenceExecutionCounter;
558 void resetSequenceExecutionCounter()
560 m_sequenceExecutionCounter = 1;
562 void increaseSequenceExecutionCounter()
564 m_sequenceExecutionCounter++;
567 static uint maxFailureAttempts();
575 return logText().
join(
"\n");
584 bool checkRepeatSequence();
586 void resetSolverIteration()
588 m_solverIteration = 0;
590 uint32_t increaseSolverIteration()
592 return ++m_solverIteration;
600 void ekosStateChanged(EkosState state);
602 void indiStateChanged(INDIState state);
606 void startupStateChanged(StartupState state);
608 void shutdownStateChanged(ShutdownState state);
610 void parkWaitStateChanged(ParkWaitState state);
612 void profilesChanged();
614 void currentProfileChanged();
616 void newLog(
const QString &text);
618 void currentPositionChanged(
int pos);
620 void jobStageChanged(SchedulerJobStage stage);
622 void updateNightTime(SchedulerJob
const * job =
nullptr);
632 SchedulerJob *m_activeJob {
nullptr };
640 StartupState m_startupState { STARTUP_IDLE };
642 QUrl m_startupScriptURL;
644 ShutdownState m_shutdownState { SHUTDOWN_IDLE };
647 int m_currentPosition { -1 };
649 QUrl m_shutdownScriptURL;
651 ParkWaitState m_parkWaitState { PARKWAIT_IDLE };
659 bool m_dirty {
false };
663 EkosState m_ekosState { EKOS_IDLE };
665 INDIState m_indiState { INDI_IDLE };
667 CommunicationStatus m_EkosCommunicationStatus { Ekos::Idle };
668 CommunicationStatus m_INDICommunicationStatus { Ekos::Idle };
671 bool m_MountReady {
false };
672 bool m_CaptureReady {
false };
673 bool m_DomeReady {
false };
674 bool m_CapReady {
false };
679 int m_IndexToUse { -1 };
680 int m_HealpixToUse { -1 };
684 bool m_autofocusCompleted {
false };
687 uint32_t m_solverIteration {0};
691 ISD::Weather::Status m_weatherStatus { ISD::Weather::WEATHER_IDLE };
697 uint m_sequenceExecutionCounter { 1 };
699 uint8_t m_indiConnectFailureCount { 0 };
701 uint8_t m_ekosConnectFailureCount { 0 };
703 uint8_t m_parkingCapFailureCount { 0 };
705 uint8_t m_parkingMountFailureCount { 0 };
707 uint8_t m_parkingDomeFailureCount { 0 };
709 uint16_t m_captureBatch { 0 };
711 uint8_t m_captureFailureCount { 0 };
713 uint8_t m_focusFailureCount { 0 };
715 uint8_t m_guideFailureCount { 0 };
717 uint8_t m_alignFailureCount { 0 };
726 SchedulerTimerState m_timerState { RUN_NOTHING };
729 int m_timerInterval { -1 };
732 bool m_iterationSetup {
false };
736 int m_schedulerIteration { 0 };
738 qint64 m_startMSecs { 0 };
741 int m_UpdatePeriodMs = 1000;
756 bool currentOperationTimeStarted {
false };
758 int m_restartGuidingInterval { -1 };
763 QDateTime m_preemptiveShutdownWakeupTime;
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.
QString join(QChar separator) const const
bool isActive() const const