File indexing completed on 2024-05-12 15:23:36

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 "../guideinterface.h"
0010 
0011 #include <QAbstractSocket>
0012 #include <QTimer>
0013 
0014 class QTcpSocket;
0015 
0016 namespace Ekos
0017 {
0018 /**
0019  * @class  LinGuider
0020  * Uses external LinGuider for guiding.
0021  *
0022  * @author Jasem Mutlaq
0023  * @version 1.0
0024  */
0025 class LinGuider : public GuideInterface
0026 {
0027     Q_OBJECT
0028 
0029   public:
0030     typedef enum {
0031         GET_VER = 1,
0032         SET_GUIDER_SQUARE_POS,
0033         SAVE_FRAME,
0034         DITHER,
0035         DITHER_NO_WAIT_XY,
0036         GET_DISTANCE,
0037         SAVE_FRAME_DECORATED,
0038         GUIDER,
0039         GET_GUIDER_STATE,
0040         SET_GUIDER_OVLS_POS,
0041         SET_GUIDER_RETICLE_POS,
0042         FIND_STAR,
0043         SET_DITHERING_RANGE,
0044         GET_RA_DEC_DRIFT
0045     } LinGuiderCommand;
0046     typedef enum { IDLE, GUIDING } LinGuiderState;
0047     typedef enum { DISCONNECTED, CONNECTING, CONNECTED } LinGuiderConnection;
0048 
0049     LinGuider();
0050     virtual ~LinGuider() override = default;
0051 
0052     bool Connect() override;
0053     bool Disconnect() override;
0054     bool isConnected() override { return (connection == CONNECTED); }
0055 
0056     bool calibrate() override;
0057     bool guide() override;
0058     bool abort() override;
0059     bool suspend() override;
0060     bool resume() override;
0061     bool dither(double pixels) override;
0062     bool clearCalibration() override { return true;}
0063 
0064   private slots:
0065 
0066     void readLinGuider();
0067     void onConnected();
0068     void displayError(QAbstractSocket::SocketError socketError);
0069 
0070   private:
0071     void sendCommand(LinGuiderCommand command, const QString &args = QString());
0072     void processResponse(LinGuiderCommand command, const QString &reply);
0073 
0074     QTcpSocket *tcpSocket { nullptr };
0075     QByteArray rawBuffer;
0076 
0077     LinGuiderState state { IDLE };
0078     LinGuiderConnection connection { DISCONNECTED };
0079 
0080     QTimer deviationTimer;
0081     QString starCenter;
0082 };
0083 }