MavlinkLogManager.h 8.16 KB
Newer Older
Gus Grubba's avatar
Gus Grubba committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/


#ifndef MavlinkLogManager_H
#define MavlinkLogManager_H

#include <QObject>

#include "QmlObjectListModel.h"
#include "QGCLoggingCategory.h"
#include "QGCToolbox.h"
19
#include "Vehicle.h"
Gus Grubba's avatar
Gus Grubba committed
20 21 22 23 24 25 26 27 28 29 30

Q_DECLARE_LOGGING_CATEGORY(MavlinkLogManagerLog)

class QNetworkAccessManager;
class MavlinkLogManager;

//-----------------------------------------------------------------------------
class MavlinkLogFiles : public QObject
{
    Q_OBJECT
public:
Gus Grubba's avatar
Gus Grubba committed
31
    MavlinkLogFiles    (MavlinkLogManager* manager, const QString& filePath, bool newFile = false);
Gus Grubba's avatar
Gus Grubba committed
32 33

    Q_PROPERTY(QString      name        READ    name                                CONSTANT)
34
    Q_PROPERTY(quint32      size        READ    size                                NOTIFY sizeChanged)
Gus Grubba's avatar
Gus Grubba committed
35 36 37
    Q_PROPERTY(bool         selected    READ    selected    WRITE setSelected       NOTIFY selectedChanged)
    Q_PROPERTY(bool         uploading   READ    uploading                           NOTIFY uploadingChanged)
    Q_PROPERTY(qreal        progress    READ    progress                            NOTIFY progressChanged)
38
    Q_PROPERTY(bool         writing     READ    writing                             NOTIFY writingChanged)
Gus Grubba's avatar
Gus Grubba committed
39
    Q_PROPERTY(bool         uploaded    READ    uploaded                            NOTIFY uploadedChanged)
Gus Grubba's avatar
Gus Grubba committed
40 41 42 43 44 45

    QString     name                () { return _name; }
    quint32     size                () { return _size; }
    bool        selected            () { return _selected; }
    bool        uploading           () { return _uploading; }
    qreal       progress            () { return _progress; }
46
    bool        writing             () { return _writing; }
Gus Grubba's avatar
Gus Grubba committed
47
    bool        uploaded            () { return _uploaded; }
Gus Grubba's avatar
Gus Grubba committed
48 49 50 51

    void        setSelected         (bool selected);
    void        setUploading        (bool uploading);
    void        setProgress         (qreal progress);
52 53
    void        setWriting          (bool writing);
    void        setSize             (quint32 size);
Gus Grubba's avatar
Gus Grubba committed
54
    void        setUploaded         (bool uploaded);
Gus Grubba's avatar
Gus Grubba committed
55 56

signals:
57
    void        sizeChanged         ();
Gus Grubba's avatar
Gus Grubba committed
58 59 60
    void        selectedChanged     ();
    void        uploadingChanged    ();
    void        progressChanged     ();
61
    void        writingChanged      ();
Gus Grubba's avatar
Gus Grubba committed
62
    void        uploadedChanged     ();
Gus Grubba's avatar
Gus Grubba committed
63 64 65 66 67 68 69 70

private:
    MavlinkLogManager*  _manager;
    QString             _name;
    quint32             _size;
    bool                _selected;
    bool                _uploading;
    qreal               _progress;
71
    bool                _writing;
Gus Grubba's avatar
Gus Grubba committed
72
    bool                _uploaded;
Gus Grubba's avatar
Gus Grubba committed
73 74
};

75 76 77 78 79 80 81 82 83 84 85 86 87 88
//-----------------------------------------------------------------------------
class CurrentRunningLog
{
public:
    CurrentRunningLog()
        : fd(NULL)
        , record(NULL)
        , written(0)
    {
    }
    ~CurrentRunningLog()
    {
        close();
    }
Gus Grubba's avatar
Gus Grubba committed
89
    void close();
90 91 92 93 94 95 96
    FILE*               fd;
    QString             fileName;
    MavlinkLogFiles*    record;
    quint32             written;
};

//-----------------------------------------------------------------------------
Gus Grubba's avatar
Gus Grubba committed
97 98 99 100 101 102 103 104
class MavlinkLogManager : public QGCTool
{
    Q_OBJECT

public:
    MavlinkLogManager    (QGCApplication* app);
    ~MavlinkLogManager   ();

105 106 107 108 109
    Q_PROPERTY(QString              emailAddress        READ    emailAddress        WRITE setEmailAddress       NOTIFY emailAddressChanged)
    Q_PROPERTY(QString              description         READ    description         WRITE setDescription        NOTIFY descriptionChanged)
    Q_PROPERTY(QString              uploadURL           READ    uploadURL           WRITE setUploadURL          NOTIFY uploadURLChanged)
    Q_PROPERTY(bool                 enableAutoUpload    READ    enableAutoUpload    WRITE setEnableAutoUpload   NOTIFY enableAutoUploadChanged)
    Q_PROPERTY(bool                 enableAutoStart     READ    enableAutoStart     WRITE setEnableAutoStart    NOTIFY enableAutoStartChanged)
110 111
    Q_PROPERTY(bool                 deleteAfterUpload   READ    deleteAfterUpload   WRITE setDeleteAfterUpload  NOTIFY deleteAfterUploadChanged)
    Q_PROPERTY(bool                 uploading           READ    uploading                                       NOTIFY uploadingChanged)
112 113 114
    Q_PROPERTY(bool                 logRunning          READ    logRunning                                      NOTIFY logRunningChanged)
    Q_PROPERTY(bool                 canStartLog         READ    canStartLog                                     NOTIFY canStartLogChanged)
    Q_PROPERTY(QmlObjectListModel*  logFiles            READ    logFiles                                        NOTIFY logFilesChanged)
Gus Grubba's avatar
Gus Grubba committed
115 116 117 118

    Q_INVOKABLE void uploadLog      ();
    Q_INVOKABLE void deleteLog      ();
    Q_INVOKABLE void cancelUpload   ();
119 120
    Q_INVOKABLE void startLogging   ();
    Q_INVOKABLE void stopLogging    ();
Gus Grubba's avatar
Gus Grubba committed
121 122 123 124

    QString     emailAddress        () { return _emailAddress; }
    QString     description         () { return _description; }
    QString     uploadURL           () { return _uploadURL; }
125 126
    bool        enableAutoUpload    () { return _enableAutoUpload; }
    bool        enableAutoStart     () { return _enableAutoStart; }
127
    bool        uploading                ();
128 129
    bool        logRunning          () { return _logRunning; }
    bool        canStartLog         () { return _vehicle != NULL; }
130
    bool        deleteAfterUpload   () { return _deleteAfterUpload; }
Gus Grubba's avatar
Gus Grubba committed
131 132 133 134 135 136

    QmlObjectListModel* logFiles    () { return &_logFiles; }

    void        setEmailAddress     (QString email);
    void        setDescription      (QString description);
    void        setUploadURL        (QString url);
137 138
    void        setEnableAutoUpload (bool enable);
    void        setEnableAutoStart  (bool enable);
139
    void        setDeleteAfterUpload(bool enable);
Gus Grubba's avatar
Gus Grubba committed
140 141 142 143 144 145 146 147

    // Override from QGCTool
    void        setToolbox          (QGCToolbox *toolbox);

signals:
    void emailAddressChanged        ();
    void descriptionChanged         ();
    void uploadURLChanged           ();
148 149
    void enableAutoUploadChanged    ();
    void enableAutoStartChanged     ();
Gus Grubba's avatar
Gus Grubba committed
150 151
    void logFilesChanged            ();
    void selectedCountChanged       ();
Gus Grubba's avatar
Gus Grubba committed
152
    void uploadingChanged           ();
Gus Grubba's avatar
Gus Grubba committed
153 154 155 156
    void readyRead                  (QByteArray data);
    void failed                     ();
    void succeed                    ();
    void abortUpload                ();
157 158
    void logRunningChanged          ();
    void canStartLogChanged         ();
159
    void deleteAfterUploadChanged   ();
Gus Grubba's avatar
Gus Grubba committed
160 161 162 163 164

private slots:
    void _uploadFinished            ();
    void _dataAvailable             ();
    void _uploadProgress            (qint64 bytesSent, qint64 bytesTotal);
165 166 167
    void _activeVehicleChanged      (Vehicle* vehicle);
    void _mavlinkLogData            (Vehicle* vehicle, uint8_t target_system, uint8_t target_component, uint16_t sequence, uint8_t length, uint8_t first_message, const uint8_t* data, bool acked);
    void _armedChanged              (bool armed);
Gus Grubba's avatar
Gus Grubba committed
168 169 170 171

private:
    bool _sendLog                   (const QString& logFile);
    bool _processUploadResponse     (int http_code, QByteArray &data);
Gus Grubba's avatar
Gus Grubba committed
172 173
    bool _createNewLog              ();
    int  _getFirstSelected          ();
174 175
    void _insertNewLog              (MavlinkLogFiles* newLog);
    void _deleteLog                 (MavlinkLogFiles* log);
Gus Grubba's avatar
Gus Grubba committed
176
    QString _makeFilename           (const QString& baseName);
Gus Grubba's avatar
Gus Grubba committed
177 178 179 180 181 182

private:
    QString                 _description;
    QString                 _emailAddress;
    QString                 _uploadURL;
    QString                 _logPath;
183 184
    bool                    _enableAutoUpload;
    bool                    _enableAutoStart;
Gus Grubba's avatar
Gus Grubba committed
185 186 187
    QNetworkAccessManager*  _nam;
    QmlObjectListModel      _logFiles;
    MavlinkLogFiles*        _currentLogfile;
188 189
    Vehicle*                _vehicle;
    bool                    _logRunning;
Gus Grubba's avatar
Gus Grubba committed
190
    bool                    _loggingDisabled;
191
    CurrentRunningLog*      _currentSavingFile;
Gus Grubba's avatar
Gus Grubba committed
192
    uint16_t                _sequence;
193
    bool                    _deleteAfterUpload;
Gus Grubba's avatar
Gus Grubba committed
194 195 196
};

#endif