/** * Sends the config to the board, without saving to the SD card */ void ConfigServoWidget::sendRCInputUpdate() { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject<UAVObjectManager>(); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ManualControlSettings"))); Q_ASSERT(obj); // Now update all fields from the sliders: QString fieldName = QString("ChannelMax"); UAVObjectField * field = obj->getField(fieldName); for (int i = 0; i < 8; i++) field->setValue(inMaxLabels[i]->text().toInt(), i); fieldName = QString("ChannelMin"); field = obj->getField(fieldName); for (int i = 0; i < 8; i++) field->setValue(inMinLabels[i]->text().toInt(), i); fieldName = QString("ChannelNeutral"); field = obj->getField(fieldName); for (int i = 0; i < 8; i++) field->setValue(inSliders[i]->value(), i); // Set RC Receiver type: fieldName = QString("InputMode"); field = obj->getField(fieldName); field->setValue(m_config->receiverType->currentText()); // Set Roll/Pitch/Yaw/Etc assignement: // Rule: if two channels have the same setting (which is wrong!) the higher channel // will get the setting. // First, reset all channel assignements: QList<UAVObjectField*> fieldList = obj->getFields(); foreach (UAVObjectField* field, fieldList) { if (field->getUnits().contains("channel")) { field->setValue(field->getOptions().last()); } } // Then assign according to current GUI state: if (m_config->ch0Assign->currentIndex() != 0) { field = obj->getField(m_config->ch0Assign->currentText()); field->setValue(field->getOptions().at(0)); // -> This way we don't depend on channel naming convention } if (m_config->ch1Assign->currentIndex() != 0) { field = obj->getField(m_config->ch1Assign->currentText()); field->setValue(field->getOptions().at(1)); } if (m_config->ch2Assign->currentIndex() != 0) { field = obj->getField(m_config->ch2Assign->currentText()); field->setValue(field->getOptions().at(2)); } if (m_config->ch3Assign->currentIndex() != 0) { field = obj->getField(m_config->ch3Assign->currentText()); field->setValue(field->getOptions().at(3)); } if (m_config->ch4Assign->currentIndex() != 0) { field = obj->getField(m_config->ch4Assign->currentText()); field->setValue(field->getOptions().at(4)); } if (m_config->ch5Assign->currentIndex() != 0) { field = obj->getField(m_config->ch5Assign->currentText()); field->setValue(field->getOptions().at(5)); } if (m_config->ch6Assign->currentIndex() != 0) { field = obj->getField(m_config->ch6Assign->currentText()); field->setValue(field->getOptions().at(6)); } if (m_config->ch7Assign->currentIndex() != 0) { field = obj->getField(m_config->ch7Assign->currentText()); field->setValue(field->getOptions().at(7)); } // Send all the flight mode settings field = obj->getField(QString("FlightModePosition")); field->setValue(m_config->fmsModePos1->currentText(),0); field->setValue(m_config->fmsModePos2->currentText(),1); field->setValue(m_config->fmsModePos3->currentText(),2); field = obj->getField(QString("Stabilization1Settings")); field->setValue(m_config->fmsSsPos1Roll->currentText(), field->getElementNames().indexOf("Roll")); field->setValue(m_config->fmsSsPos1Pitch->currentText(), field->getElementNames().indexOf("Pitch")); field->setValue(m_config->fmsSsPos1Yaw->currentText(), field->getElementNames().indexOf("Yaw")); field = obj->getField(QString("Stabilization2Settings")); field->setValue(m_config->fmsSsPos2Roll->currentText(), field->getElementNames().indexOf("Roll")); field->setValue(m_config->fmsSsPos2Pitch->currentText(), field->getElementNames().indexOf("Pitch")); field->setValue(m_config->fmsSsPos2Yaw->currentText(), field->getElementNames().indexOf("Yaw")); field = obj->getField(QString("Stabilization3Settings")); field->setValue(m_config->fmsSsPos3Roll->currentText(), field->getElementNames().indexOf("Roll")); field->setValue(m_config->fmsSsPos3Pitch->currentText(), field->getElementNames().indexOf("Pitch")); field->setValue(m_config->fmsSsPos3Yaw->currentText(), field->getElementNames().indexOf("Yaw")); // Save the arming settings field = obj->getField(QString("Arming")); field->setValue(m_config->armControl->currentText()); field = obj->getField(QString("ArmedTimeout")); field->setValue(m_config->armTimeout->value()*1000); // ... and send to the OP Board obj->updated(); }
/** Request the current config from the board */ void ConfigServoWidget::requestRCInputUpdate() { UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("ManualControlSettings"))); Q_ASSERT(obj); obj->requestUpdate(); UAVObjectField *field; // Now update all the slider values: UAVObjectField *field_max = obj->getField(QString("ChannelMax")); UAVObjectField *field_min = obj->getField(QString("ChannelMin")); UAVObjectField *field_neu = obj->getField(QString("ChannelNeutral")); Q_ASSERT(field_max); Q_ASSERT(field_min); Q_ASSERT(field_neu); for (int i = 0; i < 8; i++) { QVariant max = field_max->getValue(i); QVariant min = field_min->getValue(i); QVariant neutral = field_neu->getValue(i); inMaxLabels[i]->setText(max.toString()); inMinLabels[i]->setText(min.toString()); inSliders[i]->setMaximum(max.toInt()); inSliders[i]->setMinimum(min.toInt()); inSliders[i]->setValue(neutral.toInt()); } // Update receiver type field = obj->getField(QString("InputMode")); m_config->receiverType->setCurrentIndex(m_config->receiverType->findText(field->getValue().toString())); // Reset all channel assignement dropdowns: m_config->ch0Assign->setCurrentIndex(0); m_config->ch1Assign->setCurrentIndex(0); m_config->ch2Assign->setCurrentIndex(0); m_config->ch3Assign->setCurrentIndex(0); m_config->ch4Assign->setCurrentIndex(0); m_config->ch5Assign->setCurrentIndex(0); m_config->ch6Assign->setCurrentIndex(0); m_config->ch7Assign->setCurrentIndex(0); // Update all channels assignements QList<UAVObjectField *> fieldList = obj->getFields(); foreach (UAVObjectField *field, fieldList) { if (field->getUnits().contains("channel")) assignChannel(obj, field->getName()); } // Update all the flight mode settingsin the relevant tab field = obj->getField(QString("FlightModePosition")); m_config->fmsModePos1->setCurrentIndex((m_config->fmsModePos1->findText(field->getValue(0).toString()))); m_config->fmsModePos2->setCurrentIndex((m_config->fmsModePos2->findText(field->getValue(1).toString()))); m_config->fmsModePos3->setCurrentIndex((m_config->fmsModePos3->findText(field->getValue(2).toString()))); field = obj->getField(QString("Stabilization1Settings")); m_config->fmsSsPos1Roll->setCurrentIndex(m_config->fmsSsPos1Roll->findText(field->getValue(field->getElementNames().indexOf("Roll")).toString())); m_config->fmsSsPos1Pitch->setCurrentIndex(m_config->fmsSsPos1Pitch->findText(field->getValue(field->getElementNames().indexOf("Pitch")).toString())); m_config->fmsSsPos1Yaw->setCurrentIndex(m_config->fmsSsPos1Yaw->findText(field->getValue(field->getElementNames().indexOf("Yaw")).toString())); field = obj->getField(QString("Stabilization2Settings")); m_config->fmsSsPos2Roll->setCurrentIndex(m_config->fmsSsPos2Roll->findText(field->getValue(field->getElementNames().indexOf("Roll")).toString())); m_config->fmsSsPos2Pitch->setCurrentIndex(m_config->fmsSsPos2Pitch->findText(field->getValue(field->getElementNames().indexOf("Pitch")).toString())); m_config->fmsSsPos2Yaw->setCurrentIndex(m_config->fmsSsPos2Yaw->findText(field->getValue(field->getElementNames().indexOf("Yaw")).toString())); field = obj->getField(QString("Stabilization3Settings")); m_config->fmsSsPos3Roll->setCurrentIndex(m_config->fmsSsPos3Roll->findText(field->getValue(field->getElementNames().indexOf("Roll")).toString())); m_config->fmsSsPos3Pitch->setCurrentIndex(m_config->fmsSsPos3Pitch->findText(field->getValue(field->getElementNames().indexOf("Pitch")).toString())); m_config->fmsSsPos3Yaw->setCurrentIndex(m_config->fmsSsPos3Yaw->findText(field->getValue(field->getElementNames().indexOf("Yaw")).toString())); // Load the arming settings field = obj->getField(QString("Arming")); m_config->armControl->setCurrentIndex(m_config->armControl->findText(field->getValue().toString())); field = obj->getField(QString("ArmedTimeout")); m_config->armTimeout->setValue(field->getValue().toInt()/1000); }