File indexing completed on 2024-04-21 03:43:38

0001 /*
0002     SPDX-FileCopyrightText: 2023 Wolfgang Reissenberger <sterne-jaeger@openfuture.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "QString"
0010 
0011 namespace Ekos
0012 {
0013 typedef enum
0014 {
0015     STARTUP_IDLE,
0016     STARTUP_SCRIPT,
0017     STARTUP_UNPARK_DOME,
0018     STARTUP_UNPARKING_DOME,
0019     STARTUP_UNPARK_MOUNT,
0020     STARTUP_UNPARKING_MOUNT,
0021     STARTUP_UNPARK_CAP,
0022     STARTUP_UNPARKING_CAP,
0023     STARTUP_ERROR,
0024     STARTUP_COMPLETE
0025 } StartupState;
0026 typedef enum
0027 {
0028     SHUTDOWN_IDLE,
0029     SHUTDOWN_PARK_CAP,
0030     SHUTDOWN_PARKING_CAP,
0031     SHUTDOWN_PARK_MOUNT,
0032     SHUTDOWN_PARKING_MOUNT,
0033     SHUTDOWN_PARK_DOME,
0034     SHUTDOWN_PARKING_DOME,
0035     SHUTDOWN_SCRIPT,
0036     SHUTDOWN_SCRIPT_RUNNING,
0037     SHUTDOWN_ERROR,
0038     SHUTDOWN_COMPLETE
0039 } ShutdownState;
0040 typedef enum
0041 {
0042     PARKWAIT_IDLE,
0043     PARKWAIT_PARK,
0044     PARKWAIT_PARKING,
0045     PARKWAIT_PARKED,
0046     PARKWAIT_UNPARK,
0047     PARKWAIT_UNPARKING,
0048     PARKWAIT_UNPARKED,
0049     PARKWAIT_ERROR
0050 } ParkWaitState;
0051 // overall states of EKOS
0052 typedef enum { EKOS_IDLE, EKOS_STARTING, EKOS_STOPPING, EKOS_READY } EkosState;
0053 // overall states of INDI
0054 typedef enum { INDI_IDLE, INDI_CONNECTING, INDI_DISCONNECTING, INDI_PROPERTY_CHECK, INDI_READY } INDIState;
0055 
0056 /** @brief options what should happen if an error or abort occurs */
0057 typedef enum
0058 {
0059     ERROR_DONT_RESTART,
0060     ERROR_RESTART_AFTER_TERMINATION,
0061     ERROR_RESTART_IMMEDIATELY
0062 } ErrorHandlingStrategy;
0063 
0064 /** @brief Algorithms, in the same order as UI. */
0065 typedef enum
0066 {
0067     ALGORITHM_GREEDY = 1
0068 } SchedulerAlgorithm;
0069 
0070 
0071 /** @brief Conditions under which a SchedulerJob may start. */
0072 typedef enum
0073 {
0074     START_ASAP = 0,
0075     START_AT   = 2
0076 } StartupCondition;
0077 
0078 /** @brief Conditions under which a SchedulerJob may complete. */
0079 typedef enum
0080 {
0081     FINISH_SEQUENCE,
0082     FINISH_REPEAT,
0083     FINISH_LOOP,
0084     FINISH_AT
0085 } CompletionCondition;
0086 
0087 /** @brief IterationTypes, the different types of scheduler iterations that are run. */
0088 typedef enum
0089 {
0090     RUN_WAKEUP = 0,
0091     RUN_SCHEDULER,
0092     RUN_JOBCHECK,
0093     RUN_SHUTDOWN,
0094     RUN_NOTHING
0095 } SchedulerTimerState;
0096 
0097 /** @brief States of a SchedulerJob. */
0098 typedef enum
0099 {
0100     SCHEDJOB_IDLE,       /**< Job was just created, and is not evaluated yet */
0101     SCHEDJOB_EVALUATION, /**< Job is being evaluated */
0102     SCHEDJOB_SCHEDULED,  /**< Job was evaluated, and has a schedule */
0103     SCHEDJOB_BUSY,       /**< Job is being processed */
0104     SCHEDJOB_ERROR,      /**< Job encountered a fatal issue while processing, and must be reset manually */
0105     SCHEDJOB_ABORTED,    /**< Job encountered a transitory issue while processing, and will be rescheduled */
0106     SCHEDJOB_INVALID,    /**< Job has an incorrect configuration, and cannot proceed */
0107     SCHEDJOB_COMPLETE    /**< Job finished all required captures */
0108 } SchedulerJobStatus;
0109 
0110 /** @brief Running stages of a SchedulerJob. */
0111 typedef enum
0112 {
0113     SCHEDSTAGE_IDLE,
0114     SCHEDSTAGE_SLEWING,
0115     SCHEDSTAGE_SLEW_COMPLETE,
0116     SCHEDSTAGE_FOCUSING,
0117     SCHEDSTAGE_FOCUS_COMPLETE,
0118     SCHEDSTAGE_ALIGNING,
0119     SCHEDSTAGE_ALIGN_COMPLETE,
0120     SCHEDSTAGE_RESLEWING,
0121     SCHEDSTAGE_RESLEWING_COMPLETE,
0122     SCHEDSTAGE_POSTALIGN_FOCUSING,
0123     SCHEDSTAGE_POSTALIGN_FOCUSING_COMPLETE,
0124     SCHEDSTAGE_GUIDING,
0125     SCHEDSTAGE_GUIDING_COMPLETE,
0126     SCHEDSTAGE_CAPTURING,
0127     SCHEDSTAGE_COMPLETE
0128 } SchedulerJobStage;
0129 
0130 /** @brief mapping signature --> frames count */
0131 typedef QMap<QString, uint16_t> CapturedFramesMap;
0132 
0133 // Functions to make human-readable debug messages for the various enums.
0134 
0135 QString ekosStateString(EkosState state);
0136 QString indiStateString(INDIState state);
0137 QString startupStateString(StartupState state);
0138 QString shutdownStateString(ShutdownState state);
0139 QString parkWaitStateString(ParkWaitState state);
0140 QString timerStr(SchedulerTimerState state);
0141 QString startupConditionString(StartupCondition condition);
0142 QString completionConditionString(CompletionCondition condition);
0143 
0144 } // Ekos namespace