AirMapTelemetry.h 1.57 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/****************************************************************************
 *
 *   (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

Gus Grubba's avatar
Gus Grubba committed
12
#include "LifetimeChecker.h"
Gus Grubba's avatar
Gus Grubba committed
13
#include "AirMapSharedState.h"
Gus Grubba's avatar
Gus Grubba committed
14

Gus Grubba's avatar
Gus Grubba committed
15
#include <QGCMAVLink.h>
Gus Grubba's avatar
Gus Grubba committed
16

Gus Grubba's avatar
Gus Grubba committed
17
#include <QObject>
18

19
/// Class to send telemetry data to AirMap
20 21 22 23
class AirMapTelemetry : public QObject, public LifetimeChecker
{
    Q_OBJECT
public:
24 25
    AirMapTelemetry                 (AirMapSharedState& shared);
    virtual ~AirMapTelemetry        () = default;
26

27 28 29
    void startTelemetryStream       (const QString& flightID);
    void stopTelemetryStream        ();
    bool isTelemetryStreaming       ();
30 31

signals:
32
    void error                      (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);
33 34

public slots:
35
    void vehicleMessageReceived     (const mavlink_message_t& message);
36 37 38

private:

39 40
    void _handleGlobalPositionInt   (const mavlink_message_t& message);
    void _handleGPSRawInt           (const mavlink_message_t& message);
41 42 43 44 45 46 47 48 49 50

    enum class State {
        Idle,
        StartCommunication,
        EndCommunication,
        Streaming,
    };

    State                   _state = State::Idle;
    AirMapSharedState&      _shared;
51
    std::string             _key; ///< key for AES encryption (16 bytes)
52 53 54 55
    QString                 _flightID;
    float                   _lastHdop = 1.f;
};