PX4AutoPilotPlugin.cc 5.41 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
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)
Don Gagne's avatar
Don Gagne committed
34 35
    , _tuningComponent(NULL)
    , _mixersComponent(NULL)
Don Gagne's avatar
Don Gagne committed
36
    , _incorrectParameterVersion(false)
37
{
38
    Q_ASSERT(vehicle);
39

40
    _airframeFacts = new PX4AirframeLoader(this, _vehicle->uas(), this);
41
    Q_CHECK_PTR(_airframeFacts);
42

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

PX4AutoPilotPlugin::~PX4AutoPilotPlugin()
{
48
    delete _airframeFacts;
49 50
}

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

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

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

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

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

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

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

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

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

Don Gagne's avatar
Don Gagne committed
94 95 96 97
            _mixersComponent = new MixersComponent(_vehicle, this);
            _mixersComponent->setupTriggerSignals();
            _components.append(QVariant::fromValue((VehicleComponent*)_mixersComponent));

dogmaphobic's avatar
dogmaphobic committed
98
            //-- Is there support for cameras?
99
            if(_vehicle->parameterManager()->parameterExists(_vehicle->id(), "TRIG_MODE")) {
dogmaphobic's avatar
dogmaphobic committed
100 101 102 103
                _cameraComponent = new CameraComponent(_vehicle, this);
                _cameraComponent->setupTriggerSignals();
                _components.append(QVariant::fromValue((VehicleComponent*)_cameraComponent));
            }
104

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

116 117 118
    return _components;
}

119
void PX4AutoPilotPlugin::parametersReadyPreChecks(void)
120
{
121 122 123
    // Base class must be called
    AutoPilotPlugin::parametersReadyPreChecks();

Don Gagne's avatar
Don Gagne committed
124 125 126
    // 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.
127 128
    if (_vehicle->parameterManager()->parameterExists(FactSystem::defaultComponentId, "SENS_GYRO_XOFF") ||
            _vehicle->parameterManager()->parameterExists(FactSystem::defaultComponentId, "COM_DL_LOSS_EN")) {
129
        _incorrectParameterVersion = true;
130 131
        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.");
132
    }
133
}