File indexing completed on 2024-05-12 15:23:40
0001 /* Ekos Internal Guider Class 0002 Copyright (C) 2016 Jasem Mutlaq <mutlaqja@ikarustech.com>. 0003 0004 Based on lin_guider 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #pragma once 0010 0011 #include "indi/indicommon.h" 0012 #include "../guideinterface.h" 0013 #include "calibration.h" 0014 0015 #include <QFile> 0016 #include <QPointer> 0017 #include <QQueue> 0018 #include <QTime> 0019 0020 #include <memory> 0021 0022 class QVector3D; 0023 class GuideView; 0024 class Edge; 0025 class GuideLog; 0026 0027 namespace Ekos 0028 { 0029 class CalibrationProcess 0030 { 0031 public: 0032 enum CalibrationStage 0033 { 0034 CAL_IDLE, 0035 CAL_ERROR, 0036 CAL_CAPTURE_IMAGE, 0037 CAL_SELECT_STAR, 0038 CAL_START, 0039 CAL_RA_INC, 0040 CAL_RA_DEC, 0041 CAL_DEC_INC, 0042 CAL_DEC_DEC, 0043 CAL_BACKLASH 0044 }; 0045 enum CalibrationType 0046 { 0047 CAL_NONE, 0048 CAL_RA_AUTO, 0049 CAL_RA_DEC_AUTO 0050 }; 0051 0052 CalibrationProcess(double startX, double startY, bool raOnly); 0053 ~CalibrationProcess() {} 0054 0055 void useCalibration(Calibration *calibrationPtr); 0056 bool inProgress() const; 0057 0058 void startup(); 0059 void setGuideLog(GuideLog *guideLogPtr); 0060 0061 void iterate(double x, double y); 0062 0063 // Return values from each iteration. 0064 void getCalibrationUpdate( 0065 GuideInterface::CalibrationUpdateType *type, 0066 QString *message, double *x, double *y) const; 0067 void getPulse(GuideDirection *dir, int *msecs) const; 0068 QString getLogStatus() const; 0069 Ekos::GuideState getStatus() const; 0070 0071 private: 0072 void initializeIteration(); 0073 0074 // Methods corresponding to each calibration state. 0075 void startState(); 0076 void raOutState(double cur_x, double cur_y); 0077 void raInState(double cur_x, double cur_y); 0078 void decBacklashState(double cur_x, double cur_y); 0079 void decOutState(double cur_x, double cur_y); 0080 void decInState(double cur_x, double cur_y); 0081 0082 // Setup the return values from each iteration. 0083 void addCalibrationUpdate(GuideInterface::CalibrationUpdateType type, 0084 QString message, double x = 0, double y = 0); 0085 0086 void addPulse(GuideDirection dir, int msecs); 0087 void addLogStatus(const QString &status); 0088 void addStatus(Ekos::GuideState s); 0089 0090 // calibration parameters 0091 int maximumSteps { 5 }; 0092 int turn_back_time { 0 }; 0093 int ra_iterations { 0 }; 0094 int dec_iterations { 0 }; 0095 int backlash_iterations { 0 }; 0096 int last_pulse { 0 }; 0097 int ra_total_pulse { 0 }; 0098 int de_total_pulse { 0 }; 0099 uint8_t backlash { 0 }; 0100 0101 // calibration coordinates 0102 double start_x1 { 0 }; 0103 double start_y1 { 0 }; 0104 double end_x1 { 0 }; 0105 double end_y1 { 0 }; 0106 double start_x2 { 0 }; 0107 double start_y2 { 0 }; 0108 double end_x2 { 0 }; 0109 double end_y2 { 0 }; 0110 double last_x { 0 }; 0111 double last_y { 0 }; 0112 double ra_distance {0}; 0113 double de_distance {0}; 0114 double start_backlash_x { 0 }; 0115 double start_backlash_y { 0 }; 0116 0117 CalibrationStage calibrationStage { CAL_IDLE }; 0118 CalibrationType calibrationType; 0119 0120 Calibration *calibration = nullptr; 0121 Calibration tempCalibration; 0122 bool raOnly = false; 0123 GuideLog *guideLog = nullptr; 0124 0125 // Return values from each iteration. 0126 // Most of these result in emits in internalguider.cpp 0127 bool axisCalibrationComplete = false; 0128 QString logString; 0129 GuideInterface::CalibrationUpdateType updateType; 0130 QString calibrationUpdate; 0131 double updateX, updateY; 0132 Ekos::GuideState status; 0133 GuideDirection pulseDirection; 0134 int pulseMsecs = 0; 0135 }; 0136 }