MicrohardManager.h 7.77 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
/****************************************************************************
 *
 *   (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 "MicrohardSettings.h"
#include "Fact.h"

#include <QTimer>
#include <QTime>

class AppSettings;
class QGCApplication;

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

    Q_PROPERTY(bool         connected           READ connected                                  NOTIFY connectedChanged)
    Q_PROPERTY(bool         linkConnected       READ linkConnected                              NOTIFY linkConnectedChanged)
    Q_PROPERTY(bool         needReboot          READ needReboot                                 NOTIFY needRebootChanged)
    Q_PROPERTY(QString      linkVidFormat       READ linkVidFormat                              NOTIFY linkChanged)
    Q_PROPERTY(int          uplinkRSSI          READ uplinkRSSI                                 NOTIFY linkChanged)
    Q_PROPERTY(int          downlinkRSSI        READ downlinkRSSI                               NOTIFY linkChanged)
    Q_PROPERTY(QString      serialNumber        READ serialNumber                               NOTIFY infoChanged)
    Q_PROPERTY(QString      fwVersion           READ fwVersion                                  NOTIFY infoChanged)
    Q_PROPERTY(Fact*        radioMode           READ radioMode                                  CONSTANT)
    Q_PROPERTY(Fact*        radioChannel        READ radioChannel                               CONSTANT)
    Q_PROPERTY(Fact*        videoOutput         READ videoOutput                                CONSTANT)
    Q_PROPERTY(Fact*        videoMode           READ videoMode                                  CONSTANT)
    Q_PROPERTY(Fact*        videoRate           READ videoRate                                  CONSTANT)
    Q_PROPERTY(QString      rtspURI             READ rtspURI                                    NOTIFY rtspURIChanged)
    Q_PROPERTY(QString      rtspAccount         READ rtspAccount                                NOTIFY rtspAccountChanged)
    Q_PROPERTY(QString      rtspPassword        READ rtspPassword                               NOTIFY rtspPasswordChanged)
    Q_PROPERTY(QString      localIPAddr         READ localIPAddr                                NOTIFY localIPAddrChanged)
    Q_PROPERTY(QString      remoteIPAddr        READ remoteIPAddr                               NOTIFY remoteIPAddrChanged)
    Q_PROPERTY(QString      netMask             READ netMask                                    NOTIFY netMaskChanged)

    Q_INVOKABLE bool setRTSPSettings            (QString uri, QString account, QString password);
    Q_INVOKABLE bool setIPSettings              (QString localIP, QString remoteIP, QString netMask);

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

    void        setToolbox                      (QGCToolbox* toolbox) override;

    bool        connected                       () { return _isConnected; }
    bool        linkConnected                   () { return _linkConnected; }
    bool        needReboot                      () { return _needReboot; }
    QString     linkVidFormat                   () { return _linkVidFormat; }
    int         uplinkRSSI                      () { return _downlinkRSSI; }
    int         downlinkRSSI                    () { return _uplinkRSSI; }
    QString     serialNumber                    () { return _serialNumber; }
    QString     fwVersion                       () { return _fwVersion; }
    Fact*       radioMode                       () { return _radioMode; }
    Fact*       radioChannel                    () { return _radioChannel; }
    Fact*       videoOutput                     () { return _videoOutput; }
    Fact*       videoMode                       () { return _videoMode; }
    Fact*       videoRate                       () { return _videoRate; }
    QString     rtspURI                         () { return _rtspURI; }
    QString     rtspAccount                     () { return _rtspAccount; }
    QString     rtspPassword                    () { return _rtspPassword; }
    QString     localIPAddr                     () { return _localIPAddr; }
    QString     remoteIPAddr                    () { return _remoteIPAddr; }
    QString     netMask                         () { return _netMask; }

signals:
    void    linkChanged                     ();
    void    linkConnectedChanged            ();
    void    infoChanged                     ();
    void    connectedChanged                ();
    void    decodeIndexChanged              ();
    void    rateIndexChanged                ();
    void    rtspURIChanged                  ();
    void    rtspAccountChanged              ();
    void    rtspPasswordChanged             ();
    void    localIPAddrChanged              ();
    void    remoteIPAddrChanged             ();
    void    netMaskChanged                  ();
    void    needRebootChanged               ();

private slots:
    void    _connected                      ();
    void    _disconnected                   ();
    void    _checkMicrohard                 ();
    void    _updateSettings                 (QByteArray jSonData);
    void    _setEnabled                     ();
    void    _setVideoEnabled                ();
    void    _radioSettingsChanged           (QVariant);
    void    _videoSettingsChanged           (QVariant);

private:
    void    _close                          ();
    void    _reset                          ();
    void    _restoreVideoSettings           (Fact* setting);
    FactMetaData *_createMetadata           (const char *name, QStringList enums);

private:

    enum {
        REQ_LINK_STATUS         = 1,
        REQ_DEV_INFO            = 2,
        REQ_FREQ_SCAN           = 4,
        REQ_VIDEO_SETTINGS      = 8,
        REQ_RADIO_SETTINGS      = 16,
        REQ_RTSP_SETTINGS       = 32,
        REQ_IP_SETTINGS         = 64,
        REQ_ALL                 = 0xFFFFFFF,
    };

    uint32_t                _reqMask        = static_cast<uint32_t>(REQ_ALL);
    bool                    _running        = false;
    bool                    _isConnected    = false;
    AppSettings*            _appSettings    = nullptr;
    MicrohardSettings*      _mhSettings    = nullptr;
    bool            _enableVideo            = true;
    bool            _enabled                = true;
    bool            _linkConnected          = false;
    bool            _needReboot             = false;
    QTimer          _workTimer;
    QString         _linkVidFormat;
    int             _downlinkRSSI           = 0;
    int             _uplinkRSSI             = 0;
    QStringList     _decodeList;
    int             _decodeIndex            = 0;
    QStringList     _rateList;
    int             _rateIndex              = 0;
    QString         _serialNumber;
    QString         _fwVersion;
    Fact*           _radioMode              = nullptr;
    Fact*           _radioChannel           = nullptr;
    Fact*           _videoOutput            = nullptr;
    Fact*           _videoMode              = nullptr;
    Fact*           _videoRate              = nullptr;
    QStringList     _radioModeList;
    QStringList     _videoOutputList;
    QStringList     _videoRateList;
    QString         _rtspURI;
    QString         _rtspAccount;
    QString         _rtspPassword;
    QString         _localIPAddr;
    QString         _remoteIPAddr;
    QString         _netMask;
    QTime           _timeoutTimer;
};