File indexing completed on 2024-04-28 15:09:12

0001 /*
0002     SPDX-FileCopyrightText: 2022 Toni Schriber
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 
0007 #pragma once
0008 
0009 #include "indi/indimount.h"
0010 
0011 class RotatorUtils : public QObject
0012 {
0013         Q_OBJECT
0014 
0015     public:
0016         static RotatorUtils *Instance();
0017         static void release();
0018 
0019         void   initRotatorUtils(const QString &train);
0020         void   setImageFlip(bool state);
0021         bool   checkImageFlip();
0022         double calcRotatorAngle(double PositionAngle);
0023         double calcCameraAngle(double RotatorAngle, bool flippedImage);
0024         double calcOffsetAngle(double RotatorAngle, double PositionAngle);
0025         void   updateOffset(double Angle);
0026         void   setImagePierside(ISD::Mount::PierSide ImgPierside);
0027         ISD::Mount::PierSide getMountPierside();
0028         double DiffPA(double diff);
0029         void   initTimeFrame(const double EndAngle);
0030         int    calcTimeFrame(const double CurrentAngle);
0031         void   startTimeFrame(const double StartAngle);
0032 
0033     private:
0034         RotatorUtils();
0035         ~RotatorUtils();
0036         static RotatorUtils *m_Instance;
0037 
0038         ISD::Mount::PierSide m_CalPierside {ISD::Mount::PIER_WEST};
0039         ISD::Mount::PierSide m_ImgPierside {ISD::Mount::PIER_UNKNOWN};
0040         double m_Offset {0};
0041         bool   m_flippedMount {false};
0042         ISD::Mount *m_Mount {nullptr};
0043         double m_StartAngle, m_EndAngle {0};
0044         double m_ShiftAngle, m_DiffAngle {0};
0045         QTime  m_StartTime, m_CurrentTime;
0046         int    m_DeltaTime = 0;
0047         double m_DeltaAngle = 0;
0048         int    m_TimeFrame = 0;
0049         bool   m_initParameter, m_CCW = true;
0050 
0051     signals:
0052         void   changedPierside(ISD::Mount::PierSide index);
0053 };