ArduSubFirmwarePlugin.h 6.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/*=====================================================================

 QGroundControl Open Source Ground Control Station

 (c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

 This file is part of the QGROUNDCONTROL project

 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 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.

 QGROUNDCONTROL is distributed in the hope that it will be useful,
 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
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.

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

/// @file
///     @author Rustom Jehangir <rusty@bluerobotics.com>

#ifndef ArduSubFirmwarePlugin_H
#define ArduSubFirmwarePlugin_H

#include "APMFirmwarePlugin.h"
31 32 33 34 35
class APMSubmarineFactGroup : public FactGroup
{
    Q_OBJECT

public:
36
    APMSubmarineFactGroup(QObject* parent = nullptr);
37

38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
    Q_PROPERTY(Fact* camTilt             READ camTilt             CONSTANT)
    Q_PROPERTY(Fact* tetherTurns         READ tetherTurns         CONSTANT)
    Q_PROPERTY(Fact* lightsLevel1        READ lightsLevel1        CONSTANT)
    Q_PROPERTY(Fact* lightsLevel2        READ lightsLevel2        CONSTANT)
    Q_PROPERTY(Fact* pilotGain           READ pilotGain           CONSTANT)
    Q_PROPERTY(Fact* inputHold           READ inputHold     CONSTANT)
    Q_PROPERTY(Fact* rangefinderDistance READ rangefinderDistance CONSTANT)

    Fact* camTilt             (void) { return &_camTiltFact; }
    Fact* tetherTurns         (void) { return &_tetherTurnsFact; }
    Fact* lightsLevel1        (void) { return &_lightsLevel1Fact; }
    Fact* lightsLevel2        (void) { return &_lightsLevel2Fact; }
    Fact* pilotGain           (void) { return &_pilotGainFact; }
    Fact* inputHold           (void) { return &_inputHoldFact; }
    Fact* rangefinderDistance (void) { return &_rangefinderDistanceFact; }
53 54 55 56 57 58

    static const char* _camTiltFactName;
    static const char* _tetherTurnsFactName;
    static const char* _lightsLevel1FactName;
    static const char* _lightsLevel2FactName;
    static const char* _pilotGainFactName;
59
    static const char* _inputHoldFactName;
60
    static const char* _rollPitchToggleFactName;
61
    static const char* _rangefinderDistanceFactName;
62 63 64 65 66 67 68 69 70

    static const char* _settingsGroup;

private:
    Fact            _camTiltFact;
    Fact            _tetherTurnsFact;
    Fact            _lightsLevel1Fact;
    Fact            _lightsLevel2Fact;
    Fact            _pilotGainFact;
71
    Fact            _inputHoldFact;
72
    Fact            _rollPitchToggleFact;
73
    Fact            _rangefinderDistanceFact;
74
};
75 76 77 78 79 80

class APMSubMode : public APMCustomMode
{
public:
    enum Mode {
        STABILIZE         = 0,   // Hold level position
dheideman's avatar
dheideman committed
81
        ACRO              = 1,   // Manual angular rate, throttle
82
        ALT_HOLD          = 2,   // Depth hold
dheideman's avatar
dheideman committed
83 84
        AUTO              = 3,   // Full auto to waypoint
        GUIDED            = 4,   // Full auto to coordinate/direction
85 86
        RESERVED_5        = 5,
        RESERVED_6        = 6,
dheideman's avatar
dheideman committed
87
        CIRCLE            = 7,   // Auto circling
88
        RESERVED_8        = 8,
dheideman's avatar
dheideman committed
89
        SURFACE           = 9,   // Auto return to surface
90 91 92 93 94 95
        RESERVED_10       = 10,
        RESERVED_11       = 11,
        RESERVED_12       = 12,
        RESERVED_13       = 13,
        RESERVED_14       = 14,
        RESERVED_15       = 15,
dheideman's avatar
dheideman committed
96
        POSHOLD           = 16,  // Hold position
97 98
        RESERVED_17       = 17,
        RESERVED_18       = 18,
99 100
        MANUAL            = 19,
        MOTORDETECTION    = 20,
101 102 103 104 105 106 107 108 109 110 111 112
    };

    APMSubMode(uint32_t mode, bool settable);
};

class ArduSubFirmwarePlugin : public APMFirmwarePlugin
{
    Q_OBJECT

public:
    ArduSubFirmwarePlugin(void);

DonLakeFlyer's avatar
DonLakeFlyer committed
113
    QList<MAV_CMD> supportedMissionCommands(void) final;
114

115 116
    int defaultJoystickTXMode(void) final { return 3; }

117 118
    void initializeStreamRates(Vehicle* vehicle) override final;

119 120
    bool isCapable(const Vehicle *vehicle, FirmwareCapabilities capabilities) final;

121
    bool supportsThrottleModeCenterZero(void) final;
122

123
    bool supportsRadio(void) final;
124

125
    bool supportsJSButton(void) final;
126

127
    bool supportsMotorInterference(void) final;
128

129
    /// Return the resource file which contains the vehicle icon used in the flight view when the view is dark (Satellite for instance)
130
    virtual QString vehicleImageOpaque(const Vehicle* vehicle) const final;
131 132

    /// Return the resource file which contains the vehicle icon used in the flight view when the view is light (Map for instance)
133
    virtual QString vehicleImageOutline(const Vehicle* vehicle) const final;
134

135 136
    QString brandImageIndoor(const Vehicle* vehicle) const final{ Q_UNUSED(vehicle); return QStringLiteral("/qmlimages/APM/BrandImageSub"); }
    QString brandImageOutdoor(const Vehicle* vehicle) const final { Q_UNUSED(vehicle); return QStringLiteral("/qmlimages/APM/BrandImageSub"); }
137 138
    const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; }
    int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const final;
139
    const QVariantList& toolBarIndicators(const Vehicle* vehicle) final;
140 141
    bool  adjustIncomingMavlinkMessage(Vehicle* vehicle, mavlink_message_t* message) final;
    virtual QMap<QString, FactGroup*>* factGroups(void) final;
142
    void adjustMetaData(MAV_TYPE vehicleType, FactMetaData* metaData) override final;
143

144 145

private:
146
    QVariantList _toolBarIndicators;
147
    static bool _remapParamNameIntialized;
148
    QMap<QString, QString> _factRenameMap;
149
    static FirmwarePlugin::remapParamNameMajorVersionMap_t  _remapParamName;
150 151
    void _handleNamedValueFloat(mavlink_message_t* message);
    void _handleMavlinkMessage(mavlink_message_t* message);
152

153
    QMap<QString, FactGroup*> _nameToFactGroupMap;
154
    APMSubmarineFactGroup _infoFactGroup;
155
};
156
#endif