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
74 void setActiveJob(SchedulerJob *newActiveJob);
103 void updateJobStage(SchedulerJobStage stage);
121 void setDirty(
bool value)
129 return m_schedulerState;
133 const StartupState &startupState()
const
135 return m_startupState;
138 int currentPosition()
const
140 return m_currentPosition;
142 void setCurrentPosition(
int newCurrentPosition);
144 void setStartupState(StartupState state);
146 const QUrl &startupScriptURL()
const
148 return m_startupScriptURL;
150 void setStartupScriptURL(
const QUrl &newURL)
152 m_startupScriptURL = newURL;
155 const ShutdownState &shutdownState()
const
157 return m_shutdownState;
159 void setShutdownState(ShutdownState state);
161 const QUrl &shutdownScriptURL()
const
163 return m_shutdownScriptURL;
165 void setShutdownScriptURL(
const QUrl &newShutdownScriptURL)
167 m_shutdownScriptURL = newShutdownScriptURL;
170 const ParkWaitState &parkWaitState()
const
172 return m_parkWaitState;
174 void setParkWaitState(ParkWaitState state);
179 bool currentlySleeping()
181 return iterationTimer().
isActive() && timerState() == RUN_WAKEUP;
193 bool removeJob(
const int currentRow);
198 void refreshFollowerLists();
203 SchedulerJob *findLead(
int position,
bool upward =
true);
210 void enablePreemptiveShutdown(
const QDateTime &wakeupTime);
211 void disablePreemptiveShutdown();
212 const QDateTime &preemptiveShutdownWakeupTime()
const;
213 bool preemptiveShutdown()
const;
219 EkosState ekosState()
const
223 void setEkosState(EkosState state);
225 CommunicationStatus ekosCommunicationStatus()
const
227 return m_EkosCommunicationStatus;
229 void setEkosCommunicationStatus(CommunicationStatus newEkosCommunicationStatus)
231 m_EkosCommunicationStatus = newEkosCommunicationStatus;
234 void resetEkosConnectFailureCount(uint8_t newEkosConnectFailureCount = 0)
236 m_ekosConnectFailureCount = newEkosConnectFailureCount;
238 bool increaseEkosConnectFailureCount();
240 void resetParkingCapFailureCount(uint8_t value = 0)
242 m_parkingCapFailureCount = value;
244 bool increaseParkingCapFailureCount();
245 void resetParkingMountFailureCount(uint8_t value = 0)
247 m_parkingMountFailureCount = value;
249 bool increaseParkingMountFailureCount();
250 uint8_t parkingMountFailureCount()
const
252 return m_parkingMountFailureCount;
254 void resetParkingDomeFailureCount(uint8_t value = 0)
256 m_parkingDomeFailureCount = value;
258 bool increaseParkingDomeFailureCount();
260 int indexToUse()
const
264 void setIndexToUse(
int newIndexToUse)
266 m_IndexToUse = newIndexToUse;
269 int healpixToUse()
const
271 return m_HealpixToUse;
273 void setHealpixToUse(
int newHealpixToUse)
275 m_HealpixToUse = newHealpixToUse;
280 return m_CapturedFramesCount;
285 m_CapturedFramesCount = newCapturedFramesCount;
291 void resetFailureCounters();
296 INDIState indiState()
const
300 void setIndiState(INDIState state);
302 CommunicationStatus indiCommunicationStatus()
const
304 return m_INDICommunicationStatus;
306 void setIndiCommunicationStatus(CommunicationStatus newINDICommunicationStatus)
308 m_INDICommunicationStatus = newINDICommunicationStatus;
309 emit indiCommunicationStatusChanged(m_INDICommunicationStatus);
312 void resetIndiConnectFailureCount(uint8_t newIndiConnectFailureCount = 0)
314 m_indiConnectFailureCount = newIndiConnectFailureCount;
316 bool increaseIndiConnectFailureCount();
321 bool isINDIConnected()
const
323 return (indiCommunicationStatus() == Ekos::Success);
328 bool mountReady()
const
332 void setMountReady(
bool readiness)
334 m_MountReady = readiness;
336 bool captureReady()
const
338 return m_CaptureReady;
340 void setCaptureReady(
bool readiness)
342 m_CaptureReady = readiness;
344 bool domeReady()
const
348 void setDomeReady(
bool readiness)
350 m_DomeReady = readiness;
352 bool capReady()
const
356 void setCapReady(
bool readiness)
358 m_CapReady = readiness;
361 uint16_t captureBatch()
const
363 return m_captureBatch;
365 void resetCaptureBatch()
369 uint16_t increaseCaptureBatch()
371 return m_captureBatch++;
374 uint8_t captureFailureCount()
const
376 return m_captureFailureCount;
378 void resetCaptureFailureCount()
380 m_captureFailureCount = 0;
382 bool increaseCaptureFailureCount();
384 uint8_t focusFailureCount(
const QString &trainname)
const
386 return m_focusFailureCount[trainname];
388 void resetFocusFailureCount(
const QString &trainname)
390 m_focusFailureCount[trainname] = 0;
392 void resetFocusFailureCount()
394 m_focusFailureCount.
clear();
396 bool increaseFocusFailureCount(
const QString &trainname);
398 bool increaseAllFocusFailureCounts();
400 bool autofocusCompleted(
const QString &trainname)
const;
401 void setAutofocusCompleted(
const QString &trainname,
bool value);
402 bool autofocusCompleted()
const;
404 void resetAutofocusCompleted()
406 m_autofocusCompleted.
clear();
409 uint8_t guideFailureCount()
const
411 return m_guideFailureCount;
413 void resetGuideFailureCount()
415 m_guideFailureCount = 0;
417 bool increaseGuideFailureCount();
419 uint8_t alignFailureCount()
const
421 return m_alignFailureCount;
423 void resetAlignFailureCount()
425 m_alignFailureCount = 0;
427 bool increaseAlignFailureCount();
429 int restartGuidingInterval()
const
431 return m_restartGuidingInterval;
436 return m_restartGuidingTime;
439 ISD::Weather::Status weatherStatus()
const
441 return m_weatherStatus;
443 void setWeatherStatus(ISD::Weather::Status newWeatherStatus)
445 m_weatherStatus = newWeatherStatus;
452 qint64 getCurrentOperationMsec()
const;
458 void startCurrentOperationTimer();
461 void cancelGuidingTimer();
462 bool isGuidingTimerActive();
463 void startGuidingTimer(
int milliseconds);
470 storedLocalTime = time;
472 static bool hasLocalTime()
474 return storedLocalTime !=
nullptr;
491 void calculateDawnDusk();
503 return m_PreDawnDateTime;
513 static bool hasGeo();
521 void setupNextIteration(SchedulerTimerState nextState);
522 void setupNextIteration(SchedulerTimerState nextState,
int milliseconds);
524 SchedulerTimerState timerState()
const
529 void setTimerState(SchedulerTimerState newTimerState)
531 m_timerState = newTimerState;
536 return m_iterationTimer;
539 bool iterationSetup()
const
541 return m_iterationSetup;
543 void setIterationSetup(
bool setup)
545 m_iterationSetup = setup;
548 qint64 startMSecs()
const
552 void setStartMSecs(qint64 value)
554 m_startMSecs = value;
556 int increaseSchedulerIteration()
558 return ++m_schedulerIteration;
560 void resetSchedulerIteration()
562 m_schedulerIteration = 0;
565 int timerInterval()
const
567 return m_timerInterval;
569 void setTimerInterval(
int value)
571 m_timerInterval = value;
574 void setUpdatePeriodMs(
int ms)
576 m_UpdatePeriodMs = ms;
578 int updatePeriodMs()
const
580 return m_UpdatePeriodMs;
583 uint sequenceExecutionCounter()
const
585 return m_sequenceExecutionCounter;
587 void resetSequenceExecutionCounter()
589 m_sequenceExecutionCounter = 1;
591 void increaseSequenceExecutionCounter()
593 m_sequenceExecutionCounter++;
596 static uint maxFailureAttempts();
604 return logText().
join(
"\n");
613 bool checkRepeatSequence();
615 void resetSolverIteration()
617 m_solverIteration = 0;
619 uint32_t increaseSolverIteration()
621 return ++m_solverIteration;
629 void ekosStateChanged(EkosState state);
631 void indiStateChanged(INDIState state);
633 void indiCommunicationStatusChanged(CommunicationStatus status);
637 void startupStateChanged(StartupState state);
639 void shutdownStateChanged(ShutdownState state);
641 void parkWaitStateChanged(ParkWaitState state);
643 void profilesChanged();
645 void currentProfileChanged();
647 void newLog(
const QString &text);
649 void currentPositionChanged(
int pos);
651 void jobStageChanged(SchedulerJobStage stage);
653 void updateNightTime(SchedulerJob
const * job =
nullptr);
663 SchedulerJob *m_activeJob {
nullptr };
671 StartupState m_startupState { STARTUP_IDLE };
673 QUrl m_startupScriptURL;
675 ShutdownState m_shutdownState { SHUTDOWN_IDLE };
678 int m_currentPosition { -1 };
680 QUrl m_shutdownScriptURL;
682 ParkWaitState m_parkWaitState { PARKWAIT_IDLE };
690 bool m_dirty {
false };
694 EkosState m_ekosState { EKOS_IDLE };
696 INDIState m_indiState { INDI_IDLE };
698 CommunicationStatus m_EkosCommunicationStatus { Ekos::Idle };
699 CommunicationStatus m_INDICommunicationStatus { Ekos::Idle };
702 bool m_MountReady {
false };
703 bool m_CaptureReady {
false };
704 bool m_DomeReady {
false };
705 bool m_CapReady {
false };
710 int m_IndexToUse { -1 };
711 int m_HealpixToUse { -1 };
715 QMap <QString, bool> m_autofocusCompleted;
718 uint32_t m_solverIteration {0};
722 ISD::Weather::Status m_weatherStatus { ISD::Weather::WEATHER_IDLE };
728 uint m_sequenceExecutionCounter { 1 };
730 uint8_t m_indiConnectFailureCount { 0 };
732 uint8_t m_ekosConnectFailureCount { 0 };
734 uint8_t m_parkingCapFailureCount { 0 };
736 uint8_t m_parkingMountFailureCount { 0 };
738 uint8_t m_parkingDomeFailureCount { 0 };
740 uint16_t m_captureBatch { 0 };
742 uint8_t m_captureFailureCount { 0 };
744 QMap <QString, uint8_t> m_focusFailureCount;
746 uint8_t m_guideFailureCount { 0 };
748 uint8_t m_alignFailureCount { 0 };
757 SchedulerTimerState m_timerState { RUN_NOTHING };
760 int m_timerInterval { -1 };
763 bool m_iterationSetup {
false };
767 int m_schedulerIteration { 0 };
769 qint64 m_startMSecs { 0 };
772 int m_UpdatePeriodMs = 1000;
787 bool currentOperationTimeStarted {
false };
789 int m_restartGuidingInterval { -1 };
794 QDateTime m_preemptiveShutdownWakeupTime;
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