QGCUASParamManager.h 2.96 KB
Newer Older
1 2 3 4 5 6
#ifndef QGCUASPARAMMANAGER_H
#define QGCUASPARAMMANAGER_H

#include <QWidget>
#include <QMap>
#include <QTimer>
7
#include <QVariant>
8 9

class UASInterface;
10
class UASParameterDataModel;
11 12 13 14 15 16 17

class QGCUASParamManager : public QWidget
{
    Q_OBJECT
public:
    QGCUASParamManager(UASInterface* uas, QWidget *parent = 0);

tstellanova's avatar
tstellanova committed
18
    virtual bool getParameterValue(int component, const QString& parameter, QVariant& value) const;
19 20 21 22

    /** @brief Request an update for the parameter list */
    void requestParameterListUpdate(int component = 0);
    /** @brief Request an update for this specific parameter */
23
    virtual void requestParameterUpdate(int component, const QString& parameter) = 0;
24

25 26 27
    /** @brief Provide tooltips / user-visible descriptions for parameters */
    virtual void setParamDescriptions(const QMap<QString,QString>& paramDescs);

tstellanova's avatar
tstellanova committed
28 29 30 31 32 33 34
protected:
    /** @brief Activate / deactivate parameter retransmission */
    virtual void setRetransmissionGuardEnabled(bool enabled);

    //TODO decouple this UI message display further
    virtual void setParameterStatusMsg(const QString& msg);

35
signals:
36 37
    void parameterChanged(int component, QString parameter, QVariant value);
    void parameterChanged(int component, int parameterIndex, QVariant value);
38
    void parameterListUpToDate(int component);
tstellanova's avatar
tstellanova committed
39 40 41 42
    /** @brief Request a single parameter */
    void requestParameter(int component, int parameter);
    /** @brief Request a single parameter by name */
    void requestParameter(int component, const QString& parameter);
43 44

public slots:
45
    /** @brief Write one parameter to the MAV */
46
    virtual void setParameter(int component, QString parameterName, QVariant value) = 0;
47
    /** @brief Request list of parameters from MAV */
tstellanova's avatar
tstellanova committed
48
    virtual void requestParameterList();
49 50
    /** @brief Check for missing parameters */
    virtual void retransmissionGuardTick();
51 52

protected:
53

tstellanova's avatar
tstellanova committed
54
    // Parameter data model
55
    UASInterface* mav;   ///< The MAV this widget is controlling
56 57 58
    UASParameterDataModel* paramDataModel;///< Shared data model of parameters

    // Communications management
tstellanova's avatar
tstellanova committed
59
    QVector<bool> receivedParamsList; ///< Successfully received parameters
60
    QMap<int, QList<int>* > transmissionMissingPackets; ///< Missing packets
61
    QMap<int, QMap<QString, QVariant>* > transmissionMissingWriteAckPackets; ///< Missing write ACK packets
62 63 64 65 66 67 68 69
    bool transmissionListMode;       ///< Currently requesting list
    QMap<int, bool> transmissionListSizeKnown;  ///< List size initialized?
    bool transmissionActive;         ///< Missing packets, working on list?
    quint64 transmissionTimeout;     ///< Timeout
    QTimer retransmissionTimer;      ///< Timer handling parameter retransmission
    int retransmissionTimeout; ///< Retransmission request timeout, in milliseconds
    int rewriteTimeout; ///< Write request timeout, in milliseconds
    int retransmissionBurstRequestSize; ///< Number of packets requested for retransmission per burst
70 71

    // Status
tstellanova's avatar
tstellanova committed
72
    QString parameterStatusMsg;
73 74 75 76

};

#endif // QGCUASPARAMMANAGER_H