diff --git a/files/images/devices/Shutter.png b/files/images/devices/Shutter.png new file mode 100644 index 0000000000000000000000000000000000000000..0362734d5762771d2b98bcfe55fe6c08138cf412 Binary files /dev/null and b/files/images/devices/Shutter.png differ diff --git a/files/images/devices/cameraGimalPitch1.png b/files/images/devices/cameraGimalPitch1.png new file mode 100644 index 0000000000000000000000000000000000000000..158429893b5aa82506f4ca902b7d8acdec03253f Binary files /dev/null and b/files/images/devices/cameraGimalPitch1.png differ diff --git a/files/images/devices/cameraGimalRoll1.png b/files/images/devices/cameraGimalRoll1.png new file mode 100644 index 0000000000000000000000000000000000000000..bff678c9e7adc2264732f2df1d2bdfd29e7e3368 Binary files /dev/null and b/files/images/devices/cameraGimalRoll1.png differ diff --git a/files/images/devices/cameraGimalYaw.png b/files/images/devices/cameraGimalYaw.png new file mode 100644 index 0000000000000000000000000000000000000000..0375add2c31bf2c7a5926ce864037bd43a550068 Binary files /dev/null and b/files/images/devices/cameraGimalYaw.png differ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 49cd25075def49b4f03abcde2509f1604c3e0474..2b356c0f28304795e892e9faf2c34d9684e32960 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -115,6 +115,10 @@ files/images/devices/BR-0004-03-2.jpg files/images/devices/BR-0016-01-3T.jpg files/images/devices/MinimOSD.jpg + files/images/devices/cameraGimalPitch1.png + files/images/devices/cameraGimalRoll1.png + files/images/devices/cameraGimalYaw.png + files/images/devices/Shutter.png files/styles/Vera.ttf diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index 068dbebb9d1cdd7c0bf0971e47f23c8ca3722667..b0be69dbe901dd12ebf75da65503c2bfd8697f6b 100644 --- a/src/ui/QGCParamWidget.cc +++ b/src/ui/QGCParamWidget.cc @@ -1017,6 +1017,11 @@ void QGCParamWidget::setParameter(int component, QString parameterName, QVariant statusLabel->setText(tr("REJ. %1 > max").arg(value.toDouble())); return; } + if (parameters.value(component)->value(parameterName) == value) + { + qDebug() << "Value not changed, not sending:" << parameterName << value; + return; + } switch (parameters.value(component)->value(parameterName).type()) { diff --git a/src/ui/configuration/CameraGimbalConfig.cc b/src/ui/configuration/CameraGimbalConfig.cc index 377cbdd8f5b5a3eab4cf5719b2fd7677c6e12cc8..64b20d250f65d11121bdb4349181f2b0dec534f8 100644 --- a/src/ui/configuration/CameraGimbalConfig.cc +++ b/src/ui/configuration/CameraGimbalConfig.cc @@ -1,11 +1,218 @@ #include "CameraGimbalConfig.h" +#include +#include +CameraGimbalConfig::CameraGimbalConfig(QWidget *parent) : AP2ConfigWidget(parent) +{ + ui.setupUi(this); + ui.tiltChannelComboBox->addItem("Disable"); + ui.tiltChannelComboBox->addItem("RC5"); + ui.tiltChannelComboBox->addItem("RC6"); + ui.tiltChannelComboBox->addItem("RC7"); + ui.tiltChannelComboBox->addItem("RC8"); + ui.tiltChannelComboBox->addItem("RC10"); + ui.tiltChannelComboBox->addItem("RC11"); + + ui.tiltInputChannelComboBox->addItem("Disable"); + ui.tiltInputChannelComboBox->addItem("RC5"); + ui.tiltInputChannelComboBox->addItem("RC6"); + ui.tiltInputChannelComboBox->addItem("RC7"); + ui.tiltInputChannelComboBox->addItem("RC8"); + + ui.rollChannelComboBox->addItem("Disable"); + ui.rollChannelComboBox->addItem("RC5"); + ui.rollChannelComboBox->addItem("RC6"); + ui.rollChannelComboBox->addItem("RC7"); + ui.rollChannelComboBox->addItem("RC8"); + ui.rollChannelComboBox->addItem("RC10"); + ui.rollChannelComboBox->addItem("RC11"); + + ui.rollInputChannelComboBox->addItem("Disable"); + ui.rollInputChannelComboBox->addItem("RC5"); + ui.rollInputChannelComboBox->addItem("RC6"); + ui.rollInputChannelComboBox->addItem("RC7"); + ui.rollInputChannelComboBox->addItem("RC8"); + + + ui.panChannelComboBox->addItem("Disable"); + ui.panChannelComboBox->addItem("RC5"); + ui.panChannelComboBox->addItem("RC6"); + ui.panChannelComboBox->addItem("RC7"); + ui.panChannelComboBox->addItem("RC8"); + ui.panChannelComboBox->addItem("RC10"); + ui.panChannelComboBox->addItem("RC11"); + + ui.panInputChannelComboBox->addItem("Disable"); + ui.panInputChannelComboBox->addItem("RC5"); + ui.panInputChannelComboBox->addItem("RC6"); + ui.panInputChannelComboBox->addItem("RC7"); + ui.panInputChannelComboBox->addItem("RC8"); + + + ui.shutterChannelComboBox->addItem("Disable"); + ui.shutterChannelComboBox->addItem("Relay"); + ui.shutterChannelComboBox->addItem("Transistor"); + ui.shutterChannelComboBox->addItem("RC5"); + ui.shutterChannelComboBox->addItem("RC6"); + ui.shutterChannelComboBox->addItem("RC7"); + ui.shutterChannelComboBox->addItem("RC8"); + ui.shutterChannelComboBox->addItem("RC10"); + ui.shutterChannelComboBox->addItem("RC11"); + + connect(ui.tiltServoMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.tiltServoMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.tiltAngleMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.tiltAngleMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.tiltChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateTilt())); + connect(ui.tiltInputChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateTilt())); + connect(ui.tiltReverseCheckBox,SIGNAL(clicked(bool)),this,SLOT(updateTilt())); + connect(ui.tiltStabilizeCheckBox,SIGNAL(clicked(bool)),this,SLOT(updateTilt())); + + connect(ui.rollServoMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.rollServoMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.rollAngleMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.rollAngleMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.rollChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateTilt())); + connect(ui.rollInputChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateTilt())); + connect(ui.rollReverseCheckBox,SIGNAL(clicked(bool)),this,SLOT(updateTilt())); + connect(ui.rollStabilizeCheckBox,SIGNAL(clicked(bool)),this,SLOT(updateTilt())); + + connect(ui.panServoMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.panServoMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.panAngleMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.panAngleMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateTilt())); + connect(ui.panChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateTilt())); + connect(ui.panInputChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateTilt())); + connect(ui.panReverseCheckBox,SIGNAL(clicked(bool)),this,SLOT(updateTilt())); + connect(ui.panStabilizeCheckBox,SIGNAL(clicked(bool)),this,SLOT(updateTilt())); + + + connect(ui.shutterServoMinSpinBox,SIGNAL(editingFinished()),this,SLOT(updateShutter())); + connect(ui.shutterServoMaxSpinBox,SIGNAL(editingFinished()),this,SLOT(updateShutter())); + connect(ui.shutterPushedSpinBox,SIGNAL(editingFinished()),this,SLOT(updateShutter())); + connect(ui.shutterNotPushedSpinBox,SIGNAL(editingFinished()),this,SLOT(updateShutter())); + connect(ui.shutterDurationSpinBox,SIGNAL(editingFinished()),this,SLOT(updateShutter())); + connect(ui.shutterChannelComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(updateShutter())); + + +} +void CameraGimbalConfig::updateTilt() +{ + if (!m_uas) + { + QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); + return; + } + if (ui.tiltChannelComboBox->currentIndex() == 0) + { + //Disabled + return; + } + for (QMap::const_iterator i = m_uas->getComponents().constBegin(); i != m_uas->getComponents().constEnd();i++) + { + qDebug() << "Component:" << i.key() << "Name:" << i.value(); + } + m_uas->getParamManager()->setParameter(1,ui.tiltChannelComboBox->currentText() + "_FUNCTION",7); + m_uas->getParamManager()->setParameter(1,ui.tiltChannelComboBox->currentText() + "_MIN",ui.tiltServoMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.tiltChannelComboBox->currentText() + "_MAX",ui.tiltServoMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"MNT_ANGMIN_TIL",ui.tiltAngleMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"MNT_ANGMAX_TIL",ui.tiltAngleMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.tiltChannelComboBox->currentText() + "_REV",(ui.tiltReverseCheckBox->isChecked() ? 1 : 0)); + if (ui.tiltInputChannelComboBox->currentIndex() == 0) + { + m_uas->getParamManager()->setParameter(1,"MNT_RC_IN_TILT",0); + } + else + { + m_uas->getParamManager()->setParameter(1,"MNT_RC_IN_TILT",ui.tiltInputChannelComboBox->currentIndex()+4); + } +} -CameraGimbalConfig::CameraGimbalConfig(QWidget *parent) : QWidget(parent) +void CameraGimbalConfig::updateRoll() { - ui.setupUi(this); + if (!m_uas) + { + QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); + return; + } + m_uas->getParamManager()->setParameter(1,ui.rollChannelComboBox->currentText() + "_FUNCTION",8); + m_uas->getParamManager()->setParameter(1,ui.rollChannelComboBox->currentText() + "_MIN",ui.rollServoMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.rollChannelComboBox->currentText() + "_MAX",ui.rollServoMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"MNT_ANGMIN_ROL",ui.rollAngleMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"MNT_ANGMAX_ROL",ui.rollAngleMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.rollChannelComboBox->currentText() + "_REV",(ui.rollReverseCheckBox->isChecked() ? 1 : 0)); + if (ui.rollInputChannelComboBox->currentIndex() == 0) + { + m_uas->getParamManager()->setParameter(1,"MNT_RC_IN_ROLL",0); + } + else + { + m_uas->getParamManager()->setParameter(1,"MNT_RC_IN_ROLL",ui.rollInputChannelComboBox->currentIndex()+4); + } } +void CameraGimbalConfig::updatePan() +{ + if (!m_uas) + { + QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); + return; + } + m_uas->getParamManager()->setParameter(1,ui.panChannelComboBox->currentText() + "_FUNCTION",6); + m_uas->getParamManager()->setParameter(1,ui.panChannelComboBox->currentText() + "_MIN",ui.panServoMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.panChannelComboBox->currentText() + "_MAX",ui.panServoMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"MNT_ANGMIN_PAN",ui.panAngleMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"MNT_ANGMAX_PAN",ui.panAngleMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.panChannelComboBox->currentText() + "_REV",(ui.panReverseCheckBox->isChecked() ? 1 : 0)); + if (ui.panInputChannelComboBox->currentIndex() == 0) + { + m_uas->getParamManager()->setParameter(1,"MNT_RC_IN_PAN",0); + } + else + { + m_uas->getParamManager()->setParameter(1,"MNT_RC_IN_PAN",ui.panInputChannelComboBox->currentIndex()+4); + } +} + +void CameraGimbalConfig::updateShutter() +{ + if (!m_uas) + { + QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); + return; + } + if (ui.shutterChannelComboBox->currentIndex() == 0) //Disabled + { + m_uas->getParamManager()->setParameter(1,"CAM_TRIGG_TYPE",0); + } + else if (ui.shutterChannelComboBox->currentIndex() == 1) //Relay + { + m_uas->getParamManager()->setParameter(1,"CAM_TRIGG_TYPE",1); + } + else if (ui.shutterChannelComboBox->currentIndex() == 2) //Transistor + { + m_uas->getParamManager()->setParameter(1,"CAM_TRIGG_TYPE",4); + } + else + { + m_uas->getParamManager()->setParameter(1,ui.shutterChannelComboBox->currentText() + "_FUNCTION",10); + m_uas->getParamManager()->setParameter(1,"CAM_TRIGG_TYPE",0); + } + m_uas->getParamManager()->setParameter(1,ui.shutterChannelComboBox->currentText() + "_MIN",ui.shutterServoMinSpinBox->value()); + m_uas->getParamManager()->setParameter(1,ui.shutterChannelComboBox->currentText() + "_MAX",ui.shutterServoMaxSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"CAM_SERVO_ON",ui.shutterPushedSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"CAM_SERVO_OFF",ui.shutterNotPushedSpinBox->value()); + m_uas->getParamManager()->setParameter(1,"CAM_DURATION",ui.shutterDurationSpinBox->value()); + + +} + + CameraGimbalConfig::~CameraGimbalConfig() { } + +void CameraGimbalConfig::parameterChanged(int uas, int component, QString parameterName, QVariant value) +{ + +} diff --git a/src/ui/configuration/CameraGimbalConfig.h b/src/ui/configuration/CameraGimbalConfig.h index 4373fbf5f18f5d4301fc30186a1ed06aa62c9a09..92714f4fbfbaccfcf59c46bdb044e1d6cf6ec0e5 100644 --- a/src/ui/configuration/CameraGimbalConfig.h +++ b/src/ui/configuration/CameraGimbalConfig.h @@ -2,16 +2,23 @@ #define CAMERAGIMBALCONFIG_H #include +#include "AP2ConfigWidget.h" #include "ui_CameraGimbalConfig.h" -class CameraGimbalConfig : public QWidget +class CameraGimbalConfig : public AP2ConfigWidget { Q_OBJECT public: explicit CameraGimbalConfig(QWidget *parent = 0); ~CameraGimbalConfig(); - +private slots: + void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void updateTilt(); + void updateRoll(); + void updatePan(); + void updateShutter(); + private: Ui::CameraGimbalConfig ui; }; diff --git a/src/ui/configuration/CameraGimbalConfig.ui b/src/ui/configuration/CameraGimbalConfig.ui index b2b7f607b32dd140fb20b46ac4c05a361378c981..7b1feb4389300bcb3160c92e25d71b743ac543ed 100644 --- a/src/ui/configuration/CameraGimbalConfig.ui +++ b/src/ui/configuration/CameraGimbalConfig.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 959 + 813 @@ -29,7 +29,701 @@ false + + + + 30 + 60 + 541 + 151 + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <h3>Input Ch</h3> + + + + + + + Reverse + + + + + + + <h3>Angle Limits</h3> + + + + + + + <h3>Servo Limits</h3> + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + <h2>Tilt</h2> + + + Qt::AlignCenter + + + + + + + CheckBox + + + + + + + + 250 + 120 + + + + + 250 + 120 + + + + + + + :/files/images/devices/cameraGimalPitch1.png + + + true + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + + + + + + 30 + 230 + 541 + 149 + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + <h3>Input Ch</h3> + + + + + + + Reverse + + + + + + + <h3>Angle Limits</h3> + + + + + + + <h3>Servo Limits</h3> + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + <h2>Roll</h2> + + + Qt::AlignCenter + + + + + + + CheckBox + + + + + + + + 250 + 120 + + + + + 250 + 120 + + + + + + + :/files/images/devices/cameraGimalRoll1.png + + + true + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + + + 30 + 390 + 541 + 149 + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + <h3>Input Ch</h3> + + + + + + + Reverse + + + + + + + <h3>Angle Limits</h3> + + + + + + + <h3>Servo Limits</h3> + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + <h2>Pan</h2> + + + Qt::AlignCenter + + + + + + + CheckBox + + + + + + + + 250 + 120 + + + + + 250 + 120 + + + + + + + :/files/images/devices/cameraGimalYaw.png + + + true + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + 3000 + + + 2000 + + + + + + + + + 30 + 550 + 541 + 181 + + + + + + + + 250 + 120 + + + + + 250 + 120 + + + + + + + :/files/images/devices/Shutter.png + + + true + + + + + + + Duration +(1/10th sec) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Pushed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Not Pushed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <h3>Shutter</h3> + + + + + + + <h3>Servo Limits</h3> + + + + + + + Max + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Min + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + <h2>Shutter</h2> + + + Qt::AlignCenter + + + + + + + <h2>Please set the Ch7 Option to Camera Trigger</h2> + + + Qt::AlignCenter + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + 100 + + + 20 + + + + + + + 3000 + + + 1000 + + + + + + + 3000 + + + 2000 + + + + + + + + + 720 + 70 + 120 + 80 + + + + GroupBox + + - + + +