diff --git a/src/AutoPilotPlugins/PX4/FlightModesComponent.cc b/src/AutoPilotPlugins/PX4/FlightModesComponent.cc index 17d71adeab8df344d813dc6c835133f994fc5f6e..9c64344a770f9c606b9d614924100ed127dbe112 100644 --- a/src/AutoPilotPlugins/PX4/FlightModesComponent.cc +++ b/src/AutoPilotPlugins/PX4/FlightModesComponent.cc @@ -107,7 +107,7 @@ QString FlightModesComponent::prerequisiteSetup(void) const return plugin->airframeComponent()->name(); } else if (!plugin->radioComponent()->setupComplete()) { return plugin->radioComponent()->name(); - } else if (!plugin->sensorsComponent()->setupComplete()) { + } else if (!plugin->vehicle()->hilMode() && !plugin->sensorsComponent()->setupComplete()) { return plugin->sensorsComponent()->name(); } } diff --git a/src/AutoPilotPlugins/PX4/PX4AutoPilotPlugin.cc b/src/AutoPilotPlugins/PX4/PX4AutoPilotPlugin.cc index 14b0ea56214316503ea8b477eff7acf213428f1f..c2adda7c0ad96d9b206c426474a9b377d6fe09e0 100644 --- a/src/AutoPilotPlugins/PX4/PX4AutoPilotPlugin.cc +++ b/src/AutoPilotPlugins/PX4/PX4AutoPilotPlugin.cc @@ -73,9 +73,11 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void) _radioComponent->setupTriggerSignals(); _components.append(QVariant::fromValue((VehicleComponent*)_radioComponent)); - _sensorsComponent = new SensorsComponent(_vehicle, this); - _sensorsComponent->setupTriggerSignals(); - _components.append(QVariant::fromValue((VehicleComponent*)_sensorsComponent)); + if (!_vehicle->hilMode()) { + _sensorsComponent = new SensorsComponent(_vehicle, this); + _sensorsComponent->setupTriggerSignals(); + _components.append(QVariant::fromValue((VehicleComponent*)_sensorsComponent)); + } _flightModesComponent = new FlightModesComponent(_vehicle, this); _flightModesComponent->setupTriggerSignals(); diff --git a/src/AutoPilotPlugins/PX4/SafetyComponent.qml b/src/AutoPilotPlugins/PX4/SafetyComponent.qml index 58e79135a552986ea84928bfed3c77721d1ef134..c903fd0ba861432d60f1b09a66e0ebcf12fc4fd8 100644 --- a/src/AutoPilotPlugins/PX4/SafetyComponent.qml +++ b/src/AutoPilotPlugins/PX4/SafetyComponent.qml @@ -490,7 +490,7 @@ QGCView { spacing: _margins * 0.5 anchors.verticalCenter: parent.verticalCenter Row { - visible: _landSpeedMC !== -1 + visible: !controller.vehicle.fixedWing && (_landSpeedMC !== -1) QGCLabel { anchors.baseline: landVelField.baseline width: _middleRowWidth diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index 48c46f62aab2bb0fc162689b4d96dbabab9d6995..f794a985aab18116421811d940e04b584892f9d9 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -167,8 +167,9 @@ QList APMFirmwarePlugin::componentsForVehicle(AutoPilotPlugin return QList(); } -QStringList APMFirmwarePlugin::flightModes(void) +QStringList APMFirmwarePlugin::flightModes(Vehicle* vehicle) { + Q_UNUSED(vehicle) QStringList flightModesList; foreach (const APMCustomMode& customMode, _supportedModes) { if (customMode.canBeSet()) { diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.h b/src/FirmwarePlugin/APM/APMFirmwarePlugin.h index 0c7b7701c45ecb47cd46d0401171474ba5ad3e44..f8a91fe87c1ea3100f2f67cb2e9bc47dfbeb60eb 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.h +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.h @@ -87,7 +87,7 @@ public: QList supportedMissionCommands(void) final; bool isCapable(FirmwareCapabilities capabilities); - QStringList flightModes(void) final; + QStringList flightModes(Vehicle* vehicle) final; QString flightMode(uint8_t base_mode, uint32_t custom_mode) const final; bool setFlightMode(const QString& flightMode, uint8_t* base_mode, uint32_t* custom_mode) final; bool isGuidedMode(const Vehicle* vehicle) const final; diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index b2afe94de11da5904489d0f3e6eec49fe94f9d94..6578f9f394ebbb11aae038c99633b362e4a609e7 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -84,7 +84,10 @@ public: virtual QList componentsForVehicle(AutoPilotPlugin* vehicle); /// Returns the list of available flight modes - virtual QStringList flightModes(void) { return QStringList(); } + virtual QStringList flightModes(Vehicle* vehicle) { + Q_UNUSED(vehicle); + return QStringList(); + } /// Returns the name for this flight mode. Flight mode names must be human readable as well as audio speakable. /// @param base_mode Base mode from mavlink HEARTBEAT message diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index 8b19a6e1c63d07352da502ac4f7a6afcf0e0eaec..4492accc01360909fad8af14c727319951872128 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -68,6 +68,8 @@ struct Modes2Name { uint8_t sub_mode; const char* name; ///< Name for flight mode bool canBeSet; ///< true: Vehicle can be set to this flight mode + bool fixedWing; /// fixed wing compatible + bool multiRotor; /// multi rotor compatible }; const char* PX4FirmwarePlugin::manualFlightMode = "Manual"; @@ -89,21 +91,21 @@ const char* PX4FirmwarePlugin::followMeFlightMode = "Follow Me"; /// Tranlates from PX4 custom modes to flight mode names static const struct Modes2Name rgModes2Name[] = { - { PX4_CUSTOM_MAIN_MODE_MANUAL, 0, PX4FirmwarePlugin::manualFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_ACRO, 0, PX4FirmwarePlugin::acroFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_STABILIZED, 0, PX4FirmwarePlugin::stabilizedFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0, PX4FirmwarePlugin::rattitudeFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, PX4FirmwarePlugin::altCtlFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_POSCTL, 0, PX4FirmwarePlugin::posCtlFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, PX4FirmwarePlugin::offboardFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_READY, PX4FirmwarePlugin::readyFlightMode, false }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_TAKEOFF, PX4FirmwarePlugin::takeoffFlightMode, false }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LOITER, PX4FirmwarePlugin::pauseFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_MISSION, PX4FirmwarePlugin::missionFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTL, PX4FirmwarePlugin::rtlFlightMode, true }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LAND, PX4FirmwarePlugin::landingFlightMode, false }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTGS, PX4FirmwarePlugin::rtgsFlightMode, false }, - { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_FOLLOW_ME, PX4FirmwarePlugin::followMeFlightMode, true }, + { PX4_CUSTOM_MAIN_MODE_MANUAL, 0, PX4FirmwarePlugin::manualFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_ACRO, 0, PX4FirmwarePlugin::acroFlightMode, true, false, true}, + { PX4_CUSTOM_MAIN_MODE_STABILIZED, 0, PX4FirmwarePlugin::stabilizedFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0, PX4FirmwarePlugin::rattitudeFlightMode, true, false, true}, + { PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, PX4FirmwarePlugin::altCtlFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_POSCTL, 0, PX4FirmwarePlugin::posCtlFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, PX4FirmwarePlugin::offboardFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_READY, PX4FirmwarePlugin::readyFlightMode, false, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_TAKEOFF, PX4FirmwarePlugin::takeoffFlightMode, false, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LOITER, PX4FirmwarePlugin::pauseFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_MISSION, PX4FirmwarePlugin::missionFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTL, PX4FirmwarePlugin::rtlFlightMode, true, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LAND, PX4FirmwarePlugin::landingFlightMode, false, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTGS, PX4FirmwarePlugin::rtgsFlightMode, false, true, true}, + { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_FOLLOW_ME, PX4FirmwarePlugin::followMeFlightMode, true, true, true}, }; QList PX4FirmwarePlugin::componentsForVehicle(AutoPilotPlugin* vehicle) @@ -113,7 +115,7 @@ QList PX4FirmwarePlugin::componentsForVehicle(AutoPilotPlugin return QList(); } -QStringList PX4FirmwarePlugin::flightModes(void) +QStringList PX4FirmwarePlugin::flightModes(Vehicle* vehicle) { QStringList flightModes; @@ -121,7 +123,15 @@ QStringList PX4FirmwarePlugin::flightModes(void) const struct Modes2Name* pModes2Name = &rgModes2Name[i]; if (pModes2Name->canBeSet) { - flightModes += pModes2Name->name; + bool fw = (vehicle->fixedWing() && pModes2Name->fixedWing); + bool mc = (vehicle->multiRotor() && pModes2Name->multiRotor); + + // show all modes for generic, vtol, etc + bool other = !vehicle->fixedWing() && !vehicle->multiRotor(); + + if (fw || mc || other) { + flightModes += pModes2Name->name; + } } } diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h index d41af304bc175bfc90e4366c7634b6464b254061..04e5c6a3582618fc5ba176f6f1eea2de10792023 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h @@ -42,7 +42,7 @@ public: QList supportedMissionCommands(void) final; bool isCapable (FirmwareCapabilities capabilities) final; - QStringList flightModes (void) final; + QStringList flightModes (Vehicle* vehicle) final; QString flightMode (uint8_t base_mode, uint32_t custom_mode) const final; bool setFlightMode (const QString& flightMode, uint8_t* base_mode, uint32_t* custom_mode) final; void setGuidedMode(Vehicle* vehicle, bool guidedMode) final; diff --git a/src/QmlControls/ParameterEditor.qml b/src/QmlControls/ParameterEditor.qml index f36ec7fada1ec3dbc07f2627bc39457668bf6f98..ecfbf0595d3813672eb67a4079041a776fe00f77 100644 --- a/src/QmlControls/ParameterEditor.qml +++ b/src/QmlControls/ParameterEditor.qml @@ -181,7 +181,7 @@ QGCView { readonly property int componentId: parseInt(modelData) spacing: Math.ceil(ScreenTools.defaultFontPixelHeight * 0.25) QGCLabel { - text: qsTr("Component #: %1)").arg(componentId.toString()) + text: qsTr("Component #: %1").arg(componentId.toString()) font.family: ScreenTools.demiboldFontFamily anchors.horizontalCenter: parent.horizontalCenter } diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 961fab5559cee35cc4b9a535c9860617b89628d9..058d93e845925463de08d1fb785e8a64cafe9266 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -1193,7 +1193,7 @@ bool Vehicle::flightModeSetAvailable(void) QStringList Vehicle::flightModes(void) { - return _firmwarePlugin->flightModes(); + return _firmwarePlugin->flightModes(this); } QString Vehicle::flightMode(void) const