UASInterface.h 21.8 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2
/*=====================================================================

3
QGroundControl Open Source Ground Control Station
pixhawk's avatar
pixhawk committed
4

5
(c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
pixhawk's avatar
pixhawk committed
6

7
This file is part of the QGROUNDCONTROL project
pixhawk's avatar
pixhawk committed
8

9
    QGROUNDCONTROL is free software: you can redistribute it and/or modify
pixhawk's avatar
pixhawk committed
10 11 12 13
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

14
    QGROUNDCONTROL is distributed in the hope that it will be useful,
pixhawk's avatar
pixhawk committed
15 16 17 18 19
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
20
    along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
pixhawk's avatar
pixhawk committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

======================================================================*/

/**
 * @file
 *   @brief Abstract interface, represents one unmanned aerial vehicle
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *
 */

#ifndef _UASINTERFACE_H_
#define _UASINTERFACE_H_

#include <QObject>
#include <QList>
#include <QAction>
#include <QColor>
39
#include <QPointer>
pixhawk's avatar
pixhawk committed
40 41 42

#include "LinkInterface.h"
#include "ProtocolInterface.h"
43
#include "UASWaypointManager.h"
44
#include "QGCUASParamManager.h"
45
#include "RadioCalibration/RadioCalibrationData.h"
pixhawk's avatar
pixhawk committed
46

47 48 49 50 51
#ifdef QGC_PROTOBUF_ENABLED
#include <tr1/memory>
#include <pixhawk.pb.h>
#endif

pixhawk's avatar
pixhawk committed
52 53 54 55 56 57
/**
 * @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
58 59
class UASInterface : public QObject
{
pixhawk's avatar
pixhawk committed
60 61 62 63 64 65 66
    Q_OBJECT
public:
    virtual ~UASInterface() {}

    /* MANAGEMENT */

    /** @brief The name of the robot **/
67
    virtual QString getUASName() const = 0;
68 69 70 71
    /** @brief Get short state */
    virtual const QString& getShortState() const = 0;
    /** @brief Get short mode */
    virtual const QString& getShortMode() const = 0;
72 73
    /** @brief Translate mode id into text */
    static QString getShortModeTextFor(int id);
pixhawk's avatar
pixhawk committed
74
    //virtual QColor getColor() = 0;
75
    virtual int getUASID() const = 0; ///< Get the ID of the connected UAS
pixhawk's avatar
pixhawk committed
76
    /** @brief The time interval the robot is switched on **/
77
    virtual quint64 getUptime() const = 0;
pixhawk's avatar
pixhawk committed
78
    /** @brief Get the status flag for the communication **/
79
    virtual int getCommunicationStatus() const = 0;
pixhawk's avatar
pixhawk committed
80

lm's avatar
lm committed
81 82 83
    virtual double getLocalX() const = 0;
    virtual double getLocalY() const = 0;
    virtual double getLocalZ() const = 0;
84
    virtual bool localPositionKnown() const = 0;
lm's avatar
lm committed
85

86 87 88
    virtual double getLatitude() const = 0;
    virtual double getLongitude() const = 0;
    virtual double getAltitude() const = 0;
89
    virtual bool globalPositionKnown() const = 0;
90

lm's avatar
lm committed
91 92 93 94
    virtual double getRoll() const = 0;
    virtual double getPitch() const = 0;
    virtual double getYaw() const = 0;

95 96
    virtual bool getSelected() const = 0;

97 98
#ifdef QGC_PROTOBUF_ENABLED
    virtual px::PointCloudXYZRGB getPointCloud() const = 0;
99
    virtual px::RGBDImage getRGBDImage() const = 0;
100 101
#endif

102 103
    virtual bool isArmed() const = 0;

104 105 106
    /** @brief Set the airframe of this MAV */
    virtual int getAirframe() const = 0;

107
    /** @brief Get reference to the waypoint manager **/
108
    virtual UASWaypointManager* getWaypointManager(void) = 0;
109 110 111 112 113
    /** @brief Get reference to the param manager **/
    virtual QGCUASParamManager* getParamManager() const = 0;
    // TODO Will be removed
    /** @brief Set reference to the param manager **/
    virtual void setParamManager(QGCUASParamManager* manager) = 0;
114

pixhawk's avatar
pixhawk committed
115 116 117 118 119 120 121 122 123 124 125
    /* COMMUNICATION FLAGS */

    enum CommStatus {
        /** Unit is disconnected, no failure state reached so far **/
        COMM_DISCONNECTED = 0,
        /** The communication is established **/
        COMM_CONNECTING = 1,
        /** The communication link is up **/
        COMM_CONNECTED = 2,
        /** The connection is closed **/
        COMM_DISCONNECTING = 3,
126 127
        COMM_FAIL = 4,
        COMM_TIMEDOUT = 5///< Communication link failed
pixhawk's avatar
pixhawk committed
128 129
    };

130 131
    enum Airframe {
        QGC_AIRFRAME_GENERIC = 0,
132 133 134 135 136 137 138 139
        QGC_AIRFRAME_EASYSTAR,
        QGC_AIRFRAME_TWINSTAR,
        QGC_AIRFRAME_MERLIN,
        QGC_AIRFRAME_CHEETAH,
        QGC_AIRFRAME_MIKROKOPTER,
        QGC_AIRFRAME_REAPER,
        QGC_AIRFRAME_PREDATOR,
        QGC_AIRFRAME_COAXIAL,
lm's avatar
lm committed
140 141 142
        QGC_AIRFRAME_PTERYX,
        QGC_AIRFRAME_TRICOPTER,
        QGC_AIRFRAME_HEXCOPTER
143
    };
pixhawk's avatar
pixhawk committed
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161

    /**
         * @brief Get the links associated with this robot
         *
         * @return List with all links this robot is associated with. Association is usually
         *         based on the fact that a message for this robot has been received through that
         *         interface. The LinkInterface can support multiple protocols.
         **/
    virtual QList<LinkInterface*>* getLinks() = 0;

    /**
     * @brief Get the color for this UAS
     *
     * This static function holds a color map that allows to draw a new color for each robot
     *
     * @return The next color in the color map. The map holds 20 colors and starts from the beginning
     *         if the colors are exceeded.
     */
162
    static QColor getNextColor() {
pixhawk's avatar
pixhawk committed
163 164 165 166
        /* Create color map */
        static QList<QColor> colors = QList<QColor>();
        static int nextColor = -1;

167
        if (nextColor == -1) {
pixhawk's avatar
pixhawk committed
168 169
            ///> Color map for plots, includes 20 colors
            ///> Map will start from beginning when the first 20 colors are exceeded
pixhawk's avatar
pixhawk committed
170

pixhawk's avatar
pixhawk committed
171
            colors.append(QColor(231,72,28));
172
            colors.append(QColor(104,64,240));
173
            colors.append(QColor(203,254,121));
pixhawk's avatar
pixhawk committed
174 175 176 177 178 179 180 181 182 183 184 185 186 187
            colors.append(QColor(161,252,116));
            colors.append(QColor(232,33,47));
            colors.append(QColor(116,251,110));
            colors.append(QColor(234,38,107));
            colors.append(QColor(104,250,138));
            colors.append(QColor(235,43,165));
            colors.append(QColor(98,248,176));
            colors.append(QColor(236,48,221));
            colors.append(QColor(92,247,217));
            colors.append(QColor(200,54,238));
            colors.append(QColor(87,231,246));
            colors.append(QColor(151,59,239));
            colors.append(QColor(81,183,244));
            colors.append(QColor(75,133,243));
pixhawk's avatar
pixhawk committed
188 189
            colors.append(QColor(242,255,128));
            colors.append(QColor(230,126,23));
190
            nextColor = 0;
pixhawk's avatar
pixhawk committed
191 192 193 194
        }
        return colors[nextColor++];
    }

195 196
    /** @brief Get the type of the system (airplane, quadrotor, helicopter,..)*/
    virtual int getSystemType() = 0;
lm's avatar
lm committed
197
    virtual QString getSystemTypeName() = 0;
LM's avatar
LM committed
198 199
    /** @brief Get the type of the autopilot (PIXHAWK, APM, UDB, PPZ,..) */
    virtual int getAutopilotType() = 0;
lm's avatar
lm committed
200
    virtual QString getAutopilotTypeName() = 0;
LM's avatar
LM committed
201
    virtual void setAutopilotType(int apType) = 0;
202

LM's avatar
LM committed
203 204 205 206
    virtual QMap<int, QString> getComponents() = 0;

    QColor getColor()
    {
pixhawk's avatar
pixhawk committed
207 208 209 210 211
        return color;
    }

public slots:

212 213
    /** @brief Set a new name for the system */
    virtual void setUASName(const QString& name) = 0;
lm's avatar
lm committed
214 215
    /** @brief Execute command immediately **/
    virtual void executeCommand(MAV_CMD command) = 0;
216 217
    /** @brief Executes a command **/
    virtual void executeCommand(MAV_CMD command, int confirmation, float param1, float param2, float param3, float param4, int component) = 0;
218

219 220 221
    /** @brief Selects the airframe */
    virtual void setAirframe(int airframe) = 0;

pixhawk's avatar
pixhawk committed
222 223 224
    /** @brief Launches the system/Liftof **/
    virtual void launch() = 0;
    /** @brief Set a new waypoint **/
pixhawk's avatar
pixhawk committed
225
    //virtual void setWaypoint(Waypoint* wp) = 0;
pixhawk's avatar
pixhawk committed
226
    /** @brief Set this waypoint as next waypoint to fly to */
pixhawk's avatar
pixhawk committed
227
    //virtual void setWaypointActive(int wp) = 0;
pixhawk's avatar
pixhawk committed
228 229 230 231 232 233
    /** @brief Order the robot to return home / to land on the runway **/
    virtual void home() = 0;
    /** @brief Halt the system */
    virtual void halt() = 0;
    /** @brief Start/continue the current robot action */
    virtual void go() = 0;
pixhawk's avatar
pixhawk committed
234
    /** @brief Set the current mode of operation */
pixhawk's avatar
pixhawk committed
235
    virtual void setMode(int mode) = 0;
pixhawk's avatar
pixhawk committed
236 237 238 239 240 241 242 243 244 245
    /** Stops the robot system. If it is an MAV, the robot starts the emergency landing procedure **/
    virtual void emergencySTOP() = 0;
    /** Kills the robot. All systems are immediately shut down (e.g. the main power line is cut). This might lead to a crash **/
    virtual bool emergencyKILL() = 0;
    /**
     * @brief Shut down the system's computers
     *
     * Works only if already landed and will cleanly shut down all onboard computers.
     */
    virtual void shutdown() = 0;
246 247 248 249 250 251 252
    /** @brief Set the target position for the robot to navigate to.
     *  @param x x-coordinate of the target position
     *  @param y y-coordinate of the target position
     *  @param z z-coordinate of the target position
     *  @param yaw heading of the target position
     */
    virtual void setTargetPosition(float x, float y, float z, float yaw) = 0;
253
    /** @brief Request the list of stored waypoints from the robot */
pixhawk's avatar
pixhawk committed
254
    //virtual void requestWaypoints() = 0;
255
    /** @brief Clear all existing waypoints on the robot */
pixhawk's avatar
pixhawk committed
256
    //virtual void clearWaypointList() = 0;
257 258
    /** @brief Set world frame origin at current GPS position */
    virtual void setLocalOriginAtCurrentGPSPosition() = 0;
259 260
    /** @brief Set world frame origin / home position at this GPS position */
    virtual void setHomePosition(double lat, double lon, double alt) = 0;
261 262
    /** @brief Request all onboard parameters of all components */
    virtual void requestParameters() = 0;
263
    /** @brief Request one specific onboard parameter */
264
    virtual void requestParameter(int component, const QString& parameter) = 0;
265
    /** @brief Write parameter to permanent storage */
266 267 268
    virtual void writeParametersToStorage() = 0;
    /** @brief Read parameter from permanent storage */
    virtual void readParametersFromStorage() = 0;
269 270 271 272 273 274
    /** @brief Set a system parameter
     * @param component ID of the system component to write the parameter to
     * @param id String identifying the parameter
     * @warning The length of the ID string is limited by the MAVLink format! Take care to not exceed it
     * @param value Value of the parameter, IEEE 754 single precision floating point
     */
275
    virtual void setParameter(const int component, const QString& id, const QVariant& value) = 0;
pixhawk's avatar
pixhawk committed
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291

    /**
     * @brief Add a link to the list of current links
     *
     * Adding the link to the robot's internal link list will allow him so send its own messages
     * over all registered links. Usually a link is added once a message for this particular robot
     * has been received over a link, but adding could also be done manually.
     * @warning Not all links should be added to all robots by default, because else all robots will
     *          attempt to send over all links, typically choking wireless serial links.
     */
    virtual void addLink(LinkInterface* link) = 0;

    /**
     * @brief Set the current robot as focused in the user interface
     */
    virtual void setSelected() = 0;
lm's avatar
lm committed
292

293 294 295 296 297
    virtual void enableAllDataTransmission(int rate) = 0;
    virtual void enableRawSensorDataTransmission(int rate) = 0;
    virtual void enableExtendedSystemStatusTransmission(int rate) = 0;
    virtual void enableRCChannelDataTransmission(int rate) = 0;
    virtual void enableRawControllerDataTransmission(int rate) = 0;
lm's avatar
lm committed
298
    //virtual void enableRawSensorFusionTransmission(int rate) = 0;
299 300 301 302
    virtual void enablePositionTransmission(int rate) = 0;
    virtual void enableExtra1Transmission(int rate) = 0;
    virtual void enableExtra2Transmission(int rate) = 0;
    virtual void enableExtra3Transmission(int rate) = 0;
pixhawk's avatar
pixhawk committed
303

pixhawk's avatar
pixhawk committed
304
    virtual void setLocalPositionSetpoint(float x, float y, float z, float yaw) = 0;
pixhawk's avatar
pixhawk committed
305 306 307 308 309 310
    virtual void setLocalPositionOffset(float x, float y, float z, float yaw) = 0;

    virtual void startRadioControlCalibration() = 0;
    virtual void startMagnetometerCalibration() = 0;
    virtual void startGyroscopeCalibration() = 0;
    virtual void startPressureCalibration() = 0;
pixhawk's avatar
pixhawk committed
311

312 313 314 315
    /** @brief Set the current battery type and voltages */
    virtual void setBatterySpecs(const QString& specs) = 0;
    /** @brief Get the current battery type and specs */
    virtual QString getBatterySpecs() = 0;
316

pixhawk's avatar
pixhawk committed
317 318 319 320
protected:
    QColor color;

signals:
LM's avatar
LM committed
321
    /** @brief The robot state has changed */
pixhawk's avatar
pixhawk committed
322
    void statusChanged(int stateFlag);
LM's avatar
LM committed
323 324
    /** @brief A new component was detected or created */
    void componentCreated(int uas, int component, const QString& name);
pixhawk's avatar
pixhawk committed
325 326 327 328 329 330 331
    /** @brief The robot state has changed
     *
     * @param uas this robot
     * @param status short description of status, e.g. "connected"
     * @param description longer textual description. Should be however limited to a short text, e.g. 200 chars.
     */
    void statusChanged(UASInterface* uas, QString status, QString description);
332 333 334
    /** @brief System has been removed / disconnected / shutdown cleanly, remove */
    void systemRemoved(UASInterface* uas);
    void systemRemoved();
335 336 337 338 339 340
    /**
     * @brief Received a plain text message from the robot
     * This signal should NOT be used for standard communication, but rather for VERY IMPORTANT
     * messages like critical errors.
     *
     * @param uasid ID of the sending system
341
     * @param compid ID of the sending component
342 343 344
     * @param text the status text
     * @param severity The severity of the message, 0 for plain debug messages, 10 for very critical messages
     */
345 346 347 348

    void poiFound(UASInterface* uas, int type, int colorIndex, QString message, float x, float y, float z);
    void poiConnectionFound(UASInterface* uas, int type, int colorIndex, QString message, float x1, float y1, float z1, float x2, float y2, float z2);

349
    /** @brief A text message from the system has been received */
350
    void textMessageReceived(int uasid, int componentid, int severity, QString text);
351 352 353

    void navModeChanged(int uasid, int mode, const QString& text);

354 355 356 357 358 359 360
    /** @brief System is now armed */
    void armed();
    /** @brief System is now disarmed */
    void disarmed();
    /** @brief Arming mode changed */
    void armingChanged(bool armed);

361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
    /**
     * @brief Update the error count of a device
     *
     * The error count indicates how many errors occured during the use of a device.
     * Usually a random error from time to time is acceptable, e.g. through electromagnetic
     * interferences on device lines like I2C and SPI. A constantly and rapidly increasing
     * error count however can help to identify broken cables or misbehaving drivers.
     *
     * @param uasid System ID
     * @param component Name of the component, e.g. "IMU"
     * @param device Name of the device, e.g. "SPI0" or "I2C1"
     * @param count Errors occured since system startup
     */
    void errCountChanged(int uasid, QString component, QString device, int count);

lm's avatar
lm committed
376 377 378 379
    /**
     * @brief Drop rate of communication link updated
     *
     * @param systemId id of the air system
380
     * @param receiveDrop drop rate of packets this MAV receives (sent from GCS or other MAVs)
lm's avatar
lm committed
381
     */
382
    void dropRateChanged(int systemId,  float receiveDrop);
pixhawk's avatar
pixhawk committed
383 384
    /** @brief Robot mode has changed */
    void modeChanged(int sysId, QString status, QString description);
385 386
    /** @brief Robot armed state has changed */
    void armingChanged(int sysId, QString armingState);
pixhawk's avatar
pixhawk committed
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412
    /** @brief A command has been issued **/
    void commandSent(int command);
    /** @brief The connection status has changed **/
    void connectionChanged(CommStatus connectionFlag);
    /** @brief The robot is connecting **/
    void connecting();
    /** @brief The robot is connected **/
    void connected();
    /** @brief The robot is disconnected **/
    void disconnected();
    /** @brief The robot is active **/
    void activated();
    /** @brief The robot is inactive **/
    void deactivated();
    /** @brief The robot is manually controlled **/
    void manualControl();
    /** @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
      * the groundstation
      *
      * @param uasId ID of this system
      * @param name name of the value, e.g. "battery voltage"
      * @param value the value that changed
      * @param msec the timestamp of the message, in milliseconds
      */
lm's avatar
lm committed
413

414 415 416
    //void valueChanged(const int uasId, const QString& name, const double value, const quint64 msec);
    void valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec);
    void valueChanged(const int uasId, const QString& name, const QString& unit, const int value, const quint64 msec);
lm's avatar
lm committed
417 418 419 420

//    void valueChanged(const int uasId, const QString& name, const double value, const quint64 msec);
//    //void valueChanged(UASInterface* uas, QString name, double value, quint64 msec);

pixhawk's avatar
pixhawk committed
421 422 423 424 425
    void voltageChanged(int uasId, double voltage);
    void waypointUpdated(int uasId, int id, double x, double y, double z, double yaw, bool autocontinue, bool active);
    void waypointSelected(int uasId, int id);
    void waypointReached(UASInterface* uas, int id);
    void autoModeChanged(bool autoMode);
426 427
    void parameterChanged(int uas, int component, QString parameterName, QVariant value);
    void parameterChanged(int uas, int component, int parameterCount, int parameterId, QString parameterName, QVariant value);
428
    void patternDetected(int uasId, QString patternPath, float confidence, bool detected);
pixhawk's avatar
pixhawk committed
429
    void letterDetected(int uasId, QString letter, float confidence, bool detected);
pixhawk's avatar
pixhawk committed
430 431 432 433 434 435 436 437 438 439 440 441 442 443
    /**
     * @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
     */
    void batteryChanged(UASInterface* uas, double voltage, double percent, int seconds);
    void statusChanged(UASInterface* uas, QString status);
    void actuatorChanged(UASInterface*, int actId, double value);
    void thrustChanged(UASInterface*, double thrust);
    void heartbeat(UASInterface* uas);
    void attitudeChanged(UASInterface*, double roll, double pitch, double yaw, quint64 usec);
444
    void attitudeSpeedChanged(int uas, double rollspeed, double pitchspeed, double yawspeed, quint64 usec);
pixhawk's avatar
pixhawk committed
445
    void attitudeThrustSetPointChanged(UASInterface*, double rollDesired, double pitchDesired, double yawDesired, double thrustDesired, quint64 usec);
lm's avatar
lm committed
446
    void positionSetPointsChanged(int uasid, float xDesired, float yDesired, float zDesired, float yawDesired, quint64 usec);
pixhawk's avatar
pixhawk committed
447
    void localPositionChanged(UASInterface*, double x, double y, double z, quint64 usec);
lm's avatar
lm committed
448
    void globalPositionChanged(UASInterface*, double lat, double lon, double alt, quint64 usec);
lm's avatar
lm committed
449
    void altitudeChanged(int uasid, double altitude);
lm's avatar
lm committed
450 451
    /** @brief Update the status of one satellite used for localization */
    void gpsSatelliteStatusChanged(int uasid, int satid, float azimuth, float direction, float snr, bool used);
pixhawk's avatar
pixhawk committed
452 453 454 455 456
    void speedChanged(UASInterface*, double x, double y, double z, quint64 usec);
    void imageStarted(int imgid, int width, int height, int depth, int channels);
    void imageDataReceived(int imgid, const unsigned char* imageData, int length, int startIndex);
    /** @brief Emit the new system type */
    void systemTypeSet(UASInterface* uas, unsigned int type);
pixhawk's avatar
pixhawk committed
457 458 459 460 461 462 463 464
    /** @brief Attitude control enabled/disabled */
    void attitudeControlEnabled(bool enabled);
    /** @brief Position 2D control enabled/disabled */
    void positionXYControlEnabled(bool enabled);
    /** @brief Altitude control enabled/disabled */
    void positionZControlEnabled(bool enabled);
    /** @brief Heading control enabled/disabled */
    void positionYawControlEnabled(bool enabled);
465 466 467 468
    /** @brief Value of a remote control channel (raw) */
    void remoteControlChannelRawChanged(int channelId, float raw);
    /** @brief Value of a remote control channel (scaled)*/
    void remoteControlChannelScaledChanged(int channelId, float normalized);
pixhawk's avatar
pixhawk committed
469 470
    /** @brief Remote control RSSI changed */
    void remoteControlRSSIChanged(float rssi);
471 472
    /** @brief Radio Calibration Data has been received from the MAV*/
    void radioCalibrationReceived(const QPointer<RadioCalibrationData>&);
pixhawk's avatar
pixhawk committed
473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488

    /**
     * @brief Localization quality changed
     * @param fix 0: lost, 1: 2D local position hold, 2: 2D localization, 3: 3D localization
     */
    void localizationChanged(UASInterface* uas, int fix);
    /**
     * @brief GPS localization quality changed
     * @param fix 0: lost, 1: at least one satellite, but no GPS fix, 2: 2D localization, 3: 3D localization
     */
    void gpsLocalizationChanged(UASInterface* uas, int fix);
    /**
     * @brief Vision localization quality changed
     * @param fix 0: lost, 1: 2D local position hold, 2: 2D localization, 3: 3D localization
     */
    void visionLocalizationChanged(UASInterface* uas, int fix);
489 490 491 492 493
    /**
     * @brief IR/U localization quality changed
     * @param fix 0: No IR/Ultrasound sensor, N > 0: Found N active sensors
     */
    void irUltraSoundLocalizationChanged(UASInterface* uas, int fix);
494

495 496 497 498 499 500 501
    // ERROR AND STATUS SIGNALS
    /** @brief Heartbeat timed out */
    void heartbeatTimeout();
    /** @brief Heartbeat timed out */
    void heartbeatTimeout(unsigned int ms);
    /** @brief Name of system changed */
    void nameChanged(QString newName);
502 503
    /** @brief System has been selected as focused system */
    void systemSelected(bool selected);
504 505
    /** @brief Core specifications have changed */
    void systemSpecsChanged(int uasId);
506

LM's avatar
LM committed
507 508 509
    /** @brief Object detected */
    void objectDetected(unsigned int time, int id, int type, const QString& name, int quality, float bearing, float distance);

510 511 512 513

    // HOME POSITION / ORIGIN CHANGES
    void homePositionChanged(int uas, double lat, double lon, double alt);

514
protected:
515

516 517
    // TIMEOUT CONSTANTS
    static const unsigned int timeoutIntervalHeartbeat = 2000 * 1000; ///< Heartbeat timeout is 1.5 seconds
518

pixhawk's avatar
pixhawk committed
519 520
};

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

pixhawk's avatar
pixhawk committed
523
#endif // _UASINTERFACE_H_