ArduSubFirmwarePlugin.h 4.6 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
class APMSubmarineFactGroup : public FactGroup
{
    Q_OBJECT

public:
    APMSubmarineFactGroup(QObject* parent = NULL);

    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)

    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; }

    static const char* _camTiltFactName;
    static const char* _tetherTurnsFactName;
    static const char* _lightsLevel1FactName;
    static const char* _lightsLevel2FactName;
    static const char* _pilotGainFactName;

    static const char* _settingsGroup;

private:
    Fact            _camTiltFact;
    Fact            _tetherTurnsFact;
    Fact            _lightsLevel1Fact;
    Fact            _lightsLevel2Fact;
    Fact            _pilotGainFact;
};
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

class APMSubMode : public APMCustomMode
{
public:
    enum Mode {
        STABILIZE         = 0,   // Hold level position
        RESERVED_1        = 1,
        ALT_HOLD          = 2,   // Depth hold
        RESERVED_3        = 3,
        RESERVED_4        = 4,
        RESERVED_5        = 5,
        RESERVED_6        = 6,
        RESERVED_7        = 7,
        RESERVED_8        = 8,
        RESERVED_9        = 9,
        RESERVED_10       = 10,
        RESERVED_11       = 11,
        RESERVED_12       = 12,
        RESERVED_13       = 13,
        RESERVED_14       = 14,
        RESERVED_15       = 15,
        RESERVED_16       = 16,
87 88 89
        RESERVED_17       = 17,
        RESERVED_18       = 18,
        MANUAL            = 19
90
    };
91
    static const int modeCount = 20;
92 93 94 95 96 97 98 99 100 101 102 103

    APMSubMode(uint32_t mode, bool settable);
};

class ArduSubFirmwarePlugin : public APMFirmwarePlugin
{
    Q_OBJECT

public:
    ArduSubFirmwarePlugin(void);

    // Overrides from FirmwarePlugin
104
    int manualControlReservedButtonCount(void);
105

106 107
    int defaultJoystickTXMode(void) final { return 3; }

108 109
    bool supportsThrottleModeCenterZero(void);

110
    bool supportsManualControl(void);
111 112

    bool supportsRadio(void);
113 114

    bool supportsJSButton(void);
115

116 117
    bool supportsMotorInterference(void);

118 119
    QString brandImageIndoor(const Vehicle* vehicle) const { Q_UNUSED(vehicle); return QStringLiteral("/qmlimages/APM/BrandImageSub"); }
    QString brandImageOutdoor(const Vehicle* vehicle) const { Q_UNUSED(vehicle); return QStringLiteral("/qmlimages/APM/BrandImageSub"); }
120 121
    const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; }
    int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const final;
122
    const QVariantList& toolBarIndicators(const Vehicle* vehicle) final;
123
    bool  adjustIncomingMavlinkMessage(Vehicle* vehicle, mavlink_message_t* message);
124
    virtual QMap<QString, FactGroup*>* factGroups(void);
125

126 127

private:
128
    QVariantList _toolBarIndicators;
129 130
    static bool _remapParamNameIntialized;
    static FirmwarePlugin::remapParamNameMajorVersionMap_t  _remapParamName;
131 132
    void _handleNamedValueFloat(mavlink_message_t* message);
    void _handleMavlinkMessage(mavlink_message_t* message);
133

134
    QMap<QString, FactGroup*> _nameToFactGroupMap;
135
    APMSubmarineFactGroup _infoFactGroup;
136
};
137
#endif