PX4AutoPilotPlugin.cc 5.14 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
9

10 11

#include "PX4AutoPilotPlugin.h"
12
#include "PX4AirframeLoader.h"
Don Gagne's avatar
Don Gagne committed
13
#include "PX4AdvancedFlightModesController.h"
14
#include "AirframeComponentController.h"
15
#include "UAS.h"
16
#include "FirmwarePlugin/PX4/PX4ParameterMetaData.h"  // FIXME: Hack
17
#include "FirmwarePlugin/PX4/PX4FirmwarePlugin.h"  // FIXME: Hack
18
#include "QGCApplication.h"
19 20 21 22 23

/// @file
///     @brief This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_PX4 type.
///     @author Don Gagne <don@thegagnes.com>

Don Gagne's avatar
Don Gagne committed
24 25 26 27 28 29 30 31 32 33 34
PX4AutoPilotPlugin::PX4AutoPilotPlugin(Vehicle* vehicle, QObject* parent)
    : AutoPilotPlugin(vehicle, parent)
    , _airframeComponent(NULL)
    , _radioComponent(NULL)
    , _esp8266Component(NULL)
    , _flightModesComponent(NULL)
    , _sensorsComponent(NULL)
    , _safetyComponent(NULL)
    , _powerComponent(NULL)
    , _motorComponent(NULL)
    , _incorrectParameterVersion(false)
35
{
36
    Q_ASSERT(vehicle);
37

38
    _airframeFacts = new PX4AirframeLoader(this, _vehicle->uas(), this);
39
    Q_CHECK_PTR(_airframeFacts);
40

41
    PX4AirframeLoader::loadAirframeMetaData();
Don Gagne's avatar
Don Gagne committed
42 43 44 45
}

PX4AutoPilotPlugin::~PX4AutoPilotPlugin()
{
46
    delete _airframeFacts;
47 48
}

49
const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void)
50
{
51
    if (_components.count() == 0 && !_incorrectParameterVersion) {
52
        Q_ASSERT(_vehicle);
53

54
        if (_vehicle->parameterManager()->parametersReady()) {
55
            _airframeComponent = new AirframeComponent(_vehicle, this);
56 57
            _airframeComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_airframeComponent));
58

Don Gagne's avatar
Don Gagne committed
59
            _radioComponent = new PX4RadioComponent(_vehicle, this);
60 61
            _radioComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_radioComponent));
dogmaphobic's avatar
dogmaphobic committed
62

63 64 65 66 67
            if (!_vehicle->hilMode()) {
                _sensorsComponent = new SensorsComponent(_vehicle, this);
                _sensorsComponent->setupTriggerSignals();
                _components.append(QVariant::fromValue((VehicleComponent*)_sensorsComponent));
            }
68 69 70 71 72

            _flightModesComponent = new FlightModesComponent(_vehicle, this);
            _flightModesComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_flightModesComponent));

73
            _powerComponent = new PowerComponent(_vehicle, this);
74 75
            _powerComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_powerComponent));
76

Don Gagne's avatar
Don Gagne committed
77 78 79 80 81 82 83
#if 0
            // Coming soon
            _motorComponent = new MotorComponent(_vehicle, this);
            _motorComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_motorComponent));
#endif

84
            _safetyComponent = new SafetyComponent(_vehicle, this);
85 86
            _safetyComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_safetyComponent));
Don Gagne's avatar
Don Gagne committed
87 88 89 90

            _tuningComponent = new PX4TuningComponent(_vehicle, this);
            _tuningComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_tuningComponent));
Don Gagne's avatar
Don Gagne committed
91

dogmaphobic's avatar
dogmaphobic committed
92
            //-- Is there support for cameras?
93
            if(_vehicle->parameterManager()->parameterExists(_vehicle->id(), "TRIG_MODE")) {
dogmaphobic's avatar
dogmaphobic committed
94 95 96 97
                _cameraComponent = new CameraComponent(_vehicle, this);
                _cameraComponent->setupTriggerSignals();
                _components.append(QVariant::fromValue((VehicleComponent*)_cameraComponent));
            }
98

Don Gagne's avatar
Don Gagne committed
99
            //-- Is there an ESP8266 Connected?
100
            if(_vehicle->parameterManager()->parameterExists(MAV_COMP_ID_UDP_BRIDGE, "SW_VER")) {
Don Gagne's avatar
Don Gagne committed
101 102 103 104
                _esp8266Component = new ESP8266Component(_vehicle, this);
                _esp8266Component->setupTriggerSignals();
                _components.append(QVariant::fromValue((VehicleComponent*)_esp8266Component));
            }
105
        } else {
106
            qWarning() << "Call to vehicleCompenents prior to parametersReady";
107
        }
108
    }
109

110 111 112
    return _components;
}

113
void PX4AutoPilotPlugin::parametersReadyPreChecks(void)
114
{
115 116 117
    // Base class must be called
    AutoPilotPlugin::parametersReadyPreChecks();

Don Gagne's avatar
Don Gagne committed
118 119 120
    // Check for older parameter version set
    // FIXME: Firmware is moving to version stamp parameter set. Once that is complete the version stamp
    // should be used instead.
121 122
    if (_vehicle->parameterManager()->parameterExists(FactSystem::defaultComponentId, "SENS_GYRO_XOFF") ||
            _vehicle->parameterManager()->parameterExists(FactSystem::defaultComponentId, "COM_DL_LOSS_EN")) {
123
        _incorrectParameterVersion = true;
124 125
        qgcApp()->showMessage("This version of GroundControl can only perform vehicle setup on a newer version of firmware. "
                              "Please perform a Firmware Upgrade if you wish to use Vehicle Setup.");
126
    }
127
}