UASInterface.h 7.07 KB
Newer Older
1 2
/****************************************************************************
 *
3
 *   (c) 2009-2018 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
4 5 6 7 8
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
pixhawk's avatar
pixhawk committed
9

Donald Gagne's avatar
Donald Gagne committed
10 11 12
// NO NEW CODE HERE
// UASInterface, UAS.h/cc are deprecated. All new functionality should go into Vehicle.h/cc
//
pixhawk's avatar
pixhawk committed
13

14
#pragma once
pixhawk's avatar
pixhawk committed
15 16 17 18 19

#include <QObject>
#include <QList>
#include <QAction>
#include <QColor>
20
#include <QPointer>
pixhawk's avatar
pixhawk committed
21 22 23 24

#include "LinkInterface.h"
#include "ProtocolInterface.h"

25
#ifndef __mobile__
26
class FileManager;
27
#endif
28

pixhawk's avatar
pixhawk committed
29 30 31 32 33 34
/**
 * @brief Interface for all robots.
 *
 * This interface is abstract and thus cannot be instantiated. It serves only as type definition.
 * It represents an unmanned aerial vehicle, e.g. a micro air vehicle.
 **/
lm's avatar
lm committed
35 36
class UASInterface : public QObject
{
pixhawk's avatar
pixhawk committed
37 38 39 40 41 42
    Q_OBJECT
public:
    virtual ~UASInterface() {}

    /* MANAGEMENT */

43
    virtual int getUASID() const = 0; ///< Get the ID of the connected UAS
pixhawk's avatar
pixhawk committed
44
    /** @brief The time interval the robot is switched on **/
45
    virtual quint64 getUptime() const = 0;
pixhawk's avatar
pixhawk committed
46

47
#ifndef __mobile__
48
    virtual FileManager* getFileManager() = 0;
49
#endif
50

51 52 53 54 55
    enum StartCalibrationType {
        StartCalibrationRadio,
        StartCalibrationGyro,
        StartCalibrationMag,
        StartCalibrationAirspeed,
56
        StartCalibrationAccel,
57
        StartCalibrationLevel,
58
        StartCalibrationPressure,
Don Gagne's avatar
Don Gagne committed
59
        StartCalibrationEsc,
60
        StartCalibrationCopyTrims,
61 62
        StartCalibrationUavcanEsc,
        StartCalibrationCompassMot,
63 64 65
    };

    enum StartBusConfigType {
66 67
        StartBusConfigActuators,
        EndBusConfigActuators,
68
    };
dogmaphobic's avatar
dogmaphobic committed
69

70 71
    /// Starts the specified calibration
    virtual void startCalibration(StartCalibrationType calType) = 0;
dogmaphobic's avatar
dogmaphobic committed
72

73 74
    /// Ends any current calibration
    virtual void stopCalibration(void) = 0;
75

76 77 78 79 80 81
    /// Starts the specified bus configuration
    virtual void startBusConfig(StartBusConfigType calType) = 0;

    /// Ends any current bus configuration
    virtual void stopBusConfig(void) = 0;

pixhawk's avatar
pixhawk committed
82
public slots:
83 84
    /** @brief Order the robot to pair its receiver **/
    virtual void pairRX(int rxType, int rxSubType) = 0;
pixhawk's avatar
pixhawk committed
85

Lorenz Meier's avatar
Lorenz Meier committed
86
    /** @brief Send the full HIL state to the MAV */
dogmaphobic's avatar
dogmaphobic committed
87
#ifndef __mobile__
Lorenz Meier's avatar
Lorenz Meier committed
88 89
    virtual void sendHilState(quint64 time_us, float roll, float pitch, float yaw, float rollspeed,
                        float pitchspeed, float yawspeed, double lat, double lon, double alt,
90
                        float vx, float vy, float vz, float ind_airspeed, float true_airspeed, float xacc, float yacc, float zacc) = 0;
Lorenz Meier's avatar
Lorenz Meier committed
91 92 93

    /** @brief RAW sensors for sensor HIL */
    virtual void sendHilSensors(quint64 time_us, float xacc, float yacc, float zacc, float rollspeed, float pitchspeed, float yawspeed,
94
                                float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, quint32 fields_changed) = 0;
Lorenz Meier's avatar
Lorenz Meier committed
95 96

    /** @brief Send raw GPS for sensor HIL */
97
    virtual void sendHilGps(quint64 time_us, double lat, double lon, double alt, int fix_type, float eph, float epv, float vel, float vn, float ve, float vd, float cog, int satellites) = 0;
Lorenz Meier's avatar
Lorenz Meier committed
98

99 100 101
    /** @brief Send Optical Flow sensor message for HIL, (arguments and units accoding to mavlink documentation*/
    virtual void sendHilOpticalFlow(quint64 time_us, qint16 flow_x, qint16 flow_y, float flow_comp_m_x,
                            float flow_comp_m_y, quint8 quality, float ground_distance) = 0;
dogmaphobic's avatar
dogmaphobic committed
102
#endif
103

104
    /** @brief Send command to map a RC channel to a parameter */
105
    virtual void sendMapRCToParam(QString param_id, float scale, float value0, quint8 param_rc_channel_index, float valueMin, float valueMax) = 0;
106 107 108 109

    /** @brief Send command to disable all bindings/maps between RC and parameters */
    virtual void unsetRCToParameterMap() = 0;

pixhawk's avatar
pixhawk committed
110 111 112 113 114
signals:
    /** @brief The robot is connected **/
    void connected();
    /** @brief The robot is disconnected **/
    void disconnected();
115

pixhawk's avatar
pixhawk committed
116 117 118
    /** @brief A value of the robot has changed.
      *
      * Typically this is used to send lowlevel information like the battery voltage to the plotting facilities of
119
      * the groundstation. The data here should be converted to human-readable values before being passed, so ideally
dogmaphobic's avatar
dogmaphobic committed
120
      * SI units.
pixhawk's avatar
pixhawk committed
121 122 123
      *
      * @param uasId ID of this system
      * @param name name of the value, e.g. "battery voltage"
dogmaphobic's avatar
dogmaphobic committed
124
      * @param unit The units this variable is in as an abbreviation. For system-dependent (such as raw ADC values) use "raw", for bitfields use "bits", for true/false or on/off use "bool", for unitless values use "-".
pixhawk's avatar
pixhawk committed
125 126 127
      * @param value the value that changed
      * @param msec the timestamp of the message, in milliseconds
      */
128
    void valueChanged(const int uasid, const QString& name, const QString& unit, const QVariant &value,const quint64 msecs);
lm's avatar
lm committed
129

130
    void parameterUpdate(int uas, int component, QString parameterName, int parameterCount, int parameterId, int type, QVariant value);
Don Gagne's avatar
Don Gagne committed
131

pixhawk's avatar
pixhawk committed
132 133 134 135 136 137 138 139
    /**
     * @brief The battery status has been updated
     *
     * @param uas sending system
     * @param voltage battery voltage
     * @param percent remaining capacity in percent
     * @param seconds estimated remaining flight time in seconds
     */
dongfang's avatar
dongfang committed
140
    void batteryChanged(UASInterface* uas, double voltage, double current, double percent, int seconds);
pixhawk's avatar
pixhawk committed
141
    void statusChanged(UASInterface* uas, QString status);
142

pixhawk's avatar
pixhawk committed
143 144
    void imageStarted(int imgid, int width, int height, int depth, int channels);
    void imageDataReceived(int imgid, const unsigned char* imageData, int length, int startIndex);
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

    /** @brief Optical flow status changed */
    void opticalFlowStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Vision based localization status changed */
    void visionLocalizationStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Infrared / Ultrasound status changed */
    void distanceSensorStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Gyroscope status changed */
    void gyroStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Accelerometer status changed */
    void accelStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Magnetometer status changed */
    void magSensorStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Barometer status changed */
    void baroStatusChanged(bool supported, bool enabled, bool ok);
    /** @brief Differential pressure / airspeed status changed */
    void airspeedStatusChanged(bool supported, bool enabled, bool ok);

163 164 165
    // ERROR AND STATUS SIGNALS
    /** @brief Name of system changed */
    void nameChanged(QString newName);
166 167
    /** @brief Core specifications have changed */
    void systemSpecsChanged(int uasId);
168

dogmaphobic's avatar
dogmaphobic committed
169 170 171
    // Log Download Signals
    void logEntry   (UASInterface* uas, uint32_t time_utc, uint32_t size, uint16_t id, uint16_t num_logs, uint16_t last_log_num);
    void logData    (UASInterface* uas, uint32_t ofs, uint16_t id, uint8_t count, const uint8_t* data);
172

pixhawk's avatar
pixhawk committed
173 174
};

lm's avatar
lm committed
175
Q_DECLARE_INTERFACE(UASInterface, "org.qgroundcontrol/1.0")
176