Commit 6e57a50a authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #5073 from DonLakeFlyer/Fixes

Pile of fixes
parents 23f21402 6d83753f
...@@ -80,9 +80,10 @@ MavlinkConsoleController::_receiveData(uint8_t device, uint8_t, uint16_t, uint32 ...@@ -80,9 +80,10 @@ MavlinkConsoleController::_receiveData(uint8_t device, uint8_t, uint16_t, uint32
void void
MavlinkConsoleController::_sendSerialData(QByteArray data, bool close) MavlinkConsoleController::_sendSerialData(QByteArray data, bool close)
{ {
Q_ASSERT(_vehicle); if (!_vehicle) {
if (!_vehicle) qWarning() << "Internal error";
return; return;
}
// Send maximum sized chunks until the complete buffer is transmitted // Send maximum sized chunks until the complete buffer is transmitted
while(data.size()) { while(data.size()) {
......
...@@ -21,7 +21,7 @@ AutoPilotPlugin::AutoPilotPlugin(Vehicle* vehicle, QObject* parent) ...@@ -21,7 +21,7 @@ AutoPilotPlugin::AutoPilotPlugin(Vehicle* vehicle, QObject* parent)
: QObject(parent) : QObject(parent)
, _vehicle(vehicle) , _vehicle(vehicle)
, _firmwarePlugin(vehicle->firmwarePlugin()) , _firmwarePlugin(vehicle->firmwarePlugin())
, _setupComplete(false) , _setupComplete(false)
{ {
} }
...@@ -33,27 +33,29 @@ AutoPilotPlugin::~AutoPilotPlugin() ...@@ -33,27 +33,29 @@ AutoPilotPlugin::~AutoPilotPlugin()
void AutoPilotPlugin::_recalcSetupComplete(void) void AutoPilotPlugin::_recalcSetupComplete(void)
{ {
bool newSetupComplete = true; bool newSetupComplete = true;
foreach(const QVariant componentVariant, vehicleComponents()) { foreach(const QVariant componentVariant, vehicleComponents()) {
VehicleComponent* component = qobject_cast<VehicleComponent*>(qvariant_cast<QObject *>(componentVariant)); VehicleComponent* component = qobject_cast<VehicleComponent*>(qvariant_cast<QObject *>(componentVariant));
Q_ASSERT(component); if (component) {
if (!component->setupComplete()) {
if (!component->setupComplete()) { newSetupComplete = false;
newSetupComplete = false; break;
break; }
} } else {
} qWarning() << "AutoPilotPlugin::_recalcSetupComplete Incorrectly typed VehicleComponent";
}
if (_setupComplete != newSetupComplete) { }
_setupComplete = newSetupComplete;
emit setupCompleteChanged(_setupComplete); if (_setupComplete != newSetupComplete) {
} _setupComplete = newSetupComplete;
emit setupCompleteChanged(_setupComplete);
}
} }
bool AutoPilotPlugin::setupComplete(void) bool AutoPilotPlugin::setupComplete(void)
{ {
return _setupComplete; return _setupComplete;
} }
void AutoPilotPlugin::parametersReadyPreChecks(void) void AutoPilotPlugin::parametersReadyPreChecks(void)
......
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
GenericAutoPilotPlugin::GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent) : GenericAutoPilotPlugin::GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent) :
AutoPilotPlugin(vehicle, parent) AutoPilotPlugin(vehicle, parent)
{ {
Q_ASSERT(vehicle); if (!vehicle) {
qWarning() << "Internal error";
}
} }
const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void) const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void)
......
...@@ -15,96 +15,11 @@ ...@@ -15,96 +15,11 @@
#include "QGCQmlWidgetHolder.h" #include "QGCQmlWidgetHolder.h"
#include "ParameterManager.h" #include "ParameterManager.h"
#if 0
// Broken by latest mavlink module changes. Not used yet. Comment out for now.
// Discussing mavlink fix.
struct mavType {
int type;
const char* description;
};
/// @brief Used to translate from MAV_TYPE_* id to user string
static const struct mavType mavTypeInfo[] = {
{ MAV_TYPE_GENERIC, "Generic" },
{ MAV_TYPE_FIXED_WING, "Fixed Wing" },
{ MAV_TYPE_QUADROTOR, "Quadrotor" },
{ MAV_TYPE_COAXIAL, "Coaxial" },
{ MAV_TYPE_HELICOPTER, "Helicopter"},
{ MAV_TYPE_ANTENNA_TRACKER, "Antenna Tracker" },
{ MAV_TYPE_GCS, "Ground Control Station" },
{ MAV_TYPE_AIRSHIP, "Airship" },
{ MAV_TYPE_FREE_BALLOON, "Free Balloon" },
{ MAV_TYPE_ROCKET, "Rocket" },
{ MAV_TYPE_GROUND_ROVER, "Ground Rover" },
{ MAV_TYPE_SURFACE_BOAT, "Boat" },
{ MAV_TYPE_SUBMARINE, "Submarine" },
{ MAV_TYPE_HEXAROTOR, "Hexarotor" },
{ MAV_TYPE_OCTOROTOR, "Octorotor" },
{ MAV_TYPE_TRICOPTER, "Tricopter" },
{ MAV_TYPE_FLAPPING_WING, "Flapping Wing" },
{ MAV_TYPE_KITE, "Kite" },
{ MAV_TYPE_ONBOARD_CONTROLLER, "Onbard companion controller" },
{ MAV_TYPE_VTOL_DUOROTOR, "Two-rotor VTOL" },
{ MAV_TYPE_VTOL_QUADROTOR, "Quad-rotor VTOL" },
{ MAV_TYPE_VTOL_RESERVED1, "Reserved" },
{ MAV_TYPE_VTOL_RESERVED2, "Reserved" },
{ MAV_TYPE_VTOL_RESERVED3, "Reserved" },
{ MAV_TYPE_VTOL_RESERVED4, "Reserved" },
{ MAV_TYPE_VTOL_RESERVED5, "Reserved" },
{ MAV_TYPE_GIMBAL, "Gimbal" },
};
static size_t cMavTypes = sizeof(mavTypeInfo) / sizeof(mavTypeInfo[0]);
#endif
AirframeComponent::AirframeComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent) : AirframeComponent::AirframeComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent) :
VehicleComponent(vehicle, autopilot, parent), VehicleComponent(vehicle, autopilot, parent),
_name(tr("Airframe")) _name(tr("Airframe"))
{ {
#if 0
// Broken by latest mavlink module changes. Not used yet. Comment out for now.
// Discussing mavlink fix.
Q_UNUSED(mavTypeInfo); // Keeping this around for later use
// Validate that our mavTypeInfo array hasn't gotten out of sync
qDebug() << cMavTypes << MAV_TYPE_ENUM_END;
Q_ASSERT(cMavTypes == MAV_TYPE_ENUM_END);
static const int mavTypes[] = {
MAV_TYPE_GENERIC,
MAV_TYPE_FIXED_WING,
MAV_TYPE_QUADROTOR,
MAV_TYPE_COAXIAL,
MAV_TYPE_HELICOPTER,
MAV_TYPE_ANTENNA_TRACKER,
MAV_TYPE_GCS,
MAV_TYPE_AIRSHIP,
MAV_TYPE_FREE_BALLOON,
MAV_TYPE_ROCKET,
MAV_TYPE_GROUND_ROVER,
MAV_TYPE_SURFACE_BOAT,
MAV_TYPE_SUBMARINE,
MAV_TYPE_HEXAROTOR,
MAV_TYPE_OCTOROTOR,
MAV_TYPE_TRICOPTER,
MAV_TYPE_FLAPPING_WING,
MAV_TYPE_KITE,
MAV_TYPE_ONBOARD_CONTROLLER,
MAV_TYPE_VTOL_DUOROTOR,
MAV_TYPE_VTOL_QUADROTOR,
MAV_TYPE_VTOL_RESERVED1,
MAV_TYPE_VTOL_RESERVED2,
MAV_TYPE_VTOL_RESERVED3,
MAV_TYPE_VTOL_RESERVED4,
MAV_TYPE_VTOL_RESERVED5,
MAV_TYPE_GIMBAL,
};
Q_UNUSED(mavTypes); // Keeping this around for later use
for (size_t i=0; i<cMavTypes; i++) {
Q_ASSERT(mavTypeInfo[i].type == mavTypes[i]);
}
#endif
} }
QString AirframeComponent::name(void) const QString AirframeComponent::name(void) const
......
...@@ -57,7 +57,9 @@ AirframeComponentController::AirframeComponentController(void) : ...@@ -57,7 +57,9 @@ AirframeComponentController::AirframeComponentController(void) :
Q_CHECK_PTR(pInfo); Q_CHECK_PTR(pInfo);
if (_autostartId == pInfo->autostartId) { if (_autostartId == pInfo->autostartId) {
Q_ASSERT(!autostartFound); if (autostartFound) {
qWarning() << "AirframeComponentController::AirframeComponentController duplicate ids found:" << _autostartId;
}
autostartFound = true; autostartFound = true;
_currentAirframeType = pType->name; _currentAirframeType = pType->name;
_currentVehicleName = pInfo->name; _currentVehicleName = pInfo->name;
......
...@@ -30,7 +30,6 @@ PX4AirframeLoader::PX4AirframeLoader(AutoPilotPlugin* autopilot, UASInterface* u ...@@ -30,7 +30,6 @@ PX4AirframeLoader::PX4AirframeLoader(AutoPilotPlugin* autopilot, UASInterface* u
Q_UNUSED(autopilot); Q_UNUSED(autopilot);
Q_UNUSED(uas); Q_UNUSED(uas);
Q_UNUSED(parent); Q_UNUSED(parent);
Q_ASSERT(uas);
} }
QString PX4AirframeLoader::aiframeMetaDataFile(void) QString PX4AirframeLoader::aiframeMetaDataFile(void)
...@@ -51,7 +50,10 @@ void PX4AirframeLoader::loadAirframeMetaData(void) ...@@ -51,7 +50,10 @@ void PX4AirframeLoader::loadAirframeMetaData(void)
qCDebug(PX4AirframeLoaderLog) << "Loading PX4 airframe fact meta data"; qCDebug(PX4AirframeLoaderLog) << "Loading PX4 airframe fact meta data";
Q_ASSERT(AirframeComponentAirframes::get().count() == 0); if (AirframeComponentAirframes::get().count() != 0) {
qCWarning(PX4AirframeLoaderLog) << "Internal error";
return;
}
QString airframeFilename; QString airframeFilename;
...@@ -67,11 +69,12 @@ void PX4AirframeLoader::loadAirframeMetaData(void) ...@@ -67,11 +69,12 @@ void PX4AirframeLoader::loadAirframeMetaData(void)
qCDebug(PX4AirframeLoaderLog) << "Loading meta data file:" << airframeFilename; qCDebug(PX4AirframeLoaderLog) << "Loading meta data file:" << airframeFilename;
QFile xmlFile(airframeFilename); QFile xmlFile(airframeFilename);
Q_ASSERT(xmlFile.exists()); if (!xmlFile.exists()) {
qCWarning(PX4AirframeLoaderLog) << "Internal error";
return;
}
bool success = xmlFile.open(QIODevice::ReadOnly); bool success = xmlFile.open(QIODevice::ReadOnly);
Q_UNUSED(success);
Q_ASSERT(success);
if (!success) { if (!success) {
qCWarning(PX4AirframeLoaderLog) << "Failed opening airframe XML"; qCWarning(PX4AirframeLoaderLog) << "Failed opening airframe XML";
......
...@@ -41,7 +41,10 @@ PX4AutoPilotPlugin::PX4AutoPilotPlugin(Vehicle* vehicle, QObject* parent) ...@@ -41,7 +41,10 @@ PX4AutoPilotPlugin::PX4AutoPilotPlugin(Vehicle* vehicle, QObject* parent)
, _tuningComponent(NULL) , _tuningComponent(NULL)
, _mixersComponent(NULL) , _mixersComponent(NULL)
{ {
Q_ASSERT(vehicle); if (!vehicle) {
qWarning() << "Internal error";
return;
}
_airframeFacts = new PX4AirframeLoader(this, _vehicle->uas(), this); _airframeFacts = new PX4AirframeLoader(this, _vehicle->uas(), this);
Q_CHECK_PTR(_airframeFacts); Q_CHECK_PTR(_airframeFacts);
...@@ -57,68 +60,70 @@ PX4AutoPilotPlugin::~PX4AutoPilotPlugin() ...@@ -57,68 +60,70 @@ PX4AutoPilotPlugin::~PX4AutoPilotPlugin()
const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void) const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void)
{ {
if (_components.count() == 0 && !_incorrectParameterVersion) { if (_components.count() == 0 && !_incorrectParameterVersion) {
Q_ASSERT(_vehicle); if (_vehicle) {
if (_vehicle->parameterManager()->parametersReady()) {
if (_vehicle->parameterManager()->parametersReady()) { _airframeComponent = new AirframeComponent(_vehicle, this);
_airframeComponent = new AirframeComponent(_vehicle, this); _airframeComponent->setupTriggerSignals();
_airframeComponent->setupTriggerSignals(); _components.append(QVariant::fromValue((VehicleComponent*)_airframeComponent));
_components.append(QVariant::fromValue((VehicleComponent*)_airframeComponent));
_radioComponent = new PX4RadioComponent(_vehicle, this);
_radioComponent = new PX4RadioComponent(_vehicle, this); _radioComponent->setupTriggerSignals();
_radioComponent->setupTriggerSignals(); _components.append(QVariant::fromValue((VehicleComponent*)_radioComponent));
_components.append(QVariant::fromValue((VehicleComponent*)_radioComponent));
if (!_vehicle->hilMode()) {
if (!_vehicle->hilMode()) { _sensorsComponent = new SensorsComponent(_vehicle, this);
_sensorsComponent = new SensorsComponent(_vehicle, this); _sensorsComponent->setupTriggerSignals();
_sensorsComponent->setupTriggerSignals(); _components.append(QVariant::fromValue((VehicleComponent*)_sensorsComponent));
_components.append(QVariant::fromValue((VehicleComponent*)_sensorsComponent)); }
}
_flightModesComponent = new FlightModesComponent(_vehicle, this);
_flightModesComponent = new FlightModesComponent(_vehicle, this); _flightModesComponent->setupTriggerSignals();
_flightModesComponent->setupTriggerSignals(); _components.append(QVariant::fromValue((VehicleComponent*)_flightModesComponent));
_components.append(QVariant::fromValue((VehicleComponent*)_flightModesComponent));
_powerComponent = new PowerComponent(_vehicle, this);
_powerComponent = new PowerComponent(_vehicle, this); _powerComponent->setupTriggerSignals();
_powerComponent->setupTriggerSignals(); _components.append(QVariant::fromValue((VehicleComponent*)_powerComponent));
_components.append(QVariant::fromValue((VehicleComponent*)_powerComponent));
#if 0 #if 0
// Coming soon // Coming soon
_motorComponent = new MotorComponent(_vehicle, this); _motorComponent = new MotorComponent(_vehicle, this);
_motorComponent->setupTriggerSignals(); _motorComponent->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_motorComponent)); _components.append(QVariant::fromValue((VehicleComponent*)_motorComponent));
#endif #endif
_safetyComponent = new SafetyComponent(_vehicle, this); _safetyComponent = new SafetyComponent(_vehicle, this);
_safetyComponent->setupTriggerSignals(); _safetyComponent->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_safetyComponent)); _components.append(QVariant::fromValue((VehicleComponent*)_safetyComponent));
_tuningComponent = new PX4TuningComponent(_vehicle, this); _tuningComponent = new PX4TuningComponent(_vehicle, this);
_tuningComponent->setupTriggerSignals(); _tuningComponent->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_tuningComponent)); _components.append(QVariant::fromValue((VehicleComponent*)_tuningComponent));
#if 0 #if 0
// Coming soon // Coming soon
_mixersComponent = new MixersComponent(_vehicle, this); _mixersComponent = new MixersComponent(_vehicle, this);
_mixersComponent->setupTriggerSignals(); _mixersComponent->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_mixersComponent)); _components.append(QVariant::fromValue((VehicleComponent*)_mixersComponent));
#endif #endif
//-- Is there support for cameras? //-- Is there support for cameras?
if(_vehicle->parameterManager()->parameterExists(_vehicle->id(), "TRIG_MODE")) { if(_vehicle->parameterManager()->parameterExists(_vehicle->id(), "TRIG_MODE")) {
_cameraComponent = new CameraComponent(_vehicle, this); _cameraComponent = new CameraComponent(_vehicle, this);
_cameraComponent->setupTriggerSignals(); _cameraComponent->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_cameraComponent)); _components.append(QVariant::fromValue((VehicleComponent*)_cameraComponent));
} }
//-- Is there an ESP8266 Connected? //-- Is there an ESP8266 Connected?
if(_vehicle->parameterManager()->parameterExists(MAV_COMP_ID_UDP_BRIDGE, "SW_VER")) { if(_vehicle->parameterManager()->parameterExists(MAV_COMP_ID_UDP_BRIDGE, "SW_VER")) {
_esp8266Component = new ESP8266Component(_vehicle, this); _esp8266Component = new ESP8266Component(_vehicle, this);
_esp8266Component->setupTriggerSignals(); _esp8266Component->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_esp8266Component)); _components.append(QVariant::fromValue((VehicleComponent*)_esp8266Component));
}
} else {
qWarning() << "Call to vehicleCompenents prior to parametersReady";
} }
} else { } else {
qWarning() << "Call to vehicleCompenents prior to parametersReady"; qWarning() << "Internal error";
} }
} }
......
...@@ -123,7 +123,7 @@ SetupPage { ...@@ -123,7 +123,7 @@ SetupPage {
sourceSize.height: height sourceSize.height: height
mipmap: true mipmap: true
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
source: "/qmlimages/check.png"///qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/LowBatteryLight.svg" : "/qmlimages/LowBattery.svg" source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/LowBatteryLight.svg" : "/qmlimages/LowBattery.svg"
Layout.rowSpan: 3 Layout.rowSpan: 3
Layout.minimumWidth: _imageWidth Layout.minimumWidth: _imageWidth
} }
...@@ -177,7 +177,7 @@ SetupPage { ...@@ -177,7 +177,7 @@ SetupPage {
sourceSize.height: height sourceSize.height: height
mipmap: true mipmap: true
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
//source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/RCLossLight.svg" : "/qmlimages/RCLoss.svg" source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/RCLossLight.svg" : "/qmlimages/RCLoss.svg"
Layout.rowSpan: 3 Layout.rowSpan: 3
Layout.minimumWidth: _imageWidth Layout.minimumWidth: _imageWidth
} }
...@@ -222,7 +222,7 @@ SetupPage { ...@@ -222,7 +222,7 @@ SetupPage {
sourceSize.height: height sourceSize.height: height
mipmap: true mipmap: true
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
//source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/DatalinkLossLight.svg" : "/qmlimages/DatalinkLoss.svg" source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/DatalinkLossLight.svg" : "/qmlimages/DatalinkLoss.svg"
Layout.rowSpan: 3 Layout.rowSpan: 3
Layout.minimumWidth: _imageWidth Layout.minimumWidth: _imageWidth
} }
...@@ -267,7 +267,7 @@ SetupPage { ...@@ -267,7 +267,7 @@ SetupPage {
sourceSize.height: height sourceSize.height: height
mipmap: true mipmap: true
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
//source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/GeoFenceLight.svg" : "/qmlimages/GeoFence.svg" source: qgcPal.globalTheme === qgcPal.Light ? "/qmlimages/GeoFenceLight.svg" : "/qmlimages/GeoFence.svg"
Layout.rowSpan: 3 Layout.rowSpan: 3
Layout.minimumWidth: _imageWidth Layout.minimumWidth: _imageWidth
} }
...@@ -330,7 +330,7 @@ SetupPage { ...@@ -330,7 +330,7 @@ SetupPage {
sourceSize.height: height sourceSize.height: height
mipmap: true mipmap: true
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
//source: controller.vehicle.fixedWing ? "/qmlimages/ReturnToHomeAltitude.svg" : "/qmlimages/ReturnToHomeAltitudeCopter.svg" source: controller.vehicle.fixedWing ? "/qmlimages/ReturnToHomeAltitude.svg" : "/qmlimages/ReturnToHomeAltitudeCopter.svg"
Layout.rowSpan: 7 Layout.rowSpan: 7
Layout.minimumWidth: _imageWidth Layout.minimumWidth: _imageWidth
} }
...@@ -424,7 +424,7 @@ SetupPage { ...@@ -424,7 +424,7 @@ SetupPage {
sourceSize.height: height sourceSize.height: height
mipmap: true mipmap: true
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
//source: controller.vehicle.fixedWing ? "/qmlimages/LandMode.svg" : "/qmlimages/LandModeCopter.svg" source: controller.vehicle.fixedWing ? "/qmlimages/LandMode.svg" : "/qmlimages/LandModeCopter.svg"
Layout.rowSpan: landVelocityLabel.visible ? 2 : 1 Layout.rowSpan: landVelocityLabel.visible ? 2 : 1
Layout.minimumWidth: _imageWidth Layout.minimumWidth: _imageWidth
} }
......
...@@ -73,7 +73,10 @@ bool SensorsComponentController::usingUDPLink(void) ...@@ -73,7 +73,10 @@ bool SensorsComponentController::usingUDPLink(void)
/// Appends the specified text to the status log area in the ui /// Appends the specified text to the status log area in the ui
void SensorsComponentController::_appendStatusLog(const QString& text) void SensorsComponentController::_appendStatusLog(const QString& text)
{ {
Q_ASSERT(_statusLog); if (!_statusLog) {
qWarning() << "Internal error";
return;
}
QVariant returnedValue; QVariant returnedValue;
QVariant varText = text; QVariant varText = text;
...@@ -229,8 +232,11 @@ void SensorsComponentController::_handleUASTextMessage(int uasId, int compId, in ...@@ -229,8 +232,11 @@ void SensorsComponentController::_handleUASTextMessage(int uasId, int compId, in
bool ok; bool ok;
int p = percent.toInt(&ok); int p = percent.toInt(&ok);
if (ok) { if (ok) {
Q_ASSERT(_progressBar); if (_progressBar) {
_progressBar->setProperty("value", (float)(p / 100.0)); _progressBar->setProperty("value", (float)(p / 100.0));
} else {
qWarning() << "Internal error";
}
} }
return; return;
} }
...@@ -324,7 +330,7 @@ void SensorsComponentController::_handleUASTextMessage(int uasId, int compId, in ...@@ -324,7 +330,7 @@ void SensorsComponentController::_handleUASTextMessage(int uasId, int compId, in
_gyroCalInProgress = true; _gyroCalInProgress = true;
_orientationCalDownSideVisible = true; _orientationCalDownSideVisible = true;
} else { } else {
Q_ASSERT(false); qWarning() << "Unknown calibration message type" << text;
} }
emit orientationCalSidesDoneChanged(); emit orientationCalSidesDoneChanged();
emit orientationCalSidesVisibleChanged(); emit orientationCalSidesVisibleChanged();
......
...@@ -303,11 +303,15 @@ void ParameterManager::_parameterUpdate(int vehicleId, int componentId, QString ...@@ -303,11 +303,15 @@ void ParameterManager::_parameterUpdate(int vehicleId, int componentId, QString
_dataMutex.unlock(); _dataMutex.unlock();
Q_ASSERT(_mapParameterName2Variant[componentId].contains(parameterName)); Fact* fact = NULL;
if (_mapParameterName2Variant[componentId].contains(parameterName)) {
Fact* fact = _mapParameterName2Variant[componentId][parameterName].value<Fact*>(); fact = _mapParameterName2Variant[componentId][parameterName].value<Fact*>();
Q_ASSERT(fact); }
fact->_containerSetRawValue(value); if (fact) {
fact->_containerSetRawValue(value);
} else {
qWarning() << "Internal error";
}
if (componentParamsComplete) { if (componentParamsComplete) {
if (componentId == _vehicle->defaultComponentId()) { if (componentId == _vehicle->defaultComponentId()) {
...@@ -352,18 +356,24 @@ void ParameterManager::_parameterUpdate(int vehicleId, int componentId, QString ...@@ -352,18 +356,24 @@ void ParameterManager::_parameterUpdate(int vehicleId, int componentId, QString
void ParameterManager::_valueUpdated(const QVariant& value) void ParameterManager::_valueUpdated(const QVariant& value)
{ {
Fact* fact = qobject_cast<Fact*>(sender()); Fact* fact = qobject_cast<Fact*>(sender());
Q_ASSERT(fact); if (!fact) {
qWarning() << "Internal error";
return;
}
int componentId = fact->componentId(); int componentId = fact->componentId();
QString name = fact->name(); QString name = fact->name();
_dataMutex.lock(); _dataMutex.lock();
Q_ASSERT(_waitingWriteParamNameMap.contains(componentId)); if (_waitingWriteParamNameMap.contains(componentId)) {
_waitingWriteParamNameMap[componentId].remove(name); // Remove any old entry _waitingWriteParamNameMap[componentId].remove(name); // Remove any old entry
_waitingWriteParamNameMap[componentId][name] = 0; // Add new entry and set retry count _waitingWriteParamNameMap[componentId][name] = 0; // Add new entry and set retry count
_waitingParamTimeoutTimer.start(); _waitingParamTimeoutTimer.start();
_saveRequired = true; _saveRequired = true;
} else {
qWarning() << "Internal error";
}
_dataMutex.unlock(); _dataMutex.unlock();
...@@ -397,7 +407,6 @@ void ParameterManager::refreshAllParameters(uint8_t componentId) ...@@ -397,7 +407,6 @@ void ParameterManager::refreshAllParameters(uint8_t componentId)
_dataMutex.unlock(); _dataMutex.unlock();
MAVLinkProtocol* mavlink = qgcApp()->toolbox()->mavlinkProtocol(); MAVLinkProtocol* mavlink = qgcApp()->toolbox()->mavlinkProtocol();
Q_ASSERT(mavlink);
mavlink_message_t msg; mavlink_message_t msg;
mavlink_msg_param_request_list_pack_chan(mavlink->getSystemId(), mavlink_msg_param_request_list_pack_chan(mavlink->getSystemId(),
...@@ -432,8 +441,6 @@ void ParameterManager::refreshParameter(int componentId, const QString& name) ...@@ -432,8 +441,6 @@ void ParameterManager::refreshParameter(int componentId, const QString& name)
_dataMutex.lock(); _dataMutex.lock();
Q_ASSERT(_waitingReadParamNameMap.contains(componentId));
if (_waitingReadParamNameMap.contains(componentId)) { if (_waitingReadParamNameMap.contains(componentId)) {
QString mappedParamName = _remapParamNameToVersion(name); QString mappedParamName = _remapParamNameToVersion(name);
...@@ -441,6 +448,8 @@ void ParameterManager::refreshParameter(int componentId, const QString& name) ...@@ -441,6 +448,8 @@ void ParameterManager::refreshParameter(int componentId, const QString& name)
_waitingReadParamNameMap[componentId][mappedParamName] = 0; // Add new wait entry and update retry count _waitingReadParamNameMap[componentId][mappedParamName] = 0; // Add new wait entry and update retry count
qCDebug(ParameterManagerLog) << _logVehiclePrefix(componentId) << "restarting _waitingParamTimeout"; qCDebug(ParameterManagerLog) << _logVehiclePrefix(componentId) << "restarting _waitingParamTimeout";
_waitingParamTimeoutTimer.start(); _waitingParamTimeoutTimer.start();
} else {
qWarning() << "Internal error";
} }
_dataMutex.unlock(); _dataMutex.unlock();
......
...@@ -245,9 +245,9 @@ FlightMap { ...@@ -245,9 +245,9 @@ FlightMap {
} }
} }
// Camera points // Camera trigger points
MapItemView { MapItemView {
model: _missionController.cameraPoints model: _activeVehicle ? _activeVehicle.cameraTriggerPoints : 0
delegate: CameraTriggerIndicator { delegate: CameraTriggerIndicator {
coordinate: object.coordinate coordinate: object.coordinate
......
...@@ -28,8 +28,6 @@ GPSManager::~GPSManager() ...@@ -28,8 +28,6 @@ GPSManager::~GPSManager()
void GPSManager::connectGPS(const QString& device) void GPSManager::connectGPS(const QString& device)
{ {
Q_ASSERT(_toolbox);
RTKSettings* rtkSettings = qgcApp()->toolbox()->settingsManager()->rtkSettings(); RTKSettings* rtkSettings = qgcApp()->toolbox()->settingsManager()->rtkSettings();
cleanup(); cleanup();
......
...@@ -1384,7 +1384,6 @@ void MissionController::managerVehicleChanged(Vehicle* managerVehicle) ...@@ -1384,7 +1384,6 @@ void MissionController::managerVehicleChanged(Vehicle* managerVehicle)
connect(_missionManager, &MissionManager::currentIndexChanged, this, &MissionController::_currentMissionIndexChanged); connect(_missionManager, &MissionManager::currentIndexChanged, this, &MissionController::_currentMissionIndexChanged);
connect(_missionManager, &MissionManager::lastCurrentIndexChanged, this, &MissionController::resumeMissionIndexChanged); connect(_missionManager, &MissionManager::lastCurrentIndexChanged, this, &MissionController::resumeMissionIndexChanged);
connect(_missionManager, &MissionManager::resumeMissionReady, this, &MissionController::resumeMissionReady); connect(_missionManager, &MissionManager::resumeMissionReady, this, &MissionController::resumeMissionReady);
connect(_missionManager, &MissionManager::cameraFeedback, this, &MissionController::_cameraFeedback);
connect(_managerVehicle, &Vehicle::homePositionChanged, this, &MissionController::_managerVehicleHomePositionChanged); connect(_managerVehicle, &Vehicle::homePositionChanged, this, &MissionController::_managerVehicleHomePositionChanged);
connect(_managerVehicle, &Vehicle::defaultCruiseSpeedChanged, this, &MissionController::_recalcMissionFlightStatus); connect(_managerVehicle, &Vehicle::defaultCruiseSpeedChanged, this, &MissionController::_recalcMissionFlightStatus);
connect(_managerVehicle, &Vehicle::defaultHoverSpeedChanged, this, &MissionController::_recalcMissionFlightStatus); connect(_managerVehicle, &Vehicle::defaultHoverSpeedChanged, this, &MissionController::_recalcMissionFlightStatus);
...@@ -1664,19 +1663,6 @@ void MissionController::applyDefaultMissionAltitude(void) ...@@ -1664,19 +1663,6 @@ void MissionController::applyDefaultMissionAltitude(void)
} }
} }
void MissionController::_cameraFeedback(QGeoCoordinate imageCoordinate, int index)
{
Q_UNUSED(index);
if (!_editMode) {
_cameraPoints.append(new QGCQGeoCoordinate(imageCoordinate, this));
}
}
void MissionController::clearCameraPoints(void)
{
_cameraPoints.clearAndDeleteContents();
}
void MissionController::_progressPctChanged(double progressPct) void MissionController::_progressPctChanged(double progressPct)
{ {
if (!qFuzzyCompare(progressPct, _progressPct)) { if (!qFuzzyCompare(progressPct, _progressPct)) {
......
...@@ -64,7 +64,6 @@ public: ...@@ -64,7 +64,6 @@ public:
Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged)
Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged) Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged)
Q_PROPERTY(QmlObjectListModel* cameraPoints READ cameraPoints CONSTANT)
Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged) Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged)
Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged) Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged)
...@@ -106,8 +105,6 @@ public: ...@@ -106,8 +105,6 @@ public:
/// Sends the mission items to the specified vehicle /// Sends the mission items to the specified vehicle
static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems); static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems);
Q_INVOKABLE void clearCameraPoints(void);
bool loadJsonFile(QFile& file, QString& errorString); bool loadJsonFile(QFile& file, QString& errorString);
bool loadTextFile(QFile& file, QString& errorString); bool loadTextFile(QFile& file, QString& errorString);
...@@ -130,7 +127,6 @@ public: ...@@ -130,7 +127,6 @@ public:
QmlObjectListModel* visualItems (void) { return _visualItems; } QmlObjectListModel* visualItems (void) { return _visualItems; }
QmlObjectListModel* waypointLines (void) { return &_waypointLines; } QmlObjectListModel* waypointLines (void) { return &_waypointLines; }
QmlObjectListModel* cameraPoints (void) { return &_cameraPoints; }
QStringList complexMissionItemNames (void) const; QStringList complexMissionItemNames (void) const;
QGeoCoordinate plannedHomePosition (void) const; QGeoCoordinate plannedHomePosition (void) const;
double progressPct (void) const { return _progressPct; } double progressPct (void) const { return _progressPct; }
...@@ -178,7 +174,6 @@ private slots: ...@@ -178,7 +174,6 @@ private slots:
void _recalcWaypointLines(void); void _recalcWaypointLines(void);
void _recalcMissionFlightStatus(void); void _recalcMissionFlightStatus(void);
void _updateContainsItems(void); void _updateContainsItems(void);
void _cameraFeedback(QGeoCoordinate imageCoordinate, int index);
void _progressPctChanged(double progressPct); void _progressPctChanged(double progressPct);
void _visualItemsDirtyChanged(bool dirty); void _visualItemsDirtyChanged(bool dirty);
void _managerSendComplete(void); void _managerSendComplete(void);
...@@ -220,7 +215,6 @@ private: ...@@ -220,7 +215,6 @@ private:
QmlObjectListModel* _visualItems; QmlObjectListModel* _visualItems;
MissionSettingsItem* _settingsItem; MissionSettingsItem* _settingsItem;
QmlObjectListModel _waypointLines; QmlObjectListModel _waypointLines;
QmlObjectListModel _cameraPoints;
CoordVectHashTable _linesTable; CoordVectHashTable _linesTable;
bool _firstItemsFromVehicle; bool _firstItemsFromVehicle;
bool _itemsRequested; bool _itemsRequested;
......
...@@ -680,31 +680,6 @@ void MissionManager::_handleMissionAck(const mavlink_message_t& message) ...@@ -680,31 +680,6 @@ void MissionManager::_handleMissionAck(const mavlink_message_t& message)
break; break;
} }
} }
void MissionManager::_handleCameraFeedback(const mavlink_message_t& message)
{
mavlink_camera_feedback_t feedback;
mavlink_msg_camera_feedback_decode(&message, &feedback);
QGeoCoordinate imageCoordinate((double)feedback.lat / qPow(10.0, 7.0), (double)feedback.lng / qPow(10.0, 7.0), feedback.alt_msl);
qCDebug(MissionManagerLog) << "_handleCameraFeedback coord:index" << imageCoordinate << feedback.img_idx;
emit cameraFeedback(imageCoordinate, feedback.img_idx);
}
void MissionManager::_handleCameraImageCaptured(const mavlink_message_t& message)
{
mavlink_camera_image_captured_t feedback;
mavlink_msg_camera_image_captured_decode(&message, &feedback);
QGeoCoordinate imageCoordinate((double)feedback.lat / qPow(10.0, 7.0), (double)feedback.lon / qPow(10.0, 7.0), feedback.alt);
qCDebug(MissionManagerLog) << "_handleCameraFeedback coord:index" << imageCoordinate << feedback.image_index << feedback.capture_result;
if (feedback.capture_result == 1) {
emit cameraFeedback(imageCoordinate, feedback.image_index);
}
}
/// Called when a new mavlink message for out vehicle is received /// Called when a new mavlink message for out vehicle is received
void MissionManager::_mavlinkMessageReceived(const mavlink_message_t& message) void MissionManager::_mavlinkMessageReceived(const mavlink_message_t& message)
{ {
...@@ -740,14 +715,6 @@ void MissionManager::_mavlinkMessageReceived(const mavlink_message_t& message) ...@@ -740,14 +715,6 @@ void MissionManager::_mavlinkMessageReceived(const mavlink_message_t& message)
case MAVLINK_MSG_ID_MISSION_CURRENT: case MAVLINK_MSG_ID_MISSION_CURRENT:
_handleMissionCurrent(message); _handleMissionCurrent(message);
break; break;
case MAVLINK_MSG_ID_CAMERA_FEEDBACK:
_handleCameraFeedback(message);
break;
case MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED:
_handleCameraImageCaptured(message);
break;
} }
} }
......
...@@ -88,7 +88,6 @@ signals: ...@@ -88,7 +88,6 @@ signals:
void currentIndexChanged(int currentIndex); void currentIndexChanged(int currentIndex);
void lastCurrentIndexChanged(int lastCurrentIndex); void lastCurrentIndexChanged(int lastCurrentIndex);
void resumeMissionReady(void); void resumeMissionReady(void);
void cameraFeedback(QGeoCoordinate imageCoordinate, int index);
void progressPct(double progressPercentPct); void progressPct(double progressPercentPct);
void removeAllComplete (void); void removeAllComplete (void);
void sendComplete (void); void sendComplete (void);
...@@ -122,8 +121,6 @@ private: ...@@ -122,8 +121,6 @@ private:
void _handleMissionRequest(const mavlink_message_t& message, bool missionItemInt); void _handleMissionRequest(const mavlink_message_t& message, bool missionItemInt);
void _handleMissionAck(const mavlink_message_t& message); void _handleMissionAck(const mavlink_message_t& message);
void _handleMissionCurrent(const mavlink_message_t& message); void _handleMissionCurrent(const mavlink_message_t& message);
void _handleCameraFeedback(const mavlink_message_t& message);
void _handleCameraImageCaptured(const mavlink_message_t& message);
void _requestNextMissionItem(void); void _requestNextMissionItem(void);
void _clearMissionItems(void); void _clearMissionItems(void);
void _sendError(ErrorCode_t errorCode, const QString& errorMsg); void _sendError(ErrorCode_t errorCode, const QString& errorMsg);
......
...@@ -231,7 +231,8 @@ QGCView { ...@@ -231,7 +231,8 @@ QGCView {
id: fileDialog id: fileDialog
qgcView: _qgcView qgcView: _qgcView
folder: QGroundControl.settingsManager.appSettings.missionSavePath folder: QGroundControl.settingsManager.appSettings.missionSavePath
fileExtension: masterController.fileExtension fileExtension: QGroundControl.settingsManager.appSettings.planFileExtension
fileExtension2: QGroundControl.settingsManager.appSettings.missionFileExtension
onAcceptedForSave: { onAcceptedForSave: {
masterController.saveToFile(file) masterController.saveToFile(file)
...@@ -653,7 +654,7 @@ QGCView { ...@@ -653,7 +654,7 @@ QGCView {
id: syncLoadFromFileOverwrite id: syncLoadFromFileOverwrite
QGCViewMessage { QGCViewMessage {
id: syncLoadFromVehicleCheck id: syncLoadFromVehicleCheck
message: qsTr("You have unsaved/unsent changes. Loading a from a file will lose these changes. Are you sure you want to load from a file?") message: qsTr("You have unsaved/unsent changes. Loading from a file will lose these changes. Are you sure you want to load from a file?")
function accept() { function accept() {
hideDialog() hideDialog()
masterController.loadFromSelectedFile() masterController.loadFromSelectedFile()
......
...@@ -176,7 +176,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) ...@@ -176,7 +176,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
, _toolbox(NULL) , _toolbox(NULL)
, _bluetoothAvailable(false) , _bluetoothAvailable(false)
{ {
Q_ASSERT(_app == NULL);
_app = this; _app = this;
// This prevents usage of QQuickWidget to fail since it doesn't support native widget siblings // This prevents usage of QQuickWidget to fail since it doesn't support native widget siblings
...@@ -193,11 +192,11 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) ...@@ -193,11 +192,11 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
if (getuid() == 0) { if (getuid() == 0) {
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setInformativeText(tr("You are running %1 as root. " msgBox.setInformativeText(tr("You are running %1 as root. "
"You should not do this since it will cause other issues with %1. " "You should not do this since it will cause other issues with %1. "
"%1 will now exit. " "%1 will now exit. "
"If you are having serial port issues on Ubuntu, execute the following commands to fix most issues:\n" "If you are having serial port issues on Ubuntu, execute the following commands to fix most issues:\n"
"sudo usermod -a -G dialout $USER\n" "sudo usermod -a -G dialout $USER\n"
"sudo apt-get remove modemmanager").arg(qgcApp()->applicationName())); "sudo apt-get remove modemmanager").arg(qgcApp()->applicationName()));
msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok);
msgBox.exec(); msgBox.exec();
...@@ -473,7 +472,6 @@ void QGCApplication::clearDeleteAllSettingsNextBoot(void) ...@@ -473,7 +472,6 @@ void QGCApplication::clearDeleteAllSettingsNextBoot(void)
/// @brief Returns the QGCApplication object singleton. /// @brief Returns the QGCApplication object singleton.
QGCApplication* qgcApp(void) QGCApplication* qgcApp(void)
{ {
Q_ASSERT(QGCApplication::_app);
return QGCApplication::_app; return QGCApplication::_app;
} }
...@@ -612,19 +610,19 @@ void QGCApplication::reportMissingParameter(int componentId, const QString& name ...@@ -612,19 +610,19 @@ void QGCApplication::reportMissingParameter(int componentId, const QString& name
/// Called when the delay timer fires to show the missing parameters warning /// Called when the delay timer fires to show the missing parameters warning
void QGCApplication::_missingParamsDisplay(void) void QGCApplication::_missingParamsDisplay(void)
{ {
Q_ASSERT(_missingParams.count()); if (_missingParams.count()) {
QString params;
QString params; foreach (const QString &name, _missingParams) {
foreach (const QString &name, _missingParams) { if (params.isEmpty()) {
if (params.isEmpty()) { params += name;
params += name; } else {
} else { params += QString(", %1").arg(name);
params += QString(", %1").arg(name); }
} }
} _missingParams.clear();
_missingParams.clear();
showMessage(QString("Parameters are missing from firmware. You may be running a version of firmware QGC does not work correctly with or your firmware has a bug in it. Missing params: %1").arg(params)); showMessage(QString("Parameters are missing from firmware. You may be running a version of firmware QGC does not work correctly with or your firmware has a bug in it. Missing params: %1").arg(params));
}
} }
QObject* QGCApplication::_rootQmlObject() QObject* QGCApplication::_rootQmlObject()
......
...@@ -110,19 +110,24 @@ void QGCFileDownload::_downloadFinished(void) ...@@ -110,19 +110,24 @@ void QGCFileDownload::_downloadFinished(void)
// Download file location is in user attribute // Download file location is in user attribute
QString downloadFilename = reply->request().attribute(QNetworkRequest::User).toString(); QString downloadFilename = reply->request().attribute(QNetworkRequest::User).toString();
Q_ASSERT(!downloadFilename.isEmpty());
// Store downloaded file in download location
QFile file(downloadFilename);
if (!file.open(QIODevice::WriteOnly)) {
emit error(QString("Could not save downloaded file to %1. Error: %2").arg(downloadFilename).arg(file.errorString()));
return;
}
file.write(reply->readAll());
file.close();
emit downloadFinished(_originalRemoteFile, downloadFilename); if (!downloadFilename.isEmpty()) {
// Store downloaded file in download location
QFile file(downloadFilename);
if (!file.open(QIODevice::WriteOnly)) {
emit error(QString("Could not save downloaded file to %1. Error: %2").arg(downloadFilename).arg(file.errorString()));
return;
}
file.write(reply->readAll());
file.close();
emit downloadFinished(_originalRemoteFile, downloadFilename);
} else {
QString errorMsg = "Internal error";
qWarning() << errorMsg;
emit error(errorMsg);
}
} }
/// @brief Called when an error occurs during download /// @brief Called when an error occurs during download
......
...@@ -39,8 +39,9 @@ QGCPalette::QGCPalette(QObject* parent) : ...@@ -39,8 +39,9 @@ QGCPalette::QGCPalette(QObject* parent) :
QGCPalette::~QGCPalette() QGCPalette::~QGCPalette()
{ {
bool fSuccess = _paletteObjects.removeOne(this); bool fSuccess = _paletteObjects.removeOne(this);
Q_ASSERT(fSuccess); if (!fSuccess) {
Q_UNUSED(fSuccess); qWarning() << "Internal error";
}
} }
void QGCPalette::_buildMap(void) void QGCPalette::_buildMap(void)
......
...@@ -126,7 +126,9 @@ QString QGCQFileDialog::getSaveFileName( ...@@ -126,7 +126,9 @@ QString QGCQFileDialog::getSaveFileName(
defaultSuffixCopy = _getFirstExtensionInFilter(filter); defaultSuffixCopy = _getFirstExtensionInFilter(filter);
} }
//-- If this is set to strict, we have to have a default extension //-- If this is set to strict, we have to have a default extension
Q_ASSERT(defaultSuffixCopy.isEmpty() == false); if (defaultSuffixCopy.isEmpty()) {
qWarning() << "Internal error";
}
//-- Forcefully append our desired extension //-- Forcefully append our desired extension
result += "."; result += ".";
result += defaultSuffixCopy; result += defaultSuffixCopy;
...@@ -197,9 +199,13 @@ void QGCQFileDialog::_validate(Options& options) ...@@ -197,9 +199,13 @@ void QGCQFileDialog::_validate(Options& options)
Q_UNUSED(options) Q_UNUSED(options)
// You can't use QGCQFileDialog if QGCApplication is not created yet. // You can't use QGCQFileDialog if QGCApplication is not created yet.
Q_ASSERT(qgcApp()); if (!qgcApp()) {
qWarning() << "Internal error";
return;
}
Q_ASSERT_X(QThread::currentThread() == qgcApp()->thread(), "Threading issue", "QGCQFileDialog can only be called from main thread"); if (QThread::currentThread() != qgcApp()->thread()) {
if (MainWindow::instance()) { qWarning() << "Threading issue: QGCQFileDialog can only be called from main thread";
return;
} }
} }
...@@ -89,8 +89,9 @@ QStringList ParameterEditorController::searchParametersForComponent(int componen ...@@ -89,8 +89,9 @@ QStringList ParameterEditorController::searchParametersForComponent(int componen
void ParameterEditorController::clearRCToParam(void) void ParameterEditorController::clearRCToParam(void)
{ {
Q_ASSERT(_uas); if (_uas) {
_uas->unsetRCToParameterMap(); _uas->unsetRCToParameterMap();
}
} }
void ParameterEditorController::saveToFile(const QString& filename) void ParameterEditorController::saveToFile(const QString& filename)
...@@ -147,9 +148,10 @@ void ParameterEditorController::setRCToParam(const QString& paramName) ...@@ -147,9 +148,10 @@ void ParameterEditorController::setRCToParam(const QString& paramName)
#ifdef __mobile__ #ifdef __mobile__
Q_UNUSED(paramName) Q_UNUSED(paramName)
#else #else
Q_ASSERT(_uas); if (_uas) {
QGCMapRCToParamDialog * d = new QGCMapRCToParamDialog(paramName, _uas, qgcApp()->toolbox()->multiVehicleManager(), MainWindow::instance()); QGCMapRCToParamDialog * d = new QGCMapRCToParamDialog(paramName, _uas, qgcApp()->toolbox()->multiVehicleManager(), MainWindow::instance());
d->exec(); d->exec();
}
#endif #endif
} }
......
...@@ -11,7 +11,7 @@ CheckBox { ...@@ -11,7 +11,7 @@ CheckBox {
style: CheckBoxStyle { style: CheckBoxStyle {
label: Item { label: Item {
implicitWidth: text.implicitWidth + 2 implicitWidth: text.implicitWidth + 2
implicitHeight: text.implicitHeight implicitHeight: ScreenTools.implicitCheckBoxHeight
baselineOffset: text.baselineOffset baselineOffset: text.baselineOffset
Rectangle { Rectangle {
...@@ -39,7 +39,7 @@ CheckBox { ...@@ -39,7 +39,7 @@ CheckBox {
} // label } // label
indicator: Item { indicator: Item {
implicitWidth: ScreenTools.implicitCheckBoxWidth implicitWidth: ScreenTools.checkBoxIndicatorSize
implicitHeight: implicitWidth implicitHeight: implicitWidth
Rectangle { Rectangle {
......
...@@ -18,6 +18,7 @@ Item { ...@@ -18,6 +18,7 @@ Item {
property string folder property string folder
property var nameFilters property var nameFilters
property string fileExtension property string fileExtension
property string fileExtension2
property string title property string title
property bool selectExisting property bool selectExisting
property bool selectFolder property bool selectFolder
...@@ -90,7 +91,7 @@ Item { ...@@ -90,7 +91,7 @@ Item {
spacing: ScreenTools.defaultFontPixelHeight / 2 spacing: ScreenTools.defaultFontPixelHeight / 2
Repeater { Repeater {
id: fileList; id: fileList
model: controller.getFiles(folder, fileExtension) model: controller.getFiles(folder, fileExtension)
QGCButton { QGCButton {
...@@ -105,9 +106,25 @@ Item { ...@@ -105,9 +106,25 @@ Item {
} }
} }
Repeater {
id: fileList2
model: fileExtension2 == "" ? [ ] : controller.getFiles(folder, fileExtension2)
QGCButton {
anchors.left: parent.left
anchors.right: parent.right
text: modelData
onClicked: {
hideDialog()
_root.acceptedForLoad(controller.fullyQualifiedFilename(folder, modelData, fileExtension2))
}
}
}
QGCLabel { QGCLabel {
text: qsTr("No files") text: qsTr("No files")
visible: fileList.model.length == 0 visible: fileList.model.length == 0 && fileList2.model.length == 0
} }
} }
} }
......
...@@ -15,7 +15,7 @@ RadioButton { ...@@ -15,7 +15,7 @@ RadioButton {
style: RadioButtonStyle { style: RadioButtonStyle {
label: Item { label: Item {
implicitWidth: text.implicitWidth + ScreenTools.defaultFontPixelWidth * 0.25 implicitWidth: text.implicitWidth + ScreenTools.defaultFontPixelWidth * 0.25
implicitHeight: text.implicitHeight implicitHeight: ScreenTools.implicitRadioButtonHeight
baselineOffset: text.y + text.baselineOffset baselineOffset: text.y + text.baselineOffset
Rectangle { Rectangle {
...@@ -43,5 +43,23 @@ RadioButton { ...@@ -43,5 +43,23 @@ RadioButton {
anchors.centerIn: parent anchors.centerIn: parent
} }
} }
indicator: Rectangle {
width: ScreenTools.radioButtonIndicatorSize
height: width
border.color: qgcPal.text
antialiasing: true
radius: height / 2
Rectangle {
anchors.centerIn: parent
width: Math.round(parent.width * 0.5)
height: width
antialiasing: true
radius: height/2
color: qgcPal.text
opacity: control.checked ? (control.enabled ? 1 : 0.5) : 0
}
}
} }
} }
...@@ -64,13 +64,16 @@ Item { ...@@ -64,13 +64,16 @@ Item {
property real minTouchPixels: 0 ///< Minimum touch size in pixels property real minTouchPixels: 0 ///< Minimum touch size in pixels
// The implicit heights/widths for our custom control set // The implicit heights/widths for our custom control set
property real implicitButtonWidth: Math.round(defaultFontPixelWidth * (isMobile ? 7.0 : 5.0)) property real implicitButtonWidth: Math.round(defaultFontPixelWidth * (isMobile ? 7.0 : 5.0))
property real implicitButtonHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.6)) property real implicitButtonHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.6))
property real implicitCheckBoxWidth: Math.round(defaultFontPixelHeight * (isMobile ? 1.5 : 1.0)) property real implicitCheckBoxHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.0))
property real implicitTextFieldHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.6)) property real implicitRadioButtonHeight: implicitCheckBoxHeight
property real implicitComboBoxHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.6)) property real implicitTextFieldHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.6))
property real implicitComboBoxWidth: Math.round(defaultFontPixelWidth * (isMobile ? 7.0 : 5.0)) property real implicitComboBoxHeight: Math.round(defaultFontPixelHeight * (isMobile ? 2.0 : 1.6))
property real implicitSliderHeight: isMobile ? Math.max(defaultFontPixelHeight, minTouchPixels) : defaultFontPixelHeight property real implicitComboBoxWidth: Math.round(defaultFontPixelWidth * (isMobile ? 7.0 : 5.0))
property real implicitSliderHeight: isMobile ? Math.max(defaultFontPixelHeight, minTouchPixels) : defaultFontPixelHeight
property real checkBoxIndicatorSize: Math.round(defaultFontPixelHeight * (isMobile ? 1.5 : 1.0))
property real radioButtonIndicatorSize: checkBoxIndicatorSize
readonly property string normalFontFamily: "opensans" readonly property string normalFontFamily: "opensans"
readonly property string demiboldFontFamily: "opensans-demibold" readonly property string demiboldFontFamily: "opensans-demibold"
......
...@@ -116,13 +116,6 @@ ...@@ -116,13 +116,6 @@
"type": "bool", "type": "bool",
"defaultValue": false "defaultValue": false
}, },
{
"name": "AutomaticMissionUpload",
"shortDescription": "Automatic mission upload",
"longDescription": "Automatically upload mission to vehicle after changes",
"type": "bool",
"defaultValue": true
},
{ {
"name": "SavePath", "name": "SavePath",
"shortDescription": "Application save directory", "shortDescription": "Application save directory",
......
...@@ -31,7 +31,6 @@ const char* AppSettings::indoorPaletteName = "StyleIs ...@@ -31,7 +31,6 @@ const char* AppSettings::indoorPaletteName = "StyleIs
const char* AppSettings::showLargeCompassName = "ShowLargeCompass"; const char* AppSettings::showLargeCompassName = "ShowLargeCompass";
const char* AppSettings::savePathName = "SavePath"; const char* AppSettings::savePathName = "SavePath";
const char* AppSettings::autoLoadMissionsName = "AutoLoadMissions"; const char* AppSettings::autoLoadMissionsName = "AutoLoadMissions";
const char* AppSettings::automaticMissionUploadName = "AutomaticMissionUpload";
const char* AppSettings::parameterFileExtension = "params"; const char* AppSettings::parameterFileExtension = "params";
const char* AppSettings::planFileExtension = "plan"; const char* AppSettings::planFileExtension = "plan";
...@@ -62,7 +61,6 @@ AppSettings::AppSettings(QObject* parent) ...@@ -62,7 +61,6 @@ AppSettings::AppSettings(QObject* parent)
, _showLargeCompassFact(NULL) , _showLargeCompassFact(NULL)
, _savePathFact(NULL) , _savePathFact(NULL)
, _autoLoadMissionsFact(NULL) , _autoLoadMissionsFact(NULL)
, _automaticMissionUpload(NULL)
{ {
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
qmlRegisterUncreatableType<AppSettings>("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only"); qmlRegisterUncreatableType<AppSettings>("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only");
...@@ -280,15 +278,6 @@ Fact* AppSettings::autoLoadMissions(void) ...@@ -280,15 +278,6 @@ Fact* AppSettings::autoLoadMissions(void)
return _autoLoadMissionsFact; return _autoLoadMissionsFact;
} }
Fact* AppSettings::automaticMissionUpload(void)
{
if (!_automaticMissionUpload) {
_automaticMissionUpload = _createSettingsFact(automaticMissionUploadName);
}
return _automaticMissionUpload;
}
MAV_AUTOPILOT AppSettings::offlineEditingFirmwareTypeFromFirmwareType(MAV_AUTOPILOT firmwareType) MAV_AUTOPILOT AppSettings::offlineEditingFirmwareTypeFromFirmwareType(MAV_AUTOPILOT firmwareType)
{ {
if (firmwareType != MAV_AUTOPILOT_PX4 && firmwareType != MAV_AUTOPILOT_ARDUPILOTMEGA) { if (firmwareType != MAV_AUTOPILOT_PX4 && firmwareType != MAV_AUTOPILOT_ARDUPILOTMEGA) {
......
...@@ -35,7 +35,6 @@ public: ...@@ -35,7 +35,6 @@ public:
Q_PROPERTY(Fact* showLargeCompass READ showLargeCompass CONSTANT) Q_PROPERTY(Fact* showLargeCompass READ showLargeCompass CONSTANT)
Q_PROPERTY(Fact* savePath READ savePath CONSTANT) Q_PROPERTY(Fact* savePath READ savePath CONSTANT)
Q_PROPERTY(Fact* autoLoadMissions READ autoLoadMissions CONSTANT) Q_PROPERTY(Fact* autoLoadMissions READ autoLoadMissions CONSTANT)
Q_PROPERTY(Fact* automaticMissionUpload READ automaticMissionUpload CONSTANT)
Q_PROPERTY(QString missionSavePath READ missionSavePath NOTIFY savePathsChanged) Q_PROPERTY(QString missionSavePath READ missionSavePath NOTIFY savePathsChanged)
Q_PROPERTY(QString parameterSavePath READ parameterSavePath NOTIFY savePathsChanged) Q_PROPERTY(QString parameterSavePath READ parameterSavePath NOTIFY savePathsChanged)
...@@ -62,7 +61,6 @@ public: ...@@ -62,7 +61,6 @@ public:
Fact* showLargeCompass (void); Fact* showLargeCompass (void);
Fact* savePath (void); Fact* savePath (void);
Fact* autoLoadMissions (void); Fact* autoLoadMissions (void);
Fact* automaticMissionUpload (void);
QString missionSavePath (void); QString missionSavePath (void);
QString parameterSavePath (void); QString parameterSavePath (void);
...@@ -88,7 +86,6 @@ public: ...@@ -88,7 +86,6 @@ public:
static const char* showLargeCompassName; static const char* showLargeCompassName;
static const char* savePathName; static const char* savePathName;
static const char* autoLoadMissionsName; static const char* autoLoadMissionsName;
static const char* automaticMissionUploadName;
// Application wide file extensions // Application wide file extensions
static const char* parameterFileExtension; static const char* parameterFileExtension;
...@@ -127,7 +124,6 @@ private: ...@@ -127,7 +124,6 @@ private:
SettingsFact* _showLargeCompassFact; SettingsFact* _showLargeCompassFact;
SettingsFact* _savePathFact; SettingsFact* _savePathFact;
SettingsFact* _autoLoadMissionsFact; SettingsFact* _autoLoadMissionsFact;
SettingsFact* _automaticMissionUpload;
}; };
#endif #endif
...@@ -150,10 +150,10 @@ bool ...@@ -150,10 +150,10 @@ bool
MAVLinkLogProcessor::create(MAVLinkLogManager* manager, const QString path, uint8_t id) MAVLinkLogProcessor::create(MAVLinkLogManager* manager, const QString path, uint8_t id)
{ {
_fileName.sprintf("%s/%03d-%s%s", _fileName.sprintf("%s/%03d-%s%s",
path.toLatin1().data(), path.toLatin1().data(),
id, id,
QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz").toLatin1().data(), QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz").toLatin1().data(),
kUlogExtension); kUlogExtension);
_fd = fopen(_fileName.toLatin1().data(), "wb"); _fd = fopen(_fileName.toLatin1().data(), "wb");
if(_fd) { if(_fd) {
_record = new MAVLinkLogFiles(manager, _fileName, true); _record = new MAVLinkLogFiles(manager, _fileName, true);
...@@ -498,17 +498,20 @@ MAVLinkLogManager::uploadLog() ...@@ -498,17 +498,20 @@ MAVLinkLogManager::uploadLog()
} }
for(int i = 0; i < _logFiles.count(); i++) { for(int i = 0; i < _logFiles.count(); i++) {
_currentLogfile = qobject_cast<MAVLinkLogFiles*>(_logFiles.get(i)); _currentLogfile = qobject_cast<MAVLinkLogFiles*>(_logFiles.get(i));
Q_ASSERT(_currentLogfile); if (_currentLogfile) {
if(_currentLogfile->selected()) { if(_currentLogfile->selected()) {
_currentLogfile->setSelected(false); _currentLogfile->setSelected(false);
if(!_currentLogfile->uploaded() && !_emailAddress.isEmpty() && !_uploadURL.isEmpty()) { if(!_currentLogfile->uploaded() && !_emailAddress.isEmpty() && !_uploadURL.isEmpty()) {
_currentLogfile->setUploading(true); _currentLogfile->setUploading(true);
_currentLogfile->setProgress(0.0); _currentLogfile->setProgress(0.0);
QString filePath = _makeFilename(_currentLogfile->name()); QString filePath = _makeFilename(_currentLogfile->name());
_sendLog(filePath); _sendLog(filePath);
emit uploadingChanged(); emit uploadingChanged();
return; return;
}
} }
} else {
qWarning() << "Internal error";
} }
} }
_currentLogfile = NULL; _currentLogfile = NULL;
...@@ -541,9 +544,12 @@ MAVLinkLogManager::_getFirstSelected() ...@@ -541,9 +544,12 @@ MAVLinkLogManager::_getFirstSelected()
{ {
for(int i = 0; i < _logFiles.count(); i++) { for(int i = 0; i < _logFiles.count(); i++) {
MAVLinkLogFiles* f = qobject_cast<MAVLinkLogFiles*>(_logFiles.get(i)); MAVLinkLogFiles* f = qobject_cast<MAVLinkLogFiles*>(_logFiles.get(i));
Q_ASSERT(f); if (f) {
if(f->selected()) { if(f->selected()) {
return i; return i;
}
} else {
qWarning() << "Internal error";
} }
} }
return -1; return -1;
...@@ -590,9 +596,12 @@ MAVLinkLogManager::cancelUpload() ...@@ -590,9 +596,12 @@ MAVLinkLogManager::cancelUpload()
{ {
for(int i = 0; i < _logFiles.count(); i++) { for(int i = 0; i < _logFiles.count(); i++) {
MAVLinkLogFiles* pLogFile = qobject_cast<MAVLinkLogFiles*>(_logFiles.get(i)); MAVLinkLogFiles* pLogFile = qobject_cast<MAVLinkLogFiles*>(_logFiles.get(i));
Q_ASSERT(pLogFile); if (pLogFile) {
if(pLogFile->selected() && pLogFile != _currentLogfile) { if(pLogFile->selected() && pLogFile != _currentLogfile) {
pLogFile->setSelected(false); pLogFile->setSelected(false);
}
} else {
qWarning() << "Internal error";
} }
} }
if(_currentLogfile) { if(_currentLogfile) {
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "MissionCommandTree.h" #include "MissionCommandTree.h"
#include "QGroundControlQmlGlobal.h" #include "QGroundControlQmlGlobal.h"
#include "SettingsManager.h" #include "SettingsManager.h"
#include "QGCQGeoCoordinate.h"
QGC_LOGGING_CATEGORY(VehicleLog, "VehicleLog") QGC_LOGGING_CATEGORY(VehicleLog, "VehicleLog")
...@@ -316,6 +317,10 @@ void Vehicle::_commonInit(void) ...@@ -316,6 +317,10 @@ void Vehicle::_commonInit(void)
_missionManager = new MissionManager(this); _missionManager = new MissionManager(this);
connect(_missionManager, &MissionManager::error, this, &Vehicle::_missionManagerError); connect(_missionManager, &MissionManager::error, this, &Vehicle::_missionManagerError);
connect(_missionManager, &MissionManager::newMissionItemsAvailable, this, &Vehicle::_missionLoadComplete); connect(_missionManager, &MissionManager::newMissionItemsAvailable, this, &Vehicle::_missionLoadComplete);
connect(_missionManager, &MissionManager::newMissionItemsAvailable, this, &Vehicle::_clearCameraTriggerPoints);
connect(_missionManager, &MissionManager::newMissionItemsAvailable, this, &Vehicle::_clearTrajectoryPoints);
connect(_missionManager, &MissionManager::sendComplete, this, &Vehicle::_clearCameraTriggerPoints);
connect(_missionManager, &MissionManager::sendComplete, this, &Vehicle::_clearTrajectoryPoints);
_parameterManager = new ParameterManager(this); _parameterManager = new ParameterManager(this);
connect(_parameterManager, &ParameterManager::parametersReadyChanged, this, &Vehicle::_parametersReady); connect(_parameterManager, &ParameterManager::parametersReadyChanged, this, &Vehicle::_parametersReady);
...@@ -584,6 +589,13 @@ void Vehicle::_mavlinkMessageReceived(LinkInterface* link, mavlink_message_t mes ...@@ -584,6 +589,13 @@ void Vehicle::_mavlinkMessageReceived(LinkInterface* link, mavlink_message_t mes
break; break;
case MAVLINK_MSG_ID_SCALED_PRESSURE3: case MAVLINK_MSG_ID_SCALED_PRESSURE3:
_handleScaledPressure3(message); _handleScaledPressure3(message);
break;
case MAVLINK_MSG_ID_CAMERA_FEEDBACK:
_handleCameraFeedback(message);
break;
case MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED:
_handleCameraImageCaptured(message);
break; break;
case MAVLINK_MSG_ID_SERIAL_CONTROL: case MAVLINK_MSG_ID_SERIAL_CONTROL:
...@@ -605,6 +617,31 @@ void Vehicle::_mavlinkMessageReceived(LinkInterface* link, mavlink_message_t mes ...@@ -605,6 +617,31 @@ void Vehicle::_mavlinkMessageReceived(LinkInterface* link, mavlink_message_t mes
_uas->receiveMessage(message); _uas->receiveMessage(message);
} }
void Vehicle::_handleCameraFeedback(const mavlink_message_t& message)
{
mavlink_camera_feedback_t feedback;
mavlink_msg_camera_feedback_decode(&message, &feedback);
QGeoCoordinate imageCoordinate((double)feedback.lat / qPow(10.0, 7.0), (double)feedback.lng / qPow(10.0, 7.0), feedback.alt_msl);
qCDebug(VehicleLog) << "_handleCameraFeedback coord:index" << imageCoordinate << feedback.img_idx;
_cameraTriggerPoints.append(new QGCQGeoCoordinate(imageCoordinate, this));
}
void Vehicle::_handleCameraImageCaptured(const mavlink_message_t& message)
{
mavlink_camera_image_captured_t feedback;
mavlink_msg_camera_image_captured_decode(&message, &feedback);
QGeoCoordinate imageCoordinate((double)feedback.lat / qPow(10.0, 7.0), (double)feedback.lon / qPow(10.0, 7.0), feedback.alt);
qCDebug(VehicleLog) << "_handleCameraFeedback coord:index" << imageCoordinate << feedback.image_index << feedback.capture_result;
if (feedback.capture_result == 1) {
_cameraTriggerPoints.append(new QGCQGeoCoordinate(imageCoordinate, this));
}
}
void Vehicle::_handleVfrHud(mavlink_message_t& message) void Vehicle::_handleVfrHud(mavlink_message_t& message)
{ {
mavlink_vfr_hud_t vfrHud; mavlink_vfr_hud_t vfrHud;
...@@ -945,15 +982,24 @@ void Vehicle::_handleHeartbeat(mavlink_message_t& message) ...@@ -945,15 +982,24 @@ void Vehicle::_handleHeartbeat(mavlink_message_t& message)
// We are transitioning to the armed state, begin tracking trajectory points for the map // We are transitioning to the armed state, begin tracking trajectory points for the map
if (_armed) { if (_armed) {
_mapTrajectoryStart(); _mapTrajectoryStart();
_clearCameraTriggerPoints();
} else { } else {
_mapTrajectoryStop(); _mapTrajectoryStop();
} }
} }
if (heartbeat.base_mode != _base_mode || heartbeat.custom_mode != _custom_mode) { if (heartbeat.base_mode != _base_mode || heartbeat.custom_mode != _custom_mode) {
QString previousFlightMode;
if (_base_mode != 0 || _custom_mode != 0){
// Vehicle is initialized with _base_mode=0 and _custom_mode=0. Don't pass this to flightMode() since it will complain about
// bad modes while unit testing.
previousFlightMode = flightMode();
}
_base_mode = heartbeat.base_mode; _base_mode = heartbeat.base_mode;
_custom_mode = heartbeat.custom_mode; _custom_mode = heartbeat.custom_mode;
emit flightModeChanged(flightMode()); if (previousFlightMode != flightMode()) {
emit flightModeChanged(flightMode());
}
} }
} }
...@@ -1277,7 +1323,6 @@ void Vehicle::_handleTextMessage(int newCount) ...@@ -1277,7 +1323,6 @@ void Vehicle::_handleTextMessage(int newCount)
} }
UASMessageHandler* pMh = qgcApp()->toolbox()->uasMessageHandler(); UASMessageHandler* pMh = qgcApp()->toolbox()->uasMessageHandler();
Q_ASSERT(pMh);
MessageType_t type = newCount ? _currentMessageType : MessageNone; MessageType_t type = newCount ? _currentMessageType : MessageNone;
int errorCount = _currentErrorCount; int errorCount = _currentErrorCount;
int warnCount = _currentWarningCount; int warnCount = _currentWarningCount;
...@@ -1622,10 +1667,20 @@ void Vehicle::_addNewMapTrajectoryPoint(void) ...@@ -1622,10 +1667,20 @@ void Vehicle::_addNewMapTrajectoryPoint(void)
_mapTrajectoryLastCoordinate = _coordinate; _mapTrajectoryLastCoordinate = _coordinate;
} }
void Vehicle::_clearTrajectoryPoints(void)
{
_mapTrajectoryList.clearAndDeleteContents();
}
void Vehicle::_clearCameraTriggerPoints(void)
{
_cameraTriggerPoints.clearAndDeleteContents();
}
void Vehicle::_mapTrajectoryStart(void) void Vehicle::_mapTrajectoryStart(void)
{ {
_mapTrajectoryHaveFirstCoordinate = false; _mapTrajectoryHaveFirstCoordinate = false;
_mapTrajectoryList.clear(); _clearTrajectoryPoints();
_mapTrajectoryTimer.start(); _mapTrajectoryTimer.start();
_flightDistanceFact.setRawValue(0); _flightDistanceFact.setRawValue(0);
} }
...@@ -1907,11 +1962,6 @@ void Vehicle::_announceArmedChanged(bool armed) ...@@ -1907,11 +1962,6 @@ void Vehicle::_announceArmedChanged(bool armed)
_say(QString("%1 %2").arg(_vehicleIdSpeech()).arg(armed ? QStringLiteral("armed") : QStringLiteral("disarmed"))); _say(QString("%1 %2").arg(_vehicleIdSpeech()).arg(armed ? QStringLiteral("armed") : QStringLiteral("disarmed")));
} }
void Vehicle::clearTrajectoryPoints(void)
{
_mapTrajectoryList.clearAndDeleteContents();
}
void Vehicle::setFlying(bool flying) void Vehicle::setFlying(bool flying)
{ {
if (armed() && _flying != flying) { if (armed() && _flying != flying) {
......
...@@ -246,6 +246,7 @@ public: ...@@ -246,6 +246,7 @@ public:
Q_PROPERTY(QString flightMode READ flightMode WRITE setFlightMode NOTIFY flightModeChanged) Q_PROPERTY(QString flightMode READ flightMode WRITE setFlightMode NOTIFY flightModeChanged)
Q_PROPERTY(bool hilMode READ hilMode WRITE setHilMode NOTIFY hilModeChanged) Q_PROPERTY(bool hilMode READ hilMode WRITE setHilMode NOTIFY hilModeChanged)
Q_PROPERTY(QmlObjectListModel* trajectoryPoints READ trajectoryPoints CONSTANT) Q_PROPERTY(QmlObjectListModel* trajectoryPoints READ trajectoryPoints CONSTANT)
Q_PROPERTY(QmlObjectListModel* cameraTriggerPoints READ cameraTriggerPoints CONSTANT)
Q_PROPERTY(float latitude READ latitude NOTIFY coordinateChanged) Q_PROPERTY(float latitude READ latitude NOTIFY coordinateChanged)
Q_PROPERTY(float longitude READ longitude NOTIFY coordinateChanged) Q_PROPERTY(float longitude READ longitude NOTIFY coordinateChanged)
Q_PROPERTY(bool messageTypeNone READ messageTypeNone NOTIFY messageTypeChanged) Q_PROPERTY(bool messageTypeNone READ messageTypeNone NOTIFY messageTypeChanged)
...@@ -371,8 +372,6 @@ public: ...@@ -371,8 +372,6 @@ public:
Q_INVOKABLE void virtualTabletJoystickValue(double roll, double pitch, double yaw, double thrust); Q_INVOKABLE void virtualTabletJoystickValue(double roll, double pitch, double yaw, double thrust);
Q_INVOKABLE void disconnectInactiveVehicle(void); Q_INVOKABLE void disconnectInactiveVehicle(void);
Q_INVOKABLE void clearTrajectoryPoints(void);
/// Command vehicle to return to launch /// Command vehicle to return to launch
Q_INVOKABLE void guidedModeRTL(void); Q_INVOKABLE void guidedModeRTL(void);
...@@ -524,6 +523,7 @@ public: ...@@ -524,6 +523,7 @@ public:
void setPrearmError(const QString& prearmError); void setPrearmError(const QString& prearmError);
QmlObjectListModel* trajectoryPoints(void) { return &_mapTrajectoryList; } QmlObjectListModel* trajectoryPoints(void) { return &_mapTrajectoryList; }
QmlObjectListModel* cameraTriggerPoints(void) { return &_cameraTriggerPoints; }
int flowImageIndex() { return _flowImageIndex; } int flowImageIndex() { return _flowImageIndex; }
...@@ -791,8 +791,9 @@ private slots: ...@@ -791,8 +791,9 @@ private slots:
void _geoFenceLoadComplete(void); void _geoFenceLoadComplete(void);
void _rallyPointLoadComplete(void); void _rallyPointLoadComplete(void);
void _sendMavCommandAgain(void); void _sendMavCommandAgain(void);
void _activeJoystickChanged(void); void _activeJoystickChanged(void);
void _clearTrajectoryPoints(void);
void _clearCameraTriggerPoints(void);
private: private:
bool _containsLink(LinkInterface* link); bool _containsLink(LinkInterface* link);
...@@ -820,6 +821,8 @@ private: ...@@ -820,6 +821,8 @@ private:
void _handleScaledPressure(mavlink_message_t& message); void _handleScaledPressure(mavlink_message_t& message);
void _handleScaledPressure2(mavlink_message_t& message); void _handleScaledPressure2(mavlink_message_t& message);
void _handleScaledPressure3(mavlink_message_t& message); void _handleScaledPressure3(mavlink_message_t& message);
void _handleCameraFeedback(const mavlink_message_t& message);
void _handleCameraImageCaptured(const mavlink_message_t& message);
void _missionManagerError(int errorCode, const QString& errorMsg); void _missionManagerError(int errorCode, const QString& errorMsg);
void _geoFenceManagerError(int errorCode, const QString& errorMsg); void _geoFenceManagerError(int errorCode, const QString& errorMsg);
void _rallyPointManagerError(int errorCode, const QString& errorMsg); void _rallyPointManagerError(int errorCode, const QString& errorMsg);
...@@ -954,6 +957,8 @@ private: ...@@ -954,6 +957,8 @@ private:
bool _mapTrajectoryHaveFirstCoordinate; bool _mapTrajectoryHaveFirstCoordinate;
static const int _mapTrajectoryMsecsBetweenPoints = 1000; static const int _mapTrajectoryMsecsBetweenPoints = 1000;
QmlObjectListModel _cameraTriggerPoints;
// Toolbox references // Toolbox references
FirmwarePluginManager* _firmwarePluginManager; FirmwarePluginManager* _firmwarePluginManager;
JoystickManager* _joystickManager; JoystickManager* _joystickManager;
......
...@@ -20,8 +20,9 @@ VehicleComponent::VehicleComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, ...@@ -20,8 +20,9 @@ VehicleComponent::VehicleComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot,
_vehicle(vehicle), _vehicle(vehicle),
_autopilot(autopilot) _autopilot(autopilot)
{ {
Q_ASSERT(vehicle); if (!vehicle || !autopilot) {
Q_ASSERT(autopilot); qWarning() << "Internal error";
}
} }
VehicleComponent::~VehicleComponent() VehicleComponent::~VehicleComponent()
...@@ -31,19 +32,23 @@ VehicleComponent::~VehicleComponent() ...@@ -31,19 +32,23 @@ VehicleComponent::~VehicleComponent()
void VehicleComponent::addSummaryQmlComponent(QQmlContext* context, QQuickItem* parent) void VehicleComponent::addSummaryQmlComponent(QQmlContext* context, QQuickItem* parent)
{ {
Q_ASSERT(context); if (context) {
// FIXME: We own this object now, need to delete somewhere
// FIXME: We own this object now, need to delete somewhere QQmlComponent component(context->engine(), QUrl::fromUserInput("qrc:/qml/VehicleComponentSummaryButton.qml"));
QQmlComponent component(context->engine(), QUrl::fromUserInput("qrc:/qml/VehicleComponentSummaryButton.qml")); if (component.status() == QQmlComponent::Error) {
if (component.status() == QQmlComponent::Error) { qWarning() << component.errors();
qDebug() << component.errors(); } else {
Q_ASSERT(false); QQuickItem* item = qobject_cast<QQuickItem*>(component.create(context));
if (item) {
item->setParentItem(parent);
item->setProperty("vehicleComponent", QVariant::fromValue(this));
} else {
qWarning() << "Internal error";
}
}
} else {
qWarning() << "Internal error";
} }
QQuickItem* item = qobject_cast<QQuickItem*>(component.create(context));
Q_ASSERT(item);
item->setParentItem(parent);
item->setProperty("vehicleComponent", QVariant::fromValue(this));
} }
void VehicleComponent::setupTriggerSignals(void) void VehicleComponent::setupTriggerSignals(void)
......
...@@ -33,11 +33,11 @@ void ViewWidgetController::_vehicleAvailable(bool available) ...@@ -33,11 +33,11 @@ void ViewWidgetController::_vehicleAvailable(bool available)
_uas = vehicle->uas(); _uas = vehicle->uas();
_autopilot = vehicle->autopilotPlugin(); _autopilot = vehicle->autopilotPlugin();
Q_ASSERT(_autopilot);
emit pluginConnected(QVariant::fromValue(_autopilot)); emit pluginConnected(QVariant::fromValue(_autopilot));
} }
} }
Q_INVOKABLE void ViewWidgetController::checkForVehicle(void)
void ViewWidgetController::checkForVehicle(void)
{ {
_vehicleAvailable(qgcApp()->toolbox()->multiVehicleManager()->activeVehicle()); _vehicleAvailable(qgcApp()->toolbox()->multiVehicleManager()->activeVehicle());
} }
...@@ -152,7 +152,9 @@ qint64 LinkInterface::_getCurrentDataRate(int index, const qint64 dataWriteTimes ...@@ -152,7 +152,9 @@ qint64 LinkInterface::_getCurrentDataRate(int index, const qint64 dataWriteTimes
/// Sets the mavlink channel to use for this link /// Sets the mavlink channel to use for this link
void LinkInterface::_setMavlinkChannel(uint8_t channel) void LinkInterface::_setMavlinkChannel(uint8_t channel)
{ {
Q_ASSERT(!_mavlinkChannelSet); if (_mavlinkChannelSet) {
qWarning() << "Mavlink channel set multiple times";
}
_mavlinkChannelSet = true; _mavlinkChannelSet = true;
_mavlinkChannel = channel; _mavlinkChannel = channel;
} }
This diff is collapsed.
...@@ -35,8 +35,11 @@ void LogReplayLinkConfiguration::copyFrom(LinkConfiguration *source) ...@@ -35,8 +35,11 @@ void LogReplayLinkConfiguration::copyFrom(LinkConfiguration *source)
{ {
LinkConfiguration::copyFrom(source); LinkConfiguration::copyFrom(source);
LogReplayLinkConfiguration* ssource = dynamic_cast<LogReplayLinkConfiguration*>(source); LogReplayLinkConfiguration* ssource = dynamic_cast<LogReplayLinkConfiguration*>(source);
Q_ASSERT(ssource != NULL); if (ssource) {
_logFilename = ssource->logFilename(); _logFilename = ssource->logFilename();
} else {
qWarning() << "Internal error";
}
} }
void LogReplayLinkConfiguration::saveSettings(QSettings& settings, const QString& root) void LogReplayLinkConfiguration::saveSettings(QSettings& settings, const QString& root)
...@@ -70,7 +73,9 @@ LogReplayLink::LogReplayLink(SharedLinkConfigurationPointer& config) ...@@ -70,7 +73,9 @@ LogReplayLink::LogReplayLink(SharedLinkConfigurationPointer& config)
, _connected(false) , _connected(false)
, _replayAccelerationFactor(1.0f) , _replayAccelerationFactor(1.0f)
{ {
Q_ASSERT(_logReplayConfig); if (!_logReplayConfig) {
qWarning() << "Internal error";
}
_readTickTimer.moveToThread(this); _readTickTimer.moveToThread(this);
......
...@@ -38,10 +38,13 @@ SerialLink::SerialLink(SharedLinkConfigurationPointer& config) ...@@ -38,10 +38,13 @@ SerialLink::SerialLink(SharedLinkConfigurationPointer& config)
, _reqReset(false) , _reqReset(false)
, _serialConfig(qobject_cast<SerialConfiguration*>(config.data())) , _serialConfig(qobject_cast<SerialConfiguration*>(config.data()))
{ {
Q_ASSERT(_serialConfig); if (!_serialConfig) {
qWarning() << "Internal error";
return;
}
qCDebug(SerialLinkLog) << "Create SerialLink " << _serialConfig->portName() << _serialConfig->baud() << _serialConfig->flowControl() qCDebug(SerialLinkLog) << "Create SerialLink " << _serialConfig->portName() << _serialConfig->baud() << _serialConfig->flowControl()
<< _serialConfig->parity() << _serialConfig->dataBits() << _serialConfig->stopBits(); << _serialConfig->parity() << _serialConfig->dataBits() << _serialConfig->stopBits();
qCDebug(SerialLinkLog) << "portName: " << _serialConfig->portName(); qCDebug(SerialLinkLog) << "portName: " << _serialConfig->portName();
} }
...@@ -76,7 +79,7 @@ bool SerialLink::_isBootloader() ...@@ -76,7 +79,7 @@ bool SerialLink::_isBootloader()
info.description().toLower().contains("px4 fmu v1.6"))) { info.description().toLower().contains("px4 fmu v1.6"))) {
qCDebug(SerialLinkLog) << "BOOTLOADER FOUND"; qCDebug(SerialLinkLog) << "BOOTLOADER FOUND";
return true; return true;
} }
} }
// Not found // Not found
return false; return false;
...@@ -229,7 +232,7 @@ bool SerialLink::_hardwareConnect(QSerialPort::SerialPortError& error, QString& ...@@ -229,7 +232,7 @@ bool SerialLink::_hardwareConnect(QSerialPort::SerialPortError& error, QString&
emit connected(); emit connected();
qCDebug(SerialLinkLog) << "Connection SeriaLink: " << "with settings" << _serialConfig->portName() qCDebug(SerialLinkLog) << "Connection SeriaLink: " << "with settings" << _serialConfig->portName()
<< _serialConfig->baud() << _serialConfig->dataBits() << _serialConfig->parity() << _serialConfig->stopBits(); << _serialConfig->baud() << _serialConfig->dataBits() << _serialConfig->parity() << _serialConfig->stopBits();
return true; // successful connection return true; // successful connection
} }
...@@ -299,34 +302,34 @@ qint64 SerialLink::getConnectionSpeed() const ...@@ -299,34 +302,34 @@ qint64 SerialLink::getConnectionSpeed() const
qint64 dataRate; qint64 dataRate;
switch (baudRate) switch (baudRate)
{ {
case QSerialPort::Baud1200: case QSerialPort::Baud1200:
dataRate = 1200; dataRate = 1200;
break; break;
case QSerialPort::Baud2400: case QSerialPort::Baud2400:
dataRate = 2400; dataRate = 2400;
break; break;
case QSerialPort::Baud4800: case QSerialPort::Baud4800:
dataRate = 4800; dataRate = 4800;
break; break;
case QSerialPort::Baud9600: case QSerialPort::Baud9600:
dataRate = 9600; dataRate = 9600;
break; break;
case QSerialPort::Baud19200: case QSerialPort::Baud19200:
dataRate = 19200; dataRate = 19200;
break; break;
case QSerialPort::Baud38400: case QSerialPort::Baud38400:
dataRate = 38400; dataRate = 38400;
break; break;
case QSerialPort::Baud57600: case QSerialPort::Baud57600:
dataRate = 57600; dataRate = 57600;
break; break;
case QSerialPort::Baud115200: case QSerialPort::Baud115200:
dataRate = 115200; dataRate = 115200;
break; break;
// Otherwise do nothing. // Otherwise do nothing.
default: default:
dataRate = -1; dataRate = -1;
break; break;
} }
return dataRate; return dataRate;
} }
...@@ -378,15 +381,18 @@ void SerialConfiguration::copyFrom(LinkConfiguration *source) ...@@ -378,15 +381,18 @@ void SerialConfiguration::copyFrom(LinkConfiguration *source)
{ {
LinkConfiguration::copyFrom(source); LinkConfiguration::copyFrom(source);
SerialConfiguration* ssource = dynamic_cast<SerialConfiguration*>(source); SerialConfiguration* ssource = dynamic_cast<SerialConfiguration*>(source);
Q_ASSERT(ssource != NULL); if (ssource) {
_baud = ssource->baud(); _baud = ssource->baud();
_flowControl = ssource->flowControl(); _flowControl = ssource->flowControl();
_parity = ssource->parity(); _parity = ssource->parity();
_dataBits = ssource->dataBits(); _dataBits = ssource->dataBits();
_stopBits = ssource->stopBits(); _stopBits = ssource->stopBits();
_portName = ssource->portName(); _portName = ssource->portName();
_portDisplayName = ssource->portDisplayName(); _portDisplayName = ssource->portDisplayName();
_usbDirect = ssource->_usbDirect; _usbDirect = ssource->_usbDirect;
} else {
qWarning() << "Internal error";
}
} }
void SerialConfiguration::updateSettings() void SerialConfiguration::updateSettings()
......
...@@ -67,15 +67,17 @@ static QString get_ip_address(const QString& address) ...@@ -67,15 +67,17 @@ static QString get_ip_address(const QString& address)
UDPLink::UDPLink(SharedLinkConfigurationPointer& config) UDPLink::UDPLink(SharedLinkConfigurationPointer& config)
: LinkInterface(config) : LinkInterface(config)
#if defined(QGC_ZEROCONF_ENABLED) #if defined(QGC_ZEROCONF_ENABLED)
, _dnssServiceRef(NULL) , _dnssServiceRef(NULL)
#endif #endif
, _running(false) , _running(false)
, _socket(NULL) , _socket(NULL)
, _udpConfig(qobject_cast<UDPConfiguration*>(config.data())) , _udpConfig(qobject_cast<UDPConfiguration*>(config.data()))
, _connectState(false) , _connectState(false)
{ {
Q_ASSERT(_udpConfig); if (!_udpConfig) {
qWarning() << "Internal error";
}
moveToThread(this); moveToThread(this);
} }
...@@ -292,14 +294,14 @@ void UDPLink::_registerZeroconf(uint16_t port, const std::string &regType) ...@@ -292,14 +294,14 @@ void UDPLink::_registerZeroconf(uint16_t port, const std::string &regType)
{ {
#if defined(QGC_ZEROCONF_ENABLED) #if defined(QGC_ZEROCONF_ENABLED)
DNSServiceErrorType result = DNSServiceRegister(&_dnssServiceRef, 0, 0, 0, DNSServiceErrorType result = DNSServiceRegister(&_dnssServiceRef, 0, 0, 0,
regType.c_str(), regType.c_str(),
NULL, NULL,
NULL, NULL,
htons(port), htons(port),
0, 0,
NULL, NULL,
NULL, NULL,
NULL); NULL);
if (result != kDNSServiceErr_NoError) if (result != kDNSServiceErr_NoError)
{ {
emit communicationError("UDP Link Error", "Error registering Zeroconf"); emit communicationError("UDP Link Error", "Error registering Zeroconf");
...@@ -315,10 +317,10 @@ void UDPLink::_deregisterZeroconf() ...@@ -315,10 +317,10 @@ void UDPLink::_deregisterZeroconf()
{ {
#if defined(QGC_ZEROCONF_ENABLED) #if defined(QGC_ZEROCONF_ENABLED)
if (_dnssServiceRef) if (_dnssServiceRef)
{ {
DNSServiceRefDeallocate(_dnssServiceRef); DNSServiceRefDeallocate(_dnssServiceRef);
_dnssServiceRef = NULL; _dnssServiceRef = NULL;
} }
#endif #endif
} }
...@@ -347,15 +349,18 @@ void UDPConfiguration::copyFrom(LinkConfiguration *source) ...@@ -347,15 +349,18 @@ void UDPConfiguration::copyFrom(LinkConfiguration *source)
{ {
LinkConfiguration::copyFrom(source); LinkConfiguration::copyFrom(source);
UDPConfiguration* usource = dynamic_cast<UDPConfiguration*>(source); UDPConfiguration* usource = dynamic_cast<UDPConfiguration*>(source);
Q_ASSERT(usource != NULL); if (usource) {
_localPort = usource->localPort(); _localPort = usource->localPort();
_hosts.clear(); _hosts.clear();
QString host; QString host;
int port; int port;
if(usource->firstHost(host, port)) { if(usource->firstHost(host, port)) {
do { do {
addHost(host, port); addHost(host, port);
} while(usource->nextHost(host, port)); } while(usource->nextHost(host, port));
}
} else {
qWarning() << "Internal error";
} }
} }
......
...@@ -92,10 +92,7 @@ static MainWindow* _instance = NULL; ///< @brief MainWindow singleton ...@@ -92,10 +92,7 @@ static MainWindow* _instance = NULL; ///< @brief MainWindow singleton
MainWindow* MainWindow::_create() MainWindow* MainWindow::_create()
{ {
Q_ASSERT(_instance == NULL);
new MainWindow(); new MainWindow();
// _instance is set in constructor
Q_ASSERT(_instance);
return _instance; return _instance;
} }
...@@ -118,7 +115,6 @@ MainWindow::MainWindow() ...@@ -118,7 +115,6 @@ MainWindow::MainWindow()
, _mainQmlWidgetHolder(NULL) , _mainQmlWidgetHolder(NULL)
, _forceClose(false) , _forceClose(false)
{ {
Q_ASSERT(_instance == NULL);
_instance = this; _instance = this;
//-- Load fonts //-- Load fonts
...@@ -337,7 +333,7 @@ void MainWindow::_showDockWidget(const QString& name, bool show) ...@@ -337,7 +333,7 @@ void MainWindow::_showDockWidget(const QString& name, bool show)
// Create the inner widget if we need to // Create the inner widget if we need to
if (!_mapName2DockWidget.contains(name)) { if (!_mapName2DockWidget.contains(name)) {
if(!_createInnerDockWidget(name)) { if(!_createInnerDockWidget(name)) {
qWarning() << "Trying to load non existing widget:" << name; qWarning() << "Trying to load non existent widget:" << name;
return; return;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment