TaisyncManager.h 6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

#pragma once

#include "QGCToolbox.h"
#include "QGCLoggingCategory.h"
#include "TaisyncSettings.h"
15
#include "Fact.h"
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#if defined(__ios__) || defined(__android__)
#include "TaisyncTelemetry.h"
#include "TaisyncVideoReceiver.h"
#endif

#include <QTimer>

class AppSettings;
class QGCApplication;

//-----------------------------------------------------------------------------
class TaisyncManager : public QGCTool
{
    Q_OBJECT
public:

32
    Q_PROPERTY(bool         connected           READ connected                                  NOTIFY connectedChanged)
Gus Grubba's avatar
Gus Grubba committed
33
    Q_PROPERTY(bool         linkConnected       READ linkConnected                              NOTIFY linkConnectedChanged)
34 35 36
    Q_PROPERTY(QString      linkVidFormat       READ linkVidFormat                              NOTIFY linkChanged)
    Q_PROPERTY(int          uplinkRSSI          READ uplinkRSSI                                 NOTIFY linkChanged)
    Q_PROPERTY(int          downlinkRSSI        READ downlinkRSSI                               NOTIFY linkChanged)
Gus Grubba's avatar
Gus Grubba committed
37 38
    Q_PROPERTY(QString      serialNumber        READ serialNumber                               NOTIFY infoChanged)
    Q_PROPERTY(QString      fwVersion           READ fwVersion                                  NOTIFY infoChanged)
39 40 41 42
    Q_PROPERTY(QStringList  decodeList          READ decodeList                                 NOTIFY decodeIndexChanged)
    Q_PROPERTY(int          decodeIndex         READ decodeIndex        WRITE setDecodeIndex    NOTIFY decodeIndexChanged)
    Q_PROPERTY(QStringList  rateList            READ rateList                                   NOTIFY rateIndexChanged)
    Q_PROPERTY(int          rateIndex           READ rateIndex          WRITE setRateIndex      NOTIFY rateIndexChanged)
43 44
    Q_PROPERTY(Fact*        radioMode           READ radioMode                                  CONSTANT)
    Q_PROPERTY(Fact*        radioChannel        READ radioChannel                               CONSTANT)
45 46 47 48

    explicit TaisyncManager                 (QGCApplication* app, QGCToolbox* toolbox);
    ~TaisyncManager                         () override;

49
    void        setToolbox                      (QGCToolbox* toolbox) override;
50

51 52 53 54 55 56 57 58 59 60 61 62 63
    bool        connected                       () { return _isConnected; }
    bool        linkConnected                   () { return _linkConnected; }
    QString     linkVidFormat                   () { return _linkVidFormat; }
    int         uplinkRSSI                      () { return _downlinkRSSI; }
    int         downlinkRSSI                    () { return _uplinkRSSI; }
    QString     serialNumber                    () { return _serialNumber; }
    QString     fwVersion                       () { return _fwVersion; }
    QStringList decodeList                      () { return _decodeList; }
    int         decodeIndex                     () { return _decodeIndex; }
    void        setDecodeIndex                  (int idx);
    QStringList rateList                        () { return _rateList; }
    int         rateIndex                       () { return _rateIndex; }
    void        setRateIndex                    (int idx);
64 65
    Fact*       radioMode                       () { return _radioMode; }
    Fact*       radioChannel                    () { return _radioChannel; }
66 67 68

signals:
    void    linkChanged                     ();
Gus Grubba's avatar
Gus Grubba committed
69 70
    void    linkConnectedChanged            ();
    void    infoChanged                     ();
71
    void    connectedChanged                ();
72 73
    void    decodeIndexChanged              ();
    void    rateIndexChanged                ();
74 75 76

private slots:
    void    _connected                      ();
Gus Grubba's avatar
Gus Grubba committed
77
    void    _disconnected                   ();
78 79 80 81
    void    _checkTaisync                   ();
    void    _updateSettings                 (QByteArray jSonData);
    void    _setEnabled                     ();
    void    _setVideoEnabled                ();
82
    void    _radioSettingsChanged           (QVariant);
Gus Grubba's avatar
Gus Grubba committed
83 84 85 86
#if defined(__ios__) || defined(__android__)
    void    _readUDPBytes                   ();
    void    _readTelemBytes                 (QByteArray bytesIn);
#endif
87

Gus Grubba's avatar
Gus Grubba committed
88 89 90 91
private:
    void    _close                          ();
    void    _reset                          ();

92 93 94 95 96 97
private:

    enum {
        REQ_LINK_STATUS,
        REQ_DEV_INFO,
        REQ_FREQ_SCAN,
98
        REQ_VIDEO_SETTINGS,
Gus Grubba's avatar
Gus Grubba committed
99
        REQ_RADIO_SETTINGS,
100 101 102 103 104 105 106 107 108 109 110 111
        REQ_LAST
    };

    int                     _currReq        = REQ_LAST;
    bool                    _running        = false;
    bool                    _isConnected    = false;
    AppSettings*            _appSettings    = nullptr;
    TaisyncManager*         _taiManager     = nullptr;
    TaisyncSettings*        _taiSettings    = nullptr;
#if defined(__ios__) || defined(__android__)
    TaisyncTelemetry*       _taiTelemetery  = nullptr;
    TaisyncVideoReceiver*   _taiVideo       = nullptr;
Gus Grubba's avatar
Gus Grubba committed
112
    QUdpSocket*             _telemetrySocket= nullptr;
113
#endif
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
    bool            _enableVideo            = true;
    bool            _enabled                = true;
    bool            _linkConnected          = false;
    QTimer          _workTimer;
    QString         _linkVidFormat;
    int             _downlinkRSSI           = 0;
    int             _uplinkRSSI             = 0;
    QStringList     _decodeList;
    int             _decodeIndex            = 0;
    QStringList     _rateList;
    int             _rateIndex              = 0;
    bool            _savedVideoState        = true;
    QVariant        _savedVideoSource;
    QVariant        _savedVideoUDP;
    QVariant        _savedAR;
    QString         _serialNumber;
    QString         _fwVersion;
    Fact*           _radioMode              = nullptr;
    Fact*           _radioChannel           = nullptr;
133
};