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);
67 void updateProfiles(
const QStringList &newProfiles);
69 SchedulerJob *activeJob()
const
73 void setActiveJob(SchedulerJob *newActiveJob);
92 void updateJobStage(SchedulerJobStage stage);
105 const QString &mainCameraDeviceName()
const
107 return m_mainCameraDeviceName;
109 void setMainCameraDeviceName(
const QString &newMainCameraDeviceName)
111 m_mainCameraDeviceName = newMainCameraDeviceName;
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);
197 void enablePreemptiveShutdown(
const QDateTime &wakeupTime);
198 void disablePreemptiveShutdown();
199 const QDateTime &preemptiveShutdownWakeupTime()
const;
200 bool preemptiveShutdown()
const;
206 EkosState ekosState()
const
210 void setEkosState(EkosState state);
212 CommunicationStatus ekosCommunicationStatus()
const
214 return m_EkosCommunicationStatus;
216 void setEkosCommunicationStatus(CommunicationStatus newEkosCommunicationStatus)
218 m_EkosCommunicationStatus = newEkosCommunicationStatus;
221 void resetEkosConnectFailureCount(uint8_t newEkosConnectFailureCount = 0)
223 m_ekosConnectFailureCount = newEkosConnectFailureCount;
225 bool increaseEkosConnectFailureCount();
227 void resetParkingCapFailureCount(uint8_t value = 0)
229 m_parkingCapFailureCount = value;
231 bool increaseParkingCapFailureCount();
232 void resetParkingMountFailureCount(uint8_t value = 0)
234 m_parkingMountFailureCount = value;
236 bool increaseParkingMountFailureCount();
237 uint8_t parkingMountFailureCount()
const
239 return m_parkingMountFailureCount;
241 void resetParkingDomeFailureCount(uint8_t value = 0)
243 m_parkingDomeFailureCount = value;
245 bool increaseParkingDomeFailureCount();
247 int indexToUse()
const
251 void setIndexToUse(
int newIndexToUse)
253 m_IndexToUse = newIndexToUse;
256 int healpixToUse()
const
258 return m_HealpixToUse;
260 void setHealpixToUse(
int newHealpixToUse)
262 m_HealpixToUse = newHealpixToUse;
267 return m_CapturedFramesCount;
272 m_CapturedFramesCount = newCapturedFramesCount;
278 void resetFailureCounters();
283 INDIState indiState()
const
287 void setIndiState(INDIState state);
289 CommunicationStatus indiCommunicationStatus()
const
291 return m_INDICommunicationStatus;
293 void setIndiCommunicationStatus(CommunicationStatus newINDICommunicationStatus)
295 m_INDICommunicationStatus = newINDICommunicationStatus;
298 void resetIndiConnectFailureCount(uint8_t newIndiConnectFailureCount = 0)
300 m_indiConnectFailureCount = newIndiConnectFailureCount;
302 bool increaseIndiConnectFailureCount();
307 bool isINDIConnected()
const
309 return (indiCommunicationStatus() == Ekos::Success);
314 bool mountReady()
const
318 void setMountReady(
bool readiness)
320 m_MountReady = readiness;
322 bool captureReady()
const
324 return m_CaptureReady;
326 void setCaptureReady(
bool readiness)
328 m_CaptureReady = readiness;
330 bool domeReady()
const
334 void setDomeReady(
bool readiness)
336 m_DomeReady = readiness;
338 bool capReady()
const
342 void setCapReady(
bool readiness)
344 m_CapReady = readiness;
347 uint16_t captureBatch()
const
349 return m_captureBatch;
351 void resetCaptureBatch()
355 uint16_t increaseCaptureBatch()
357 return m_captureBatch++;
360 uint8_t captureFailureCount()
const
362 return m_captureFailureCount;
364 void resetCaptureFailureCount()
366 m_captureFailureCount = 0;
368 bool increaseCaptureFailureCount();
370 uint8_t focusFailureCount()
const
372 return m_focusFailureCount;
374 void resetFocusFailureCount()
376 m_focusFailureCount = 0;
378 bool increaseFocusFailureCount();
380 bool autofocusCompleted()
const
382 return m_autofocusCompleted;
384 void setAutofocusCompleted(
bool value)
386 m_autofocusCompleted = value;
389 uint8_t guideFailureCount()
const
391 return m_guideFailureCount;
393 void resetGuideFailureCount()
395 m_guideFailureCount = 0;
397 bool increaseGuideFailureCount();
399 uint8_t alignFailureCount()
const
401 return m_alignFailureCount;
403 void resetAlignFailureCount()
405 m_alignFailureCount = 0;
407 bool increaseAlignFailureCount();
409 int restartGuidingInterval()
const
411 return m_restartGuidingInterval;
416 return m_restartGuidingTime;
419 ISD::Weather::Status weatherStatus()
const
421 return m_weatherStatus;
423 void setWeatherStatus(ISD::Weather::Status newWeatherStatus)
425 m_weatherStatus = newWeatherStatus;
432 qint64 getCurrentOperationMsec()
const;
438 void startCurrentOperationTimer();
441 void cancelGuidingTimer();
442 bool isGuidingTimerActive();
443 void startGuidingTimer(
int milliseconds);
450 storedLocalTime = time;
452 static bool hasLocalTime()
454 return storedLocalTime !=
nullptr;
471 void calculateDawnDusk();
483 return m_PreDawnDateTime;
493 static bool hasGeo();
501 void setupNextIteration(SchedulerTimerState nextState);
502 void setupNextIteration(SchedulerTimerState nextState,
int milliseconds);
504 SchedulerTimerState timerState()
const
509 void setTimerState(SchedulerTimerState newTimerState)
511 m_timerState = newTimerState;
516 return m_iterationTimer;
519 bool iterationSetup()
const
521 return m_iterationSetup;
523 void setIterationSetup(
bool setup)
525 m_iterationSetup = setup;
528 qint64 startMSecs()
const
532 void setStartMSecs(qint64 value)
534 m_startMSecs = value;
536 int increaseSchedulerIteration()
538 return ++m_schedulerIteration;
540 void resetSchedulerIteration()
542 m_schedulerIteration = 0;
545 int timerInterval()
const
547 return m_timerInterval;
549 void setTimerInterval(
int value)
551 m_timerInterval = value;
554 void setUpdatePeriodMs(
int ms)
556 m_UpdatePeriodMs = ms;
558 int updatePeriodMs()
const
560 return m_UpdatePeriodMs;
563 uint sequenceExecutionCounter()
const
565 return m_sequenceExecutionCounter;
567 void resetSequenceExecutionCounter()
569 m_sequenceExecutionCounter = 1;
571 void increaseSequenceExecutionCounter()
573 m_sequenceExecutionCounter++;
576 static uint maxFailureAttempts();
584 return logText().
join(
"\n");
593 bool checkRepeatSequence();
595 void resetSolverIteration()
597 m_solverIteration = 0;
599 uint32_t increaseSolverIteration()
601 return ++m_solverIteration;
609 void ekosStateChanged(EkosState state);
611 void indiStateChanged(INDIState state);
615 void startupStateChanged(StartupState state);
617 void shutdownStateChanged(ShutdownState state);
619 void parkWaitStateChanged(ParkWaitState state);
621 void profilesChanged();
623 void currentProfileChanged();
625 void newLog(
const QString &text);
627 void currentPositionChanged(
int pos);
629 void jobStageChanged(SchedulerJobStage stage);
631 void updateNightTime(SchedulerJob
const * job =
nullptr);
641 SchedulerJob *m_activeJob {
nullptr };
643 QString m_mainCameraDeviceName;
651 StartupState m_startupState { STARTUP_IDLE };
653 QUrl m_startupScriptURL;
655 ShutdownState m_shutdownState { SHUTDOWN_IDLE };
658 int m_currentPosition { -1 };
660 QUrl m_shutdownScriptURL;
662 ParkWaitState m_parkWaitState { PARKWAIT_IDLE };
670 bool m_dirty {
false };
674 EkosState m_ekosState { EKOS_IDLE };
676 INDIState m_indiState { INDI_IDLE };
678 CommunicationStatus m_EkosCommunicationStatus { Ekos::Idle };
679 CommunicationStatus m_INDICommunicationStatus { Ekos::Idle };
682 bool m_MountReady {
false };
683 bool m_CaptureReady {
false };
684 bool m_DomeReady {
false };
685 bool m_CapReady {
false };
690 int m_IndexToUse { -1 };
691 int m_HealpixToUse { -1 };
695 bool m_autofocusCompleted {
false };
698 uint32_t m_solverIteration {0};
702 ISD::Weather::Status m_weatherStatus { ISD::Weather::WEATHER_IDLE };
708 uint m_sequenceExecutionCounter { 1 };
710 uint8_t m_indiConnectFailureCount { 0 };
712 uint8_t m_ekosConnectFailureCount { 0 };
714 uint8_t m_parkingCapFailureCount { 0 };
716 uint8_t m_parkingMountFailureCount { 0 };
718 uint8_t m_parkingDomeFailureCount { 0 };
720 uint16_t m_captureBatch { 0 };
722 uint8_t m_captureFailureCount { 0 };
724 uint8_t m_focusFailureCount { 0 };
726 uint8_t m_guideFailureCount { 0 };
728 uint8_t m_alignFailureCount { 0 };
737 SchedulerTimerState m_timerState { RUN_NOTHING };
740 int m_timerInterval { -1 };
743 bool m_iterationSetup {
false };
747 int m_schedulerIteration { 0 };
749 qint64 m_startMSecs { 0 };
752 int m_UpdatePeriodMs = 1000;
767 bool currentOperationTimeStarted {
false };
769 int m_restartGuidingInterval { -1 };
774 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