File indexing completed on 2024-04-28 15:09:53
0001 /* 0002 SPDX-FileCopyrightText: 2016 Jasem Mutlaq <mutlaqja@ikarustech.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "ekos/ekos.h" 0010 #include "indi/indimount.h" 0011 #include <QObject> 0012 #include <QVector3D> 0013 0014 #include <cstdint> 0015 0016 class QString; 0017 0018 namespace Ekos 0019 { 0020 /** 0021 * @class GuideInterface 0022 * @short Interface skeleton for implementation of different guiding applications and/or routines 0023 * 0024 * @author Jasem Mutlaq 0025 * @version 1.0 0026 */ 0027 class GuideInterface : public QObject 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 GuideInterface() = default; 0033 virtual ~GuideInterface() override = default; 0034 0035 virtual bool Connect() = 0; 0036 virtual bool Disconnect() = 0; 0037 virtual bool isConnected() = 0; 0038 0039 virtual bool calibrate() = 0; 0040 virtual bool guide() = 0; 0041 virtual bool suspend() = 0; 0042 virtual bool resume() = 0; 0043 virtual bool abort() = 0; 0044 virtual bool dither(double pixels) = 0; 0045 virtual bool clearCalibration() = 0; 0046 virtual bool reacquire() 0047 { 0048 return false; 0049 } 0050 0051 virtual bool setGuiderParams(double ccdPixelSizeX, double ccdPixelSizeY, double mountAperture, 0052 double mountFocalLength); 0053 virtual bool getGuiderParams(double *ccdPixelSizeX, double *ccdPixelSizeY, double *mountAperture, 0054 double *mountFocalLength); 0055 0056 virtual bool setFrameParams(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t binX, uint16_t binY); 0057 virtual bool getFrameParams(uint16_t *x, uint16_t *y, uint16_t *w, uint16_t *h, uint16_t *binX, uint16_t *binY); 0058 0059 virtual void setStarPosition(QVector3D &starCenter); 0060 0061 virtual void setMountCoords(const SkyPoint &position, ISD::Mount::PierSide side); 0062 virtual void setPierSide(ISD::Mount::PierSide newSide); 0063 virtual void resetGPG() {}; 0064 0065 enum CalibrationUpdateType 0066 { 0067 RA_IN, 0068 RA_OUT, 0069 BACKLASH, 0070 DEC_IN, 0071 DEC_OUT, 0072 CALIBRATION_MESSAGE_ONLY 0073 }; 0074 0075 signals: 0076 void newLog(const QString &); 0077 void newStatus(Ekos::GuideState); 0078 void newAxisDelta(double delta_ra, double delta_dec); 0079 void newAxisSigma(double sigma_ra, double sigma_dec); 0080 void newAxisPulse(double pulse_ra, double pulse_dec); 0081 void newStarPosition(const QVector3D &newCenter, bool updateNow); 0082 void newStarPixmap(QPixmap &); 0083 void newSNR(double snr); 0084 void calibrationUpdate(CalibrationUpdateType type, const QString &message = QString(""), double x = 0, double y = 0); 0085 void frameCaptureRequested(); 0086 void guideStats(double raError, double decError, int raPulse, int decPulse, 0087 double snr, double skyBg, int numStars); 0088 void guideEquipmentUpdated(); 0089 void guideInfo(const QString &); 0090 void abortExposure(); 0091 0092 protected: 0093 Ekos::GuideState state { GUIDE_IDLE }; 0094 double ccdPixelSizeX { 0 }; 0095 double ccdPixelSizeY { 0 }; 0096 double mountAperture { 0 }; 0097 double mountFocalLength { 0 }; 0098 uint16_t subX { 0 }; 0099 uint16_t subY { 0 }; 0100 uint16_t subW { 0 }; 0101 uint16_t subH { 0 }; 0102 uint16_t subBinX { 1 }; 0103 uint16_t subBinY { 1 }; 0104 0105 // Recent mount position. 0106 dms mountRA, mountDEC, mountAzimuth, mountAltitude; 0107 ISD::Mount::PierSide pierSide { ISD::Mount::PIER_UNKNOWN }; 0108 }; 0109 0110 enum CaptureAfterPulses {StartCaptureAfterPulses, DontCaptureAfterPulses}; 0111 0112 }