diff --git a/ground/gcs/src/plugins/config/configoutputwidget.cpp b/ground/gcs/src/plugins/config/configoutputwidget.cpp index 95137a549..12ebb09c7 100644 --- a/ground/gcs/src/plugins/config/configoutputwidget.cpp +++ b/ground/gcs/src/plugins/config/configoutputwidget.cpp @@ -778,8 +778,18 @@ QString ConfigOutputWidget::bankModeName(int index) void ConfigOutputWidget::inputCalibrationStatus(bool started) { - // Disable controls if a input calibration is started + // Disable UI when a input calibration is started + // so user cannot manipulate settings. enableControls(!started); + + // Disable every channel form + for (unsigned int i = 0; i < ActuatorCommand::CHANNEL_NUMELEM; i++) { + OutputChannelForm *form = getOutputChannelForm(i); + form->ui->actuatorRev->setChecked(false); + form->ui->actuatorLink->setChecked(false); + form->inputCalibrationStatus(started); + form->enableControls(!started); + } } OutputBankControls::OutputBankControls(MixerSettings *mixer, QLabel *label, QColor color, QComboBox *rateCombo, QComboBox *modeCombo) : diff --git a/ground/gcs/src/plugins/config/outputchannelform.cpp b/ground/gcs/src/plugins/config/outputchannelform.cpp index b04080a86..193e75e96 100644 --- a/ground/gcs/src/plugins/config/outputchannelform.cpp +++ b/ground/gcs/src/plugins/config/outputchannelform.cpp @@ -31,7 +31,7 @@ #include OutputChannelForm::OutputChannelForm(const int index, QWidget *parent) : - ChannelForm(index, parent), ui(new Ui::outputChannelForm), m_inChannelTest(false) + ChannelForm(index, parent), ui(new Ui::outputChannelForm), m_inChannelTest(false), m_isCalibratingInput(false) { ui->setupUi(this); @@ -120,6 +120,17 @@ void OutputChannelForm::enableChannelTest(bool state) } } +/** + * Update the input calibration status + */ +void OutputChannelForm::inputCalibrationStatus(bool state) +{ + if (m_isCalibratingInput == state) { + return; + } + m_isCalibratingInput = state; +} + /** * Toggles the channel linked state for use in testing mode */ @@ -242,21 +253,18 @@ void OutputChannelForm::setChannelRange() setLimits(1000, 1000, 1000, 1000); ui->actuatorMin->setValue(1000); ui->actuatorMax->setValue(1000); - ui->actuatorMin->setEnabled(false); - ui->actuatorMax->setEnabled(false); - ui->actuatorRev->setEnabled(false); - ui->actuatorLink->setEnabled(false); - ui->actuatorValue->setEnabled(false); ui->actuatorRev->setChecked(false); ui->actuatorLink->setChecked(false); + enableControls(false); return; } - ui->actuatorMin->setEnabled(true); - ui->actuatorMax->setEnabled(true); - ui->actuatorNeutral->setEnabled(true); - ui->actuatorValue->setEnabled(true); - ui->actuatorLink->setEnabled(true); + if (m_isCalibratingInput) { + // Nothing to do here + return; + } + + enableControls(true); int minValue = ui->actuatorMin->value(); int maxValue = ui->actuatorMax->value(); @@ -323,6 +331,25 @@ void OutputChannelForm::reverseChannel(bool state) } } +/** + * Enable/Disable all UI controls + */ +void OutputChannelForm::enableControls(bool state) +{ + ui->actuatorMin->setEnabled(state); + ui->actuatorMax->setEnabled(state); + ui->actuatorValue->setEnabled(state); + ui->actuatorLink->setEnabled(state); + // Reverse checkbox will be never checked + // or enabled for normal motor + if (isNormalMotor()) { + ui->actuatorRev->setChecked(false); + ui->actuatorRev->setEnabled(false); + } else { + ui->actuatorRev->setEnabled(state); + } +} + /** * Emits the channel value which will be send to the UAV to move the servo. * Returns immediately if we are not in testing mode. diff --git a/ground/gcs/src/plugins/config/outputchannelform.h b/ground/gcs/src/plugins/config/outputchannelform.h index 8b5c10463..c0b0b6b79 100644 --- a/ground/gcs/src/plugins/config/outputchannelform.h +++ b/ground/gcs/src/plugins/config/outputchannelform.h @@ -61,6 +61,8 @@ public slots: void setNeutral(int value); void setRange(int minimum, int maximum); void enableChannelTest(bool state); + void inputCalibrationStatus(bool state); + void enableControls(bool state); QString outputMixerType(); void setLimits(int actuatorMinMinimum, int actuatorMinMaximum, int actuatorMaxMinimum, int actuatorMaxMaximum); int neutralValue(); @@ -75,6 +77,7 @@ signals: private: Ui::outputChannelForm *ui; bool m_inChannelTest; + bool m_isCalibratingInput; QString m_mixerType; private slots: