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 }