diff --git a/ground/gcs/src/plugins/config/calibration/sixpointcalibrationmodel.cpp b/ground/gcs/src/plugins/config/calibration/sixpointcalibrationmodel.cpp index ce13a8039..52ab32409 100644 --- a/ground/gcs/src/plugins/config/calibration/sixpointcalibrationmodel.cpp +++ b/ground/gcs/src/plugins/config/calibration/sixpointcalibrationmodel.cpp @@ -2,7 +2,8 @@ ****************************************************************************** * * @file sixpointcalibrationmodel.cpp - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2016. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014. * * @brief Six point calibration for Magnetometer and Accelerometer * @see The GNU Public License (GPL) Version 3 @@ -29,6 +30,7 @@ #include "extensionsystem/pluginmanager.h" #include "calibration/calibrationuiutils.h" #include "uavobjectmanager.h" +#include #include #include @@ -156,6 +158,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag) // Store and reset board rotation before calibration starts storeAndClearBoardRotation(); + UAVObjectUpdaterHelper updateHelper; + // Calibration accel AccelGyroSettings::DataFields accelGyroSettingsData = accelGyroSettings->getData(); memento.accelGyroSettingsData = accelGyroSettingsData; @@ -167,7 +171,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag) accelGyroSettingsData.accel_bias[AccelGyroSettings::ACCEL_BIAS_Y] = 0; accelGyroSettingsData.accel_bias[AccelGyroSettings::ACCEL_BIAS_Z] = 0; - accelGyroSettings->setData(accelGyroSettingsData); + accelGyroSettings->setData(accelGyroSettingsData, false); + updateHelper.doObjectAndWait(accelGyroSettings); // Calibration mag RevoCalibration::DataFields revoCalibrationData = revoCalibration->getData(); @@ -187,7 +192,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag) // Disable adaptive mag nulling revoCalibrationData.MagBiasNullingRate = 0; - revoCalibration->setData(revoCalibrationData); + revoCalibration->setData(revoCalibrationData, false); + updateHelper.doObjectAndWait(revoCalibration); // Calibration AuxMag AuxMagSettings::DataFields auxMagSettingsData = auxMagSettings->getData(); @@ -207,9 +213,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag) // Disable adaptive mag nulling auxMagSettingsData.MagBiasNullingRate = 0; - auxMagSettings->setData(auxMagSettingsData); - - QThread::usleep(100000); + auxMagSettings->setData(auxMagSettingsData, false); + updateHelper.doObjectAndWait(auxMagSettings); mag_accum_x.clear(); mag_accum_y.clear(); diff --git a/ground/gcs/src/plugins/config/configrevowidget.cpp b/ground/gcs/src/plugins/config/configrevowidget.cpp index cb85a6fc3..743531934 100644 --- a/ground/gcs/src/plugins/config/configrevowidget.cpp +++ b/ground/gcs/src/plugins/config/configrevowidget.cpp @@ -2,7 +2,8 @@ ****************************************************************************** * * @file ConfigRevoWidget.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2016. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @addtogroup GCSPlugins GCS Plugins * @{ * @addtogroup ConfigPlugin Config Plugin @@ -28,6 +29,7 @@ #include "ui_revosensors.h" +#include #include #include #include @@ -255,6 +257,8 @@ void ConfigRevoWidget::updateVisualHelp() void ConfigRevoWidget::storeAndClearBoardRotation() { if (!isBoardRotationStored) { + UAVObjectUpdaterHelper updateHelper; + // Store current board rotation isBoardRotationStored = true; AttitudeSettings *attitudeSettings = AttitudeSettings::GetInstance(getObjectManager()); @@ -268,7 +272,9 @@ void ConfigRevoWidget::storeAndClearBoardRotation() data.BoardRotation[AttitudeSettings::BOARDROTATION_YAW] = 0; data.BoardRotation[AttitudeSettings::BOARDROTATION_ROLL] = 0; data.BoardRotation[AttitudeSettings::BOARDROTATION_PITCH] = 0; - attitudeSettings->setData(data); + + attitudeSettings->setData(data, false); + updateHelper.doObjectAndWait(attitudeSettings); // Store current aux mag board rotation AuxMagSettings *auxMagSettings = AuxMagSettings::GetInstance(getObjectManager()); @@ -282,13 +288,17 @@ void ConfigRevoWidget::storeAndClearBoardRotation() auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_YAW] = 0; auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_ROLL] = 0; auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_PITCH] = 0; - auxMagSettings->setData(auxMagData); + + auxMagSettings->setData(auxMagData, false); + updateHelper.doObjectAndWait(auxMagSettings); } } void ConfigRevoWidget::recallBoardRotation() { if (isBoardRotationStored) { + UAVObjectUpdaterHelper updateHelper; + // Recall current board rotation isBoardRotationStored = false; @@ -299,7 +309,9 @@ void ConfigRevoWidget::recallBoardRotation() data.BoardRotation[AttitudeSettings::BOARDROTATION_YAW] = storedBoardRotation[AttitudeSettings::BOARDROTATION_YAW]; data.BoardRotation[AttitudeSettings::BOARDROTATION_ROLL] = storedBoardRotation[AttitudeSettings::BOARDROTATION_ROLL]; data.BoardRotation[AttitudeSettings::BOARDROTATION_PITCH] = storedBoardRotation[AttitudeSettings::BOARDROTATION_PITCH]; - attitudeSettings->setData(data); + + attitudeSettings->setData(data, false); + updateHelper.doObjectAndWait(attitudeSettings); // Restore the aux mag board rotation AuxMagSettings *auxMagSettings = AuxMagSettings::GetInstance(getObjectManager()); @@ -308,7 +320,9 @@ void ConfigRevoWidget::recallBoardRotation() auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_YAW] = auxMagStoredBoardRotation[AuxMagSettings::BOARDROTATION_YAW]; auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_ROLL] = auxMagStoredBoardRotation[AuxMagSettings::BOARDROTATION_ROLL]; auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_PITCH] = auxMagStoredBoardRotation[AuxMagSettings::BOARDROTATION_PITCH]; - auxMagSettings->setData(auxMagData); + + auxMagSettings->setData(auxMagData, false); + updateHelper.doObjectAndWait(auxMagSettings); } }