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 "../guideinterface.h"
10 
11 #include <QAbstractSocket>
12 #include <QTimer>
13 
14 class QTcpSocket;
15 
16 namespace Ekos
17 {
18 /**
19  * @class  LinGuider
20  * Uses external LinGuider for guiding.
21  *
22  * @author Jasem Mutlaq
23  * @version 1.0
24  */
25 class LinGuider : public GuideInterface
26 {
27     Q_OBJECT
28 
29   public:
30     typedef enum {
31         GET_VER = 1,
32         SET_GUIDER_SQUARE_POS,
33         SAVE_FRAME,
34         DITHER,
35         DITHER_NO_WAIT_XY,
36         GET_DISTANCE,
37         SAVE_FRAME_DECORATED,
38         GUIDER,
39         GET_GUIDER_STATE,
40         SET_GUIDER_OVLS_POS,
41         SET_GUIDER_RETICLE_POS,
42         FIND_STAR,
43         SET_DITHERING_RANGE,
44         GET_RA_DEC_DRIFT
45     } LinGuiderCommand;
46     typedef enum { IDLE, GUIDING } LinGuiderState;
47     typedef enum { DISCONNECTED, CONNECTING, CONNECTED } LinGuiderConnection;
48 
49     LinGuider();
50     virtual ~LinGuider() override = default;
51 
52     bool Connect() override;
53     bool Disconnect() override;
isConnected()54     bool isConnected() override { return (connection == CONNECTED); }
55 
56     bool calibrate() override;
57     bool guide() override;
58     bool abort() override;
59     bool suspend() override;
60     bool resume() override;
61     bool dither(double pixels) override;
clearCalibration()62     bool clearCalibration() override { return true;}
63 
64   private slots:
65 
66     void readLinGuider();
67     void onConnected();
68     void displayError(QAbstractSocket::SocketError socketError);
69 
70   private:
71     void sendCommand(LinGuiderCommand command, const QString &args = QString());
72     void processResponse(LinGuiderCommand command, const QString &reply);
73 
74     QTcpSocket *tcpSocket { nullptr };
75     QByteArray rawBuffer;
76 
77     LinGuiderState state { IDLE };
78     LinGuiderConnection connection { DISCONNECTED };
79 
80     QTimer deviationTimer;
81     QString starCenter;
82 };
83 }
84