1 /* 2 SPDX-FileCopyrightText: 2016 Jasem Mutlaq <mutlaqja@ikarustech.com> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #pragma once 8 9 #include "ekos/ekos.h" 10 #include "indi/inditelescope.h" 11 #include <QObject> 12 #include <QVector3D> 13 14 #include <cstdint> 15 16 class QString; 17 18 namespace Ekos 19 { 20 /** 21 * @class GuideInterface 22 * @short Interface skeleton for implementation of different guiding applications and/or routines 23 * 24 * @author Jasem Mutlaq 25 * @version 1.0 26 */ 27 class GuideInterface : public QObject 28 { 29 Q_OBJECT 30 31 public: 32 GuideInterface() = default; 33 virtual ~GuideInterface() override = default; 34 35 virtual bool Connect() = 0; 36 virtual bool Disconnect() = 0; 37 virtual bool isConnected() = 0; 38 39 virtual bool calibrate() = 0; 40 virtual bool guide() = 0; 41 virtual bool suspend() = 0; 42 virtual bool resume() = 0; 43 virtual bool abort() = 0; 44 virtual bool dither(double pixels) = 0; 45 virtual bool clearCalibration() = 0; reacquire()46 virtual bool reacquire() 47 { 48 return false; 49 } 50 51 virtual bool setGuiderParams(double ccdPixelSizeX, double ccdPixelSizeY, double mountAperture, 52 double mountFocalLength); 53 virtual bool getGuiderParams(double *ccdPixelSizeX, double *ccdPixelSizeY, double *mountAperture, 54 double *mountFocalLength); 55 56 virtual bool setFrameParams(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t binX, uint16_t binY); 57 virtual bool getFrameParams(uint16_t *x, uint16_t *y, uint16_t *w, uint16_t *h, uint16_t *binX, uint16_t *binY); 58 59 virtual void setStarPosition(QVector3D &starCenter); 60 61 virtual void setMountCoords(const SkyPoint &position, ISD::Telescope::PierSide side); 62 virtual void setPierSide(ISD::Telescope::PierSide newSide); resetGPG()63 virtual void resetGPG() {}; 64 65 enum CalibrationUpdateType 66 { 67 RA_IN, 68 RA_OUT, 69 BACKLASH, 70 DEC_IN, 71 DEC_OUT, 72 CALIBRATION_MESSAGE_ONLY 73 }; 74 75 signals: 76 void newLog(const QString &); 77 void newStatus(Ekos::GuideState); 78 void newAxisDelta(double delta_ra, double delta_dec); 79 void newAxisSigma(double sigma_ra, double sigma_dec); 80 void newAxisPulse(double pulse_ra, double pulse_dec); 81 void newStarPosition(const QVector3D &newCenter, bool updateNow); 82 void newStarPixmap(QPixmap &); 83 void newSNR(double snr); 84 void calibrationUpdate(CalibrationUpdateType type, const QString &message = QString(""), double x = 0, double y = 0); 85 void frameCaptureRequested(); 86 void guideStats(double raError, double decError, int raPulse, int decPulse, 87 double snr, double skyBg, int numStars); 88 void guideEquipmentUpdated(); 89 90 protected: 91 Ekos::GuideState state { GUIDE_IDLE }; 92 double ccdPixelSizeX { 0 }; 93 double ccdPixelSizeY { 0 }; 94 double mountAperture { 0 }; 95 double mountFocalLength { 0 }; 96 uint16_t subX { 0 }; 97 uint16_t subY { 0 }; 98 uint16_t subW { 0 }; 99 uint16_t subH { 0 }; 100 uint16_t subBinX { 1 }; 101 uint16_t subBinY { 1 }; 102 103 // Recent mount position. 104 dms mountRA, mountDEC, mountAzimuth, mountAltitude; 105 ISD::Telescope::PierSide pierSide { ISD::Telescope::PIER_UNKNOWN }; 106 }; 107 } 108