mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
Break the input and output configuration into separate config gadgets
Anyone who wants to, please improve my transmitter icon. I am not an artist. git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@3088 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
64cacc2c69
commit
852e6072c3
@ -18,7 +18,8 @@ HEADERS += configplugin.h \
|
||||
configgadgetoptionspage.h \
|
||||
configgadget.h \
|
||||
fancytabwidget.h \
|
||||
configservowidget.h \
|
||||
configinputwidget.h \
|
||||
configoutputwidget.h \
|
||||
configtaskwidget.h \
|
||||
configairframewidget.h \
|
||||
configtelemetrywidget.h \
|
||||
@ -39,7 +40,8 @@ SOURCES += configplugin.cpp \
|
||||
configgadget.cpp \
|
||||
fancytabwidget.cpp \
|
||||
configtaskwidget.cpp \
|
||||
configservowidget.cpp \
|
||||
configinputwidget.cpp \
|
||||
configoutputwidget.cpp \
|
||||
configairframewidget.cpp \
|
||||
configtelemetrywidget.cpp \
|
||||
configahrswidget.cpp \
|
||||
@ -53,11 +55,13 @@ SOURCES += configplugin.cpp \
|
||||
gyro-calibration.cpp \
|
||||
alignment-calibration.cpp
|
||||
|
||||
FORMS += settingswidget.ui \
|
||||
FORMS += \
|
||||
airframe.ui \
|
||||
telemetry.ui \
|
||||
ahrs.ui \
|
||||
ccpm.ui \
|
||||
stabilization.ui
|
||||
stabilization.ui \
|
||||
input.ui \
|
||||
output.ui
|
||||
|
||||
RESOURCES += configgadget.qrc
|
||||
|
@ -11,5 +11,6 @@
|
||||
<file>images/ccpm_setup.svg</file>
|
||||
<file>images/PipXtreme.png</file>
|
||||
<file>images/gyroscope.svg</file>
|
||||
<file>images/transmitter.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -28,7 +28,8 @@
|
||||
#include "configgadgetwidget.h"
|
||||
|
||||
#include "fancytabwidget.h"
|
||||
#include "configservowidget.h"
|
||||
#include "configinputwidget.h"
|
||||
#include "configoutputwidget.h"
|
||||
#include "configairframewidget.h"
|
||||
#include "configtelemetrywidget.h"
|
||||
|
||||
@ -61,17 +62,20 @@ ConfigGadgetWidget::ConfigGadgetWidget(QWidget *parent) : QWidget(parent)
|
||||
qwd = new ConfigAirframeWidget(this);
|
||||
ftw->insertTab(0, qwd, QIcon(":/configgadget/images/Airframe.png"), QString("Aircraft"));
|
||||
|
||||
qwd = new ConfigServoWidget(this);
|
||||
ftw->insertTab(1, qwd, QIcon(":/configgadget/images/Servo.png"), QString("RC Input/Output"));
|
||||
qwd = new ConfigInputWidget(this);
|
||||
ftw->insertTab(1, qwd, QIcon(":/configgadget/images/transmitter.svg"), QString("Input"));
|
||||
|
||||
qwd = new ConfigOutputWidget(this);
|
||||
ftw->insertTab(2, qwd, QIcon(":/configgadget/images/Servo.png"), QString("Output"));
|
||||
|
||||
qwd = new ConfigAHRSWidget(this);
|
||||
ftw->insertTab(2, qwd, QIcon(":/configgadget/images/AHRS-v1.3.png"), QString("INS"));
|
||||
ftw->insertTab(3, qwd, QIcon(":/configgadget/images/AHRS-v1.3.png"), QString("INS"));
|
||||
|
||||
qwd = new ConfigStabilizationWidget(this);
|
||||
ftw->insertTab(3, qwd, QIcon(":/configgadget/images/gyroscope.svg"), QString("Stabilization"));
|
||||
ftw->insertTab(4, qwd, QIcon(":/configgadget/images/gyroscope.svg"), QString("Stabilization"));
|
||||
|
||||
qwd = new ConfigTelemetryWidget(this);
|
||||
ftw->insertTab(4, qwd, QIcon(":/configgadget/images/XBee.svg"), QString("Telemetry"));
|
||||
ftw->insertTab(5, qwd, QIcon(":/configgadget/images/XBee.svg"), QString("Telemetry"));
|
||||
|
||||
// qwd = new ConfigPipXtremeWidget(this);
|
||||
// ftw->insertTab(5, qwd, QIcon(":/configgadget/images/PipXtreme.png"), QString("PipXtreme"));
|
||||
|
@ -25,7 +25,7 @@
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "configservowidget.h"
|
||||
#include "configinputwidget.h"
|
||||
|
||||
#include "uavtalk/telemetrymanager.h"
|
||||
|
||||
@ -36,9 +36,9 @@
|
||||
#include <QtGui/QVBoxLayout>
|
||||
#include <QtGui/QPushButton>
|
||||
|
||||
ConfigServoWidget::ConfigServoWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
{
|
||||
m_config = new Ui_SettingsWidget();
|
||||
m_config = new Ui_InputWidget();
|
||||
m_config->setupUi(this);
|
||||
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
@ -47,51 +47,6 @@ ConfigServoWidget::ConfigServoWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
// First of all, put all the channel widgets into lists, so that we can
|
||||
// manipulate those:
|
||||
|
||||
// NOTE: for historical reasons, we have objects below called ch0 to ch7, but the convention for OP is Channel 1 to Channel 8.
|
||||
outLabels << m_config->ch0OutValue
|
||||
<< m_config->ch1OutValue
|
||||
<< m_config->ch2OutValue
|
||||
<< m_config->ch3OutValue
|
||||
<< m_config->ch4OutValue
|
||||
<< m_config->ch5OutValue
|
||||
<< m_config->ch6OutValue
|
||||
<< m_config->ch7OutValue;
|
||||
|
||||
outSliders << m_config->ch0OutSlider
|
||||
<< m_config->ch1OutSlider
|
||||
<< m_config->ch2OutSlider
|
||||
<< m_config->ch3OutSlider
|
||||
<< m_config->ch4OutSlider
|
||||
<< m_config->ch5OutSlider
|
||||
<< m_config->ch6OutSlider
|
||||
<< m_config->ch7OutSlider;
|
||||
|
||||
outMin << m_config->ch0OutMin
|
||||
<< m_config->ch1OutMin
|
||||
<< m_config->ch2OutMin
|
||||
<< m_config->ch3OutMin
|
||||
<< m_config->ch4OutMin
|
||||
<< m_config->ch5OutMin
|
||||
<< m_config->ch6OutMin
|
||||
<< m_config->ch7OutMin;
|
||||
|
||||
outMax << m_config->ch0OutMax
|
||||
<< m_config->ch1OutMax
|
||||
<< m_config->ch2OutMax
|
||||
<< m_config->ch3OutMax
|
||||
<< m_config->ch4OutMax
|
||||
<< m_config->ch5OutMax
|
||||
<< m_config->ch6OutMax
|
||||
<< m_config->ch7OutMax;
|
||||
|
||||
reversals << m_config->ch0Rev
|
||||
<< m_config->ch1Rev
|
||||
<< m_config->ch2Rev
|
||||
<< m_config->ch3Rev
|
||||
<< m_config->ch4Rev
|
||||
<< m_config->ch5Rev
|
||||
<< m_config->ch6Rev
|
||||
<< m_config->ch7Rev;
|
||||
|
||||
inMaxLabels << m_config->ch0Max
|
||||
<< m_config->ch1Max
|
||||
@ -161,16 +116,6 @@ ConfigServoWidget::ConfigServoWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
m_config->ch6Assign->addItems(channelsList);
|
||||
m_config->ch7Assign->addItems(channelsList);
|
||||
|
||||
// And for the channel output assignement options
|
||||
m_config->ch0Output->addItem("None");
|
||||
m_config->ch1Output->addItem("None");
|
||||
m_config->ch2Output->addItem("None");
|
||||
m_config->ch3Output->addItem("None");
|
||||
m_config->ch4Output->addItem("None");
|
||||
m_config->ch5Output->addItem("None");
|
||||
m_config->ch6Output->addItem("None");
|
||||
m_config->ch7Output->addItem("None");
|
||||
|
||||
// And the flight mode settings:
|
||||
field = obj->getField(QString("FlightModePosition"));
|
||||
m_config->fmsModePos1->addItems(field->getOptions());
|
||||
@ -194,37 +139,7 @@ ConfigServoWidget::ConfigServoWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
m_config->armControl->clear();
|
||||
m_config->armControl->addItems(field->getOptions());
|
||||
|
||||
obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
fieldList = obj->getFields();
|
||||
foreach (UAVObjectField* field, fieldList) {
|
||||
if (field->getUnits().contains("channel")) {
|
||||
m_config->ch0Output->addItem(field->getName());
|
||||
m_config->ch1Output->addItem(field->getName());
|
||||
m_config->ch2Output->addItem(field->getName());
|
||||
m_config->ch3Output->addItem(field->getName());
|
||||
m_config->ch4Output->addItem(field->getName());
|
||||
m_config->ch5Output->addItem(field->getName());
|
||||
m_config->ch6Output->addItem(field->getName());
|
||||
m_config->ch7Output->addItem(field->getName());
|
||||
}
|
||||
}
|
||||
|
||||
// set the RC input tneutral value textees
|
||||
for (int i = 0; i < 8; i++)
|
||||
inNeuLabels[i]->setText(QString::number(inSliders[i]->value()));
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
connect(outMin[i], SIGNAL(editingFinished()), this, SLOT(setChOutRange()));
|
||||
connect(outMax[i], SIGNAL(editingFinished()), this, SLOT(setChOutRange()));
|
||||
connect(reversals[i], SIGNAL(toggled(bool)), this, SLOT(reverseChannel(bool)));
|
||||
// Now connect the channel out sliders to our signal to send updates in test mode
|
||||
connect(outSliders[i], SIGNAL(valueChanged(int)), this, SLOT(sendChannelTest(int)));
|
||||
}
|
||||
|
||||
connect(m_config->channelOutTest, SIGNAL(toggled(bool)), this, SLOT(runChannelTests(bool)));
|
||||
|
||||
requestRCInputUpdate();
|
||||
requestRCOutputUpdate();
|
||||
|
||||
connect(m_config->saveRCInputToSD, SIGNAL(clicked()), this, SLOT(saveRCInputObject()));
|
||||
connect(m_config->saveRCInputToRAM, SIGNAL(clicked()), this, SLOT(sendRCInputUpdate()));
|
||||
@ -240,12 +155,7 @@ ConfigServoWidget::ConfigServoWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
connect(m_config->saveArmToRAM, SIGNAL(clicked()), this, SLOT(sendRCInputUpdate()));
|
||||
connect(m_config->getArmCurrent, SIGNAL(clicked()), this, SLOT(requestRCInputUpdate()));
|
||||
|
||||
connect(m_config->saveRCOutputToSD, SIGNAL(clicked()), this, SLOT(saveRCOutputObject()));
|
||||
connect(m_config->saveRCOutputToRAM, SIGNAL(clicked()), this, SLOT(sendRCOutputUpdate()));
|
||||
connect(m_config->getRCOutputCurrent, SIGNAL(clicked()), this, SLOT(requestRCOutputUpdate()));
|
||||
|
||||
connect(parent, SIGNAL(autopilotConnected()),this, SLOT(requestRCInputUpdate()));
|
||||
connect(parent, SIGNAL(autopilotConnected()),this, SLOT(requestRCOutputUpdate()));
|
||||
|
||||
connect(m_config->inSlider0, SIGNAL(valueChanged(int)),this, SLOT(onInSliderValueChanged0(int)));
|
||||
connect(m_config->inSlider1, SIGNAL(valueChanged(int)),this, SLOT(onInSliderValueChanged1(int)));
|
||||
@ -274,7 +184,7 @@ ConfigServoWidget::ConfigServoWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
}
|
||||
}
|
||||
|
||||
ConfigServoWidget::~ConfigServoWidget()
|
||||
ConfigInputWidget::~ConfigInputWidget()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
@ -282,42 +192,42 @@ ConfigServoWidget::~ConfigServoWidget()
|
||||
// ************************************
|
||||
// slider value changed signals
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged0(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged0(int value)
|
||||
{
|
||||
inNeuLabels[0]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged1(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged1(int value)
|
||||
{
|
||||
inNeuLabels[1]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged2(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged2(int value)
|
||||
{
|
||||
inNeuLabels[2]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged3(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged3(int value)
|
||||
{
|
||||
inNeuLabels[3]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged4(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged4(int value)
|
||||
{
|
||||
inNeuLabels[4]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged5(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged5(int value)
|
||||
{
|
||||
inNeuLabels[5]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged6(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged6(int value)
|
||||
{
|
||||
inNeuLabels[6]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onInSliderValueChanged7(int value)
|
||||
void ConfigInputWidget::onInSliderValueChanged7(int value)
|
||||
{
|
||||
inNeuLabels[7]->setText(QString::number(value));
|
||||
}
|
||||
@ -325,20 +235,20 @@ void ConfigServoWidget::onInSliderValueChanged7(int value)
|
||||
// ************************************
|
||||
// telemetry start/stop connect/disconnect signals
|
||||
|
||||
void ConfigServoWidget::onTelemetryStart()
|
||||
void ConfigInputWidget::onTelemetryStart()
|
||||
{
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onTelemetryStop()
|
||||
void ConfigInputWidget::onTelemetryStop()
|
||||
{
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onTelemetryConnect()
|
||||
void ConfigInputWidget::onTelemetryConnect()
|
||||
{
|
||||
enableControls(true);
|
||||
}
|
||||
|
||||
void ConfigServoWidget::onTelemetryDisconnect()
|
||||
void ConfigInputWidget::onTelemetryDisconnect()
|
||||
{
|
||||
enableControls(false);
|
||||
m_config->doRCInputCalibration->setChecked(false);
|
||||
@ -346,7 +256,7 @@ void ConfigServoWidget::onTelemetryDisconnect()
|
||||
|
||||
// ************************************
|
||||
|
||||
void ConfigServoWidget::enableControls(bool enable)
|
||||
void ConfigInputWidget::enableControls(bool enable)
|
||||
{
|
||||
m_config->getRCInputCurrent->setEnabled(enable);
|
||||
m_config->saveRCInputToRAM->setEnabled(enable);
|
||||
@ -360,9 +270,6 @@ void ConfigServoWidget::enableControls(bool enable)
|
||||
m_config->saveArmToRAM->setEnabled(enable);
|
||||
m_config->getArmCurrent->setEnabled(enable);
|
||||
|
||||
m_config->saveRCOutputToSD->setEnabled(enable);
|
||||
m_config->saveRCOutputToRAM->setEnabled(enable);
|
||||
m_config->getRCOutputCurrent->setEnabled(enable);
|
||||
|
||||
m_config->doRCInputCalibration->setEnabled(enable);
|
||||
|
||||
@ -376,311 +283,6 @@ void ConfigServoWidget::enableControls(bool enable)
|
||||
m_config->ch7Assign->setEnabled(enable);
|
||||
}
|
||||
|
||||
// ************************************
|
||||
|
||||
/**
|
||||
Sends the channel value to the UAV to move the servo.
|
||||
Returns immediately if we are not in testing mode
|
||||
*/
|
||||
void ConfigServoWidget::sendChannelTest(int value)
|
||||
{
|
||||
// First of all, update the label:
|
||||
QSlider *ob = (QSlider*)QObject::sender();
|
||||
int index = outSliders.indexOf(ob);
|
||||
if (reversals[index]->isChecked())
|
||||
value = outMin[index]->value()-value+outMax[index]->value();
|
||||
else
|
||||
outLabels[index]->setText(QString::number(value));
|
||||
|
||||
outLabels[index]->setText(QString::number(value));
|
||||
if (!m_config->channelOutTest->isChecked())
|
||||
return;
|
||||
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("ActuatorCommand")));
|
||||
|
||||
UAVObjectField * channel = obj->getField("Channel");
|
||||
channel->setValue(value,index);
|
||||
obj->updated();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
Toggles the channel testing mode by making the GCS take over
|
||||
the ActuatorCommand objects
|
||||
*/
|
||||
void ConfigServoWidget::runChannelTests(bool state)
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorCommand")));
|
||||
UAVObject::Metadata mdata = obj->getMetadata();
|
||||
if (state)
|
||||
{
|
||||
accInitialData = mdata;
|
||||
mdata.flightAccess = UAVObject::ACCESS_READONLY;
|
||||
mdata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE;
|
||||
mdata.gcsTelemetryAcked = false;
|
||||
mdata.gcsTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE;
|
||||
mdata.gcsTelemetryUpdatePeriod = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
mdata = accInitialData; // Restore metadata
|
||||
}
|
||||
obj->setMetadata(mdata);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************
|
||||
* Output settings
|
||||
*******************************/
|
||||
|
||||
/**
|
||||
Request the current config from the board (RC Output)
|
||||
*/
|
||||
void ConfigServoWidget::requestRCOutputUpdate()
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
// Get the Airframe type from the system settings:
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("SystemSettings")));
|
||||
Q_ASSERT(obj);
|
||||
obj->requestUpdate();
|
||||
UAVObjectField *field = obj->getField(QString("AirframeType"));
|
||||
m_config->aircraftType->setText(QString("Aircraft type: ") + field->getValue().toString());
|
||||
|
||||
// Reset all channel assignements:
|
||||
m_config->ch0Output->setCurrentIndex(0);
|
||||
m_config->ch1Output->setCurrentIndex(0);
|
||||
m_config->ch2Output->setCurrentIndex(0);
|
||||
m_config->ch3Output->setCurrentIndex(0);
|
||||
m_config->ch4Output->setCurrentIndex(0);
|
||||
m_config->ch5Output->setCurrentIndex(0);
|
||||
m_config->ch6Output->setCurrentIndex(0);
|
||||
m_config->ch7Output->setCurrentIndex(0);
|
||||
|
||||
// Get the channel assignements:
|
||||
obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
Q_ASSERT(obj);
|
||||
obj->requestUpdate();
|
||||
QList<UAVObjectField*> fieldList = obj->getFields();
|
||||
foreach (UAVObjectField* field, fieldList) {
|
||||
if (field->getUnits().contains("channel")) {
|
||||
assignOutputChannel(obj,field->getName());
|
||||
}
|
||||
}
|
||||
|
||||
// Get Output rates for both banks
|
||||
field = obj->getField(QString("ChannelUpdateFreq"));
|
||||
m_config->outputRate1->setValue(field->getValue(0).toInt());
|
||||
m_config->outputRate2->setValue(field->getValue(1).toInt());
|
||||
|
||||
// Get Channel ranges:
|
||||
for (int i=0;i<8;i++) {
|
||||
field = obj->getField(QString("ChannelMin"));
|
||||
int minValue = field->getValue(i).toInt();
|
||||
outMin[i]->setValue(minValue);
|
||||
field = obj->getField(QString("ChannelMax"));
|
||||
int maxValue = field->getValue(i).toInt();
|
||||
outMax[i]->setValue(maxValue);
|
||||
if (maxValue>minValue) {
|
||||
outSliders[i]->setMinimum(minValue);
|
||||
outSliders[i]->setMaximum(maxValue);
|
||||
reversals[i]->setChecked(false);
|
||||
} else {
|
||||
outSliders[i]->setMinimum(maxValue);
|
||||
outSliders[i]->setMaximum(minValue);
|
||||
reversals[i]->setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelNeutral"));
|
||||
for (int i=0; i<8; i++) {
|
||||
int value = field->getValue(i).toInt();
|
||||
outSliders[i]->setValue(value);
|
||||
outLabels[i]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the config to the board, without saving to the SD card (RC Output)
|
||||
*/
|
||||
void ConfigServoWidget::sendRCOutputUpdate()
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
Q_ASSERT(obj);
|
||||
|
||||
// Now send channel ranges:
|
||||
UAVObjectField * field = obj->getField(QString("ChannelMax"));
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field->setValue(outMax[i]->value(),i);
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelMin"));
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field->setValue(outMin[i]->value(),i);
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelNeutral"));
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field->setValue(outSliders[i]->value(),i);
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelUpdateFreq"));
|
||||
field->setValue(m_config->outputRate1->value(),0);
|
||||
field->setValue(m_config->outputRate2->value(),1);
|
||||
|
||||
// Set Actuator assignement for each channel:
|
||||
// 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) {
|
||||
// NOTE: we assume that all options in ActuatorSettings are a channel assignement
|
||||
// except for the options called "ChannelXXX"
|
||||
if (field->getUnits().contains("channel")) {
|
||||
field->setValue(field->getOptions().last());
|
||||
}
|
||||
}
|
||||
|
||||
if (m_config->ch0Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch0Output->currentText());
|
||||
field->setValue(field->getOptions().at(0)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch1Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch1Output->currentText());
|
||||
field->setValue(field->getOptions().at(1)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch2Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch2Output->currentText());
|
||||
field->setValue(field->getOptions().at(2)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch3Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch3Output->currentText());
|
||||
field->setValue(field->getOptions().at(3)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch4Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch4Output->currentText());
|
||||
field->setValue(field->getOptions().at(4)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch5Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch5Output->currentText());
|
||||
field->setValue(field->getOptions().at(5)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch6Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch6Output->currentText());
|
||||
field->setValue(field->getOptions().at(6)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch7Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch7Output->currentText());
|
||||
field->setValue(field->getOptions().at(7)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
|
||||
// ... and send to the OP Board
|
||||
obj->updated();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Sends the config to the board and request saving into the SD card (RC Output)
|
||||
*/
|
||||
void ConfigServoWidget::saveRCOutputObject()
|
||||
{
|
||||
// Send update so that the latest value is saved
|
||||
sendRCOutputUpdate();
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
Q_ASSERT(obj);
|
||||
updateObjectPersistance(ObjectPersistence::OPERATION_SAVE, obj);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Sets the minimum/maximum value of the channel 0 to seven output sliders.
|
||||
Have to do it here because setMinimum is not a slot.
|
||||
|
||||
One added trick: if the slider is at either its max or its min when the value
|
||||
is changed, then keep it on the max/min.
|
||||
*/
|
||||
void ConfigServoWidget::setChOutRange()
|
||||
{
|
||||
QSpinBox *spinbox = (QSpinBox*)QObject::sender();
|
||||
|
||||
int index = outMin.indexOf(spinbox); // This is the channel number
|
||||
if (index < 0)
|
||||
index = outMax.indexOf(spinbox); // We can't know if the signal came from min or max
|
||||
|
||||
QSlider *slider = outSliders[index];
|
||||
|
||||
int oldMini = slider->minimum();
|
||||
int oldMaxi = slider->maximum();
|
||||
|
||||
if (outMin[index]->value()<outMax[index]->value())
|
||||
{
|
||||
slider->setRange(outMin[index]->value(), outMax[index]->value());
|
||||
reversals[index]->setChecked(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
slider->setRange(outMax[index]->value(), outMin[index]->value());
|
||||
reversals[index]->setChecked(true);
|
||||
}
|
||||
|
||||
if (slider->value() == oldMini)
|
||||
slider->setValue(slider->minimum());
|
||||
|
||||
// if (slider->value() == oldMaxi)
|
||||
// slider->setValue(slider->maximum()); // this can be dangerous if it happens to be controlling a motor at the time!
|
||||
}
|
||||
|
||||
/**
|
||||
Reverses the channel when the checkbox is clicked
|
||||
*/
|
||||
void ConfigServoWidget::reverseChannel(bool state)
|
||||
{
|
||||
QCheckBox *checkbox = (QCheckBox*)QObject::sender();
|
||||
int index = reversals.indexOf(checkbox); // This is the channel number
|
||||
|
||||
// Sanity check: if state became true, make sure the Maxvalue was higher than Minvalue
|
||||
// the situations below can happen!
|
||||
if (state && (outMax[index]->value()<outMin[index]->value()))
|
||||
return;
|
||||
if (!state && (outMax[index]->value()>outMin[index]->value()))
|
||||
return;
|
||||
|
||||
// Now, swap the min & max values (only on the spinboxes, the slider
|
||||
// does not change!
|
||||
int temp = outMax[index]->value();
|
||||
outMax[index]->setValue(outMin[index]->value());
|
||||
outMin[index]->setValue(temp);
|
||||
|
||||
// Also update the channel value
|
||||
// This is a trick to force the slider to update its value and
|
||||
// emit the right signal itself, because our sendChannelTest(int) method
|
||||
// relies on the object sender's identity.
|
||||
if (outSliders[index]->value()<outSliders[index]->maximum()) {
|
||||
outSliders[index]->setValue(outSliders[index]->value()+1);
|
||||
outSliders[index]->setValue(outSliders[index]->value()-1);
|
||||
} else {
|
||||
outSliders[index]->setValue(outSliders[index]->value()-1);
|
||||
outSliders[index]->setValue(outSliders[index]->value()+1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/********************************
|
||||
* Input settings
|
||||
@ -689,7 +291,7 @@ void ConfigServoWidget::reverseChannel(bool state)
|
||||
/**
|
||||
Request the current config from the board
|
||||
*/
|
||||
void ConfigServoWidget::requestRCInputUpdate()
|
||||
void ConfigInputWidget::requestRCInputUpdate()
|
||||
{
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("ManualControlSettings")));
|
||||
Q_ASSERT(obj);
|
||||
@ -769,7 +371,7 @@ void ConfigServoWidget::requestRCInputUpdate()
|
||||
/**
|
||||
* Sends the config to the board, without saving to the SD card
|
||||
*/
|
||||
void ConfigServoWidget::sendRCInputUpdate()
|
||||
void ConfigInputWidget::sendRCInputUpdate()
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
@ -876,7 +478,7 @@ void ConfigServoWidget::sendRCInputUpdate()
|
||||
/**
|
||||
Sends the config to the board and request saving into the SD card
|
||||
*/
|
||||
void ConfigServoWidget::saveRCInputObject()
|
||||
void ConfigInputWidget::saveRCInputObject()
|
||||
{
|
||||
// Send update so that the latest value is saved
|
||||
sendRCInputUpdate();
|
||||
@ -891,7 +493,7 @@ void ConfigServoWidget::saveRCInputObject()
|
||||
/**
|
||||
* Set the dropdown option for a channel Input assignement
|
||||
*/
|
||||
void ConfigServoWidget::assignChannel(UAVDataObject *obj, QString str)
|
||||
void ConfigInputWidget::assignChannel(UAVDataObject *obj, QString str)
|
||||
{
|
||||
UAVObjectField* field = obj->getField(str);
|
||||
QStringList options = field->getOptions();
|
||||
@ -923,48 +525,11 @@ void ConfigServoWidget::assignChannel(UAVDataObject *obj, QString str)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the dropdown option for a channel output assignement
|
||||
*/
|
||||
void ConfigServoWidget::assignOutputChannel(UAVDataObject *obj, QString str)
|
||||
{
|
||||
UAVObjectField* field = obj->getField(str);
|
||||
QStringList options = field->getOptions();
|
||||
switch (options.indexOf(field->getValue().toString())) {
|
||||
case 0:
|
||||
m_config->ch0Output->setCurrentIndex(m_config->ch0Output->findText(str));
|
||||
break;
|
||||
case 1:
|
||||
m_config->ch1Output->setCurrentIndex(m_config->ch1Output->findText(str));
|
||||
break;
|
||||
case 2:
|
||||
m_config->ch2Output->setCurrentIndex(m_config->ch2Output->findText(str));
|
||||
break;
|
||||
case 3:
|
||||
m_config->ch3Output->setCurrentIndex(m_config->ch3Output->findText(str));
|
||||
break;
|
||||
case 4:
|
||||
m_config->ch4Output->setCurrentIndex(m_config->ch4Output->findText(str));
|
||||
break;
|
||||
case 5:
|
||||
m_config->ch5Output->setCurrentIndex(m_config->ch5Output->findText(str));
|
||||
break;
|
||||
case 6:
|
||||
m_config->ch6Output->setCurrentIndex(m_config->ch6Output->findText(str));
|
||||
break;
|
||||
case 7:
|
||||
m_config->ch7Output->setCurrentIndex(m_config->ch7Output->findText(str));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Updates the slider positions and min/max values
|
||||
*
|
||||
*/
|
||||
void ConfigServoWidget::updateChannels(UAVObject* controlCommand)
|
||||
void ConfigInputWidget::updateChannels(UAVObject* controlCommand)
|
||||
{
|
||||
|
||||
QString fieldName = QString("Connected");
|
||||
@ -1002,7 +567,7 @@ void ConfigServoWidget::updateChannels(UAVObject* controlCommand)
|
||||
|
||||
field = controlCommand->getField(QString("Channel"));
|
||||
for (int i = 0; i < 8; i++)
|
||||
updateChannelInSlider(inSliders[i], inMinLabels[i], inMaxLabels[i], reversals[i], field->getValue(i).toInt());
|
||||
updateChannelInSlider(inSliders[i], inMinLabels[i], inMaxLabels[i], field->getValue(i).toInt());
|
||||
|
||||
firstUpdate = false;
|
||||
}
|
||||
@ -1062,11 +627,8 @@ void ConfigServoWidget::updateChannels(UAVObject* controlCommand)
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigServoWidget::updateChannelInSlider(QSlider *slider, QLabel *min, QLabel *max, QCheckBox *rev, int value)
|
||||
void ConfigInputWidget::updateChannelInSlider(QSlider *slider, QLabel *min, QLabel *max, int value)
|
||||
{
|
||||
Q_UNUSED(rev);
|
||||
|
||||
// if (!slider || !min || !max || !rev)
|
||||
if (!slider || !min || !max)
|
||||
return;
|
||||
|
@ -24,10 +24,10 @@
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef CONFIGSERVOWIDGET_H
|
||||
#define CONFIGSERVOWIDGET_H
|
||||
#ifndef CONFIGINPUTWIDGET_H
|
||||
#define CONFIGINPUTWIDGET_H
|
||||
|
||||
#include "ui_settingswidget.h"
|
||||
#include "ui_input.h"
|
||||
#include "configtaskwidget.h"
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
@ -35,15 +35,15 @@
|
||||
#include <QtGui/QWidget>
|
||||
#include <QList>
|
||||
|
||||
class Ui_SettingsWidget;
|
||||
class Ui_InputWidget;
|
||||
|
||||
class ConfigServoWidget: public ConfigTaskWidget
|
||||
class ConfigInputWidget: public ConfigTaskWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ConfigServoWidget(QWidget *parent = 0);
|
||||
~ConfigServoWidget();
|
||||
ConfigInputWidget(QWidget *parent = 0);
|
||||
~ConfigInputWidget();
|
||||
|
||||
public slots:
|
||||
void onTelemetryStart();
|
||||
@ -61,11 +61,11 @@ public slots:
|
||||
void onInSliderValueChanged7(int value);
|
||||
|
||||
private:
|
||||
Ui_SettingsWidget *m_config;
|
||||
Ui_InputWidget *m_config;
|
||||
|
||||
QList<QSlider> sliders;
|
||||
|
||||
void updateChannelInSlider(QSlider *slider, QLabel *min, QLabel *max, QCheckBox *rev, int value);
|
||||
void updateChannelInSlider(QSlider *slider, QLabel *min, QLabel *max, int value);
|
||||
|
||||
void assignChannel(UAVDataObject *obj, QString str);
|
||||
void assignOutputChannel(UAVDataObject *obj, QString str);
|
||||
@ -74,13 +74,7 @@ private:
|
||||
|
||||
UAVObject::Metadata accInitialData;
|
||||
|
||||
QList<QSlider*> outSliders;
|
||||
QList<QSpinBox*> outMin;
|
||||
QList<QSpinBox*> outMax;
|
||||
QList<QCheckBox*> reversals;
|
||||
QList<QLabel*> outLabels;
|
||||
|
||||
QList<QSlider*> inSliders;
|
||||
QList<QSlider*> inSliders;
|
||||
QList<QLabel*> inMaxLabels;
|
||||
QList<QLabel*> inMinLabels;
|
||||
QList<QLabel*> inNeuLabels;
|
||||
@ -94,13 +88,6 @@ private slots:
|
||||
void requestRCInputUpdate();
|
||||
void sendRCInputUpdate();
|
||||
void saveRCInputObject();
|
||||
void requestRCOutputUpdate();
|
||||
void sendRCOutputUpdate();
|
||||
void saveRCOutputObject();
|
||||
void runChannelTests(bool state);
|
||||
void sendChannelTest(int value);
|
||||
void setChOutRange();
|
||||
void reverseChannel(bool state);
|
||||
};
|
||||
|
||||
#endif
|
528
ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp
Normal file
528
ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp
Normal file
@ -0,0 +1,528 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file configservowidget.cpp
|
||||
* @author E. Lafargue & The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup ConfigPlugin Config Plugin
|
||||
* @{
|
||||
* @brief Servo input/output configuration panel for the config gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "configoutputwidget.h"
|
||||
|
||||
#include "uavtalk/telemetrymanager.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QStringList>
|
||||
#include <QtGui/QWidget>
|
||||
#include <QtGui/QTextEdit>
|
||||
#include <QtGui/QVBoxLayout>
|
||||
#include <QtGui/QPushButton>
|
||||
|
||||
ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
{
|
||||
m_config = new Ui_OutputWidget();
|
||||
m_config->setupUi(this);
|
||||
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
// First of all, put all the channel widgets into lists, so that we can
|
||||
// manipulate those:
|
||||
|
||||
// NOTE: for historical reasons, we have objects below called ch0 to ch7, but the convention for OP is Channel 1 to Channel 8.
|
||||
outLabels << m_config->ch0OutValue
|
||||
<< m_config->ch1OutValue
|
||||
<< m_config->ch2OutValue
|
||||
<< m_config->ch3OutValue
|
||||
<< m_config->ch4OutValue
|
||||
<< m_config->ch5OutValue
|
||||
<< m_config->ch6OutValue
|
||||
<< m_config->ch7OutValue;
|
||||
|
||||
outSliders << m_config->ch0OutSlider
|
||||
<< m_config->ch1OutSlider
|
||||
<< m_config->ch2OutSlider
|
||||
<< m_config->ch3OutSlider
|
||||
<< m_config->ch4OutSlider
|
||||
<< m_config->ch5OutSlider
|
||||
<< m_config->ch6OutSlider
|
||||
<< m_config->ch7OutSlider;
|
||||
|
||||
outMin << m_config->ch0OutMin
|
||||
<< m_config->ch1OutMin
|
||||
<< m_config->ch2OutMin
|
||||
<< m_config->ch3OutMin
|
||||
<< m_config->ch4OutMin
|
||||
<< m_config->ch5OutMin
|
||||
<< m_config->ch6OutMin
|
||||
<< m_config->ch7OutMin;
|
||||
|
||||
outMax << m_config->ch0OutMax
|
||||
<< m_config->ch1OutMax
|
||||
<< m_config->ch2OutMax
|
||||
<< m_config->ch3OutMax
|
||||
<< m_config->ch4OutMax
|
||||
<< m_config->ch5OutMax
|
||||
<< m_config->ch6OutMax
|
||||
<< m_config->ch7OutMax;
|
||||
|
||||
reversals << m_config->ch0Rev
|
||||
<< m_config->ch1Rev
|
||||
<< m_config->ch2Rev
|
||||
<< m_config->ch3Rev
|
||||
<< m_config->ch4Rev
|
||||
<< m_config->ch5Rev
|
||||
<< m_config->ch6Rev
|
||||
<< m_config->ch7Rev;
|
||||
|
||||
UAVDataObject * obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
QList<UAVObjectField*> fieldList = obj->getFields();
|
||||
foreach (UAVObjectField* field, fieldList) {
|
||||
if (field->getUnits().contains("channel")) {
|
||||
m_config->ch0Output->addItem(field->getName());
|
||||
m_config->ch1Output->addItem(field->getName());
|
||||
m_config->ch2Output->addItem(field->getName());
|
||||
m_config->ch3Output->addItem(field->getName());
|
||||
m_config->ch4Output->addItem(field->getName());
|
||||
m_config->ch5Output->addItem(field->getName());
|
||||
m_config->ch6Output->addItem(field->getName());
|
||||
m_config->ch7Output->addItem(field->getName());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
connect(outMin[i], SIGNAL(editingFinished()), this, SLOT(setChOutRange()));
|
||||
connect(outMax[i], SIGNAL(editingFinished()), this, SLOT(setChOutRange()));
|
||||
connect(reversals[i], SIGNAL(toggled(bool)), this, SLOT(reverseChannel(bool)));
|
||||
// Now connect the channel out sliders to our signal to send updates in test mode
|
||||
connect(outSliders[i], SIGNAL(valueChanged(int)), this, SLOT(sendChannelTest(int)));
|
||||
}
|
||||
|
||||
connect(m_config->channelOutTest, SIGNAL(toggled(bool)), this, SLOT(runChannelTests(bool)));
|
||||
|
||||
requestRCOutputUpdate();
|
||||
|
||||
connect(m_config->saveRCOutputToSD, SIGNAL(clicked()), this, SLOT(saveRCOutputObject()));
|
||||
connect(m_config->saveRCOutputToRAM, SIGNAL(clicked()), this, SLOT(sendRCOutputUpdate()));
|
||||
connect(m_config->getRCOutputCurrent, SIGNAL(clicked()), this, SLOT(requestRCOutputUpdate()));
|
||||
|
||||
connect(parent, SIGNAL(autopilotConnected()),this, SLOT(requestRCOutputUpdate()));
|
||||
|
||||
firstUpdate = true;
|
||||
|
||||
enableControls(false);
|
||||
|
||||
// Listen to telemetry connection events
|
||||
if (pm)
|
||||
{
|
||||
TelemetryManager *tm = pm->getObject<TelemetryManager>();
|
||||
if (tm)
|
||||
{
|
||||
connect(tm, SIGNAL(myStart()), this, SLOT(onTelemetryStart()));
|
||||
connect(tm, SIGNAL(myStop()), this, SLOT(onTelemetryStop()));
|
||||
connect(tm, SIGNAL(connected()), this, SLOT(onTelemetryConnect()));
|
||||
connect(tm, SIGNAL(disconnected()), this, SLOT(onTelemetryDisconnect()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ConfigOutputWidget::~ConfigOutputWidget()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ************************************
|
||||
// telemetry start/stop connect/disconnect signals
|
||||
|
||||
void ConfigOutputWidget::onTelemetryStart()
|
||||
{
|
||||
}
|
||||
|
||||
void ConfigOutputWidget::onTelemetryStop()
|
||||
{
|
||||
}
|
||||
|
||||
void ConfigOutputWidget::onTelemetryConnect()
|
||||
{
|
||||
enableControls(true);
|
||||
}
|
||||
|
||||
void ConfigOutputWidget::onTelemetryDisconnect()
|
||||
{
|
||||
enableControls(false);
|
||||
}
|
||||
|
||||
// ************************************
|
||||
|
||||
void ConfigOutputWidget::enableControls(bool enable)
|
||||
{
|
||||
m_config->saveRCOutputToSD->setEnabled(enable);
|
||||
m_config->saveRCOutputToRAM->setEnabled(enable);
|
||||
m_config->getRCOutputCurrent->setEnabled(enable);
|
||||
}
|
||||
|
||||
// ************************************
|
||||
|
||||
/**
|
||||
Toggles the channel testing mode by making the GCS take over
|
||||
the ActuatorCommand objects
|
||||
*/
|
||||
void ConfigOutputWidget::runChannelTests(bool state)
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorCommand")));
|
||||
UAVObject::Metadata mdata = obj->getMetadata();
|
||||
if (state)
|
||||
{
|
||||
accInitialData = mdata;
|
||||
mdata.flightAccess = UAVObject::ACCESS_READONLY;
|
||||
mdata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE;
|
||||
mdata.gcsTelemetryAcked = false;
|
||||
mdata.gcsTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE;
|
||||
mdata.gcsTelemetryUpdatePeriod = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
mdata = accInitialData; // Restore metadata
|
||||
}
|
||||
obj->setMetadata(mdata);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the dropdown option for a channel output assignement
|
||||
*/
|
||||
void ConfigOutputWidget::assignOutputChannel(UAVDataObject *obj, QString str)
|
||||
{
|
||||
UAVObjectField* field = obj->getField(str);
|
||||
QStringList options = field->getOptions();
|
||||
switch (options.indexOf(field->getValue().toString())) {
|
||||
case 0:
|
||||
m_config->ch0Output->setCurrentIndex(m_config->ch0Output->findText(str));
|
||||
break;
|
||||
case 1:
|
||||
m_config->ch1Output->setCurrentIndex(m_config->ch1Output->findText(str));
|
||||
break;
|
||||
case 2:
|
||||
m_config->ch2Output->setCurrentIndex(m_config->ch2Output->findText(str));
|
||||
break;
|
||||
case 3:
|
||||
m_config->ch3Output->setCurrentIndex(m_config->ch3Output->findText(str));
|
||||
break;
|
||||
case 4:
|
||||
m_config->ch4Output->setCurrentIndex(m_config->ch4Output->findText(str));
|
||||
break;
|
||||
case 5:
|
||||
m_config->ch5Output->setCurrentIndex(m_config->ch5Output->findText(str));
|
||||
break;
|
||||
case 6:
|
||||
m_config->ch6Output->setCurrentIndex(m_config->ch6Output->findText(str));
|
||||
break;
|
||||
case 7:
|
||||
m_config->ch7Output->setCurrentIndex(m_config->ch7Output->findText(str));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Sends the channel value to the UAV to move the servo.
|
||||
Returns immediately if we are not in testing mode
|
||||
*/
|
||||
void ConfigOutputWidget::sendChannelTest(int value)
|
||||
{
|
||||
// First of all, update the label:
|
||||
QSlider *ob = (QSlider*)QObject::sender();
|
||||
int index = outSliders.indexOf(ob);
|
||||
if (reversals[index]->isChecked())
|
||||
value = outMin[index]->value()-value+outMax[index]->value();
|
||||
else
|
||||
outLabels[index]->setText(QString::number(value));
|
||||
|
||||
outLabels[index]->setText(QString::number(value));
|
||||
if (!m_config->channelOutTest->isChecked())
|
||||
return;
|
||||
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("ActuatorCommand")));
|
||||
|
||||
UAVObjectField * channel = obj->getField("Channel");
|
||||
channel->setValue(value,index);
|
||||
obj->updated();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************
|
||||
* Output settings
|
||||
*******************************/
|
||||
|
||||
/**
|
||||
Request the current config from the board (RC Output)
|
||||
*/
|
||||
void ConfigOutputWidget::requestRCOutputUpdate()
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
// Get the Airframe type from the system settings:
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("SystemSettings")));
|
||||
Q_ASSERT(obj);
|
||||
obj->requestUpdate();
|
||||
UAVObjectField *field = obj->getField(QString("AirframeType"));
|
||||
m_config->aircraftType->setText(QString("Aircraft type: ") + field->getValue().toString());
|
||||
|
||||
// Reset all channel assignements:
|
||||
m_config->ch0Output->setCurrentIndex(0);
|
||||
m_config->ch1Output->setCurrentIndex(0);
|
||||
m_config->ch2Output->setCurrentIndex(0);
|
||||
m_config->ch3Output->setCurrentIndex(0);
|
||||
m_config->ch4Output->setCurrentIndex(0);
|
||||
m_config->ch5Output->setCurrentIndex(0);
|
||||
m_config->ch6Output->setCurrentIndex(0);
|
||||
m_config->ch7Output->setCurrentIndex(0);
|
||||
|
||||
// Get the channel assignements:
|
||||
obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
Q_ASSERT(obj);
|
||||
obj->requestUpdate();
|
||||
QList<UAVObjectField*> fieldList = obj->getFields();
|
||||
foreach (UAVObjectField* field, fieldList) {
|
||||
if (field->getUnits().contains("channel")) {
|
||||
assignOutputChannel(obj,field->getName());
|
||||
}
|
||||
}
|
||||
|
||||
// Get Output rates for both banks
|
||||
field = obj->getField(QString("ChannelUpdateFreq"));
|
||||
m_config->outputRate1->setValue(field->getValue(0).toInt());
|
||||
m_config->outputRate2->setValue(field->getValue(1).toInt());
|
||||
|
||||
// Get Channel ranges:
|
||||
for (int i=0;i<8;i++) {
|
||||
field = obj->getField(QString("ChannelMin"));
|
||||
int minValue = field->getValue(i).toInt();
|
||||
outMin[i]->setValue(minValue);
|
||||
field = obj->getField(QString("ChannelMax"));
|
||||
int maxValue = field->getValue(i).toInt();
|
||||
outMax[i]->setValue(maxValue);
|
||||
if (maxValue>minValue) {
|
||||
outSliders[i]->setMinimum(minValue);
|
||||
outSliders[i]->setMaximum(maxValue);
|
||||
reversals[i]->setChecked(false);
|
||||
} else {
|
||||
outSliders[i]->setMinimum(maxValue);
|
||||
outSliders[i]->setMaximum(minValue);
|
||||
reversals[i]->setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelNeutral"));
|
||||
for (int i=0; i<8; i++) {
|
||||
int value = field->getValue(i).toInt();
|
||||
outSliders[i]->setValue(value);
|
||||
outLabels[i]->setText(QString::number(value));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the config to the board, without saving to the SD card (RC Output)
|
||||
*/
|
||||
void ConfigOutputWidget::sendRCOutputUpdate()
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
Q_ASSERT(obj);
|
||||
|
||||
// Now send channel ranges:
|
||||
UAVObjectField * field = obj->getField(QString("ChannelMax"));
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field->setValue(outMax[i]->value(),i);
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelMin"));
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field->setValue(outMin[i]->value(),i);
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelNeutral"));
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field->setValue(outSliders[i]->value(),i);
|
||||
}
|
||||
|
||||
field = obj->getField(QString("ChannelUpdateFreq"));
|
||||
field->setValue(m_config->outputRate1->value(),0);
|
||||
field->setValue(m_config->outputRate2->value(),1);
|
||||
|
||||
// Set Actuator assignement for each channel:
|
||||
// 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) {
|
||||
// NOTE: we assume that all options in ActuatorSettings are a channel assignement
|
||||
// except for the options called "ChannelXXX"
|
||||
if (field->getUnits().contains("channel")) {
|
||||
field->setValue(field->getOptions().last());
|
||||
}
|
||||
}
|
||||
|
||||
if (m_config->ch0Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch0Output->currentText());
|
||||
field->setValue(field->getOptions().at(0)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch1Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch1Output->currentText());
|
||||
field->setValue(field->getOptions().at(1)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch2Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch2Output->currentText());
|
||||
field->setValue(field->getOptions().at(2)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch3Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch3Output->currentText());
|
||||
field->setValue(field->getOptions().at(3)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch4Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch4Output->currentText());
|
||||
field->setValue(field->getOptions().at(4)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch5Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch5Output->currentText());
|
||||
field->setValue(field->getOptions().at(5)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch6Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch6Output->currentText());
|
||||
field->setValue(field->getOptions().at(6)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
if (m_config->ch7Output->currentIndex() != 0) {
|
||||
field = obj->getField(m_config->ch7Output->currentText());
|
||||
field->setValue(field->getOptions().at(7)); // -> This way we don't depend on channel naming convention
|
||||
}
|
||||
|
||||
// ... and send to the OP Board
|
||||
obj->updated();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Sends the config to the board and request saving into the SD card (RC Output)
|
||||
*/
|
||||
void ConfigOutputWidget::saveRCOutputObject()
|
||||
{
|
||||
// Send update so that the latest value is saved
|
||||
sendRCOutputUpdate();
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ActuatorSettings")));
|
||||
Q_ASSERT(obj);
|
||||
updateObjectPersistance(ObjectPersistence::OPERATION_SAVE, obj);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Sets the minimum/maximum value of the channel 0 to seven output sliders.
|
||||
Have to do it here because setMinimum is not a slot.
|
||||
|
||||
One added trick: if the slider is at either its max or its min when the value
|
||||
is changed, then keep it on the max/min.
|
||||
*/
|
||||
void ConfigOutputWidget::setChOutRange()
|
||||
{
|
||||
QSpinBox *spinbox = (QSpinBox*)QObject::sender();
|
||||
|
||||
int index = outMin.indexOf(spinbox); // This is the channel number
|
||||
if (index < 0)
|
||||
index = outMax.indexOf(spinbox); // We can't know if the signal came from min or max
|
||||
|
||||
QSlider *slider = outSliders[index];
|
||||
|
||||
int oldMini = slider->minimum();
|
||||
int oldMaxi = slider->maximum();
|
||||
|
||||
if (outMin[index]->value()<outMax[index]->value())
|
||||
{
|
||||
slider->setRange(outMin[index]->value(), outMax[index]->value());
|
||||
reversals[index]->setChecked(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
slider->setRange(outMax[index]->value(), outMin[index]->value());
|
||||
reversals[index]->setChecked(true);
|
||||
}
|
||||
|
||||
if (slider->value() == oldMini)
|
||||
slider->setValue(slider->minimum());
|
||||
|
||||
// if (slider->value() == oldMaxi)
|
||||
// slider->setValue(slider->maximum()); // this can be dangerous if it happens to be controlling a motor at the time!
|
||||
}
|
||||
|
||||
/**
|
||||
Reverses the channel when the checkbox is clicked
|
||||
*/
|
||||
void ConfigOutputWidget::reverseChannel(bool state)
|
||||
{
|
||||
QCheckBox *checkbox = (QCheckBox*)QObject::sender();
|
||||
int index = reversals.indexOf(checkbox); // This is the channel number
|
||||
|
||||
// Sanity check: if state became true, make sure the Maxvalue was higher than Minvalue
|
||||
// the situations below can happen!
|
||||
if (state && (outMax[index]->value()<outMin[index]->value()))
|
||||
return;
|
||||
if (!state && (outMax[index]->value()>outMin[index]->value()))
|
||||
return;
|
||||
|
||||
// Now, swap the min & max values (only on the spinboxes, the slider
|
||||
// does not change!
|
||||
int temp = outMax[index]->value();
|
||||
outMax[index]->setValue(outMin[index]->value());
|
||||
outMin[index]->setValue(temp);
|
||||
|
||||
// Also update the channel value
|
||||
// This is a trick to force the slider to update its value and
|
||||
// emit the right signal itself, because our sendChannelTest(int) method
|
||||
// relies on the object sender's identity.
|
||||
if (outSliders[index]->value()<outSliders[index]->maximum()) {
|
||||
outSliders[index]->setValue(outSliders[index]->value()+1);
|
||||
outSliders[index]->setValue(outSliders[index]->value()-1);
|
||||
} else {
|
||||
outSliders[index]->setValue(outSliders[index]->value()-1);
|
||||
outSliders[index]->setValue(outSliders[index]->value()+1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
88
ground/openpilotgcs/src/plugins/config/configoutputwidget.h
Normal file
88
ground/openpilotgcs/src/plugins/config/configoutputwidget.h
Normal file
@ -0,0 +1,88 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file configservowidget.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup ConfigPlugin Config Plugin
|
||||
* @{
|
||||
* @brief Servo input/output configuration panel for the config gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef CONFIGOUTPUTWIDGET_H
|
||||
#define CONFIGOUTPUTWIDGET_H
|
||||
|
||||
#include "ui_output.h"
|
||||
#include "configtaskwidget.h"
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
#include "uavobject.h"
|
||||
#include <QtGui/QWidget>
|
||||
#include <QList>
|
||||
|
||||
class Ui_OutputWidget;
|
||||
|
||||
class ConfigOutputWidget: public ConfigTaskWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ConfigOutputWidget(QWidget *parent = 0);
|
||||
~ConfigOutputWidget();
|
||||
|
||||
public slots:
|
||||
void onTelemetryStart();
|
||||
void onTelemetryStop();
|
||||
void onTelemetryConnect();
|
||||
void onTelemetryDisconnect();
|
||||
|
||||
private:
|
||||
Ui_OutputWidget *m_config;
|
||||
|
||||
QList<QSlider> sliders;
|
||||
|
||||
void updateChannelInSlider(QSlider *slider, QLabel *min, QLabel *max, QCheckBox *rev, int value);
|
||||
|
||||
void assignChannel(UAVDataObject *obj, QString str);
|
||||
void assignOutputChannel(UAVDataObject *obj, QString str);
|
||||
|
||||
int mccDataRate;
|
||||
|
||||
UAVObject::Metadata accInitialData;
|
||||
|
||||
QList<QSlider*> outSliders;
|
||||
QList<QSpinBox*> outMin;
|
||||
QList<QSpinBox*> outMax;
|
||||
QList<QCheckBox*> reversals;
|
||||
QList<QLabel*> outLabels;
|
||||
|
||||
bool firstUpdate;
|
||||
|
||||
void enableControls(bool enable);
|
||||
|
||||
private slots:
|
||||
void requestRCOutputUpdate();
|
||||
void sendRCOutputUpdate();
|
||||
void saveRCOutputObject();
|
||||
void runChannelTests(bool state);
|
||||
void sendChannelTest(int value);
|
||||
void setChOutRange();
|
||||
void reverseChannel(bool state);
|
||||
};
|
||||
|
||||
#endif
|
166
ground/openpilotgcs/src/plugins/config/images/transmitter.svg
Normal file
166
ground/openpilotgcs/src/plugins/config/images/transmitter.svg
Normal file
@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="575.08228"
|
||||
height="708.87085"
|
||||
id="svg3479"
|
||||
inkscape:version="0.47+devel r9530"
|
||||
sodipodi:docname="AES_Intellinet.svg">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="925"
|
||||
id="namedview3112"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.55494202"
|
||||
inkscape:cx="218.3335"
|
||||
inkscape:cy="283.65935"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs3481">
|
||||
<linearGradient
|
||||
id="linearGradient3914">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3916" />
|
||||
<stop
|
||||
style="stop-color:#938d8d;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3918" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata3484">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-96.216134,-100.96959)">
|
||||
<path
|
||||
d="m 138.62799,412.00083 -5.64516,3.38856 0,386.9739 2.41935,5.4217 z"
|
||||
id="path3500"
|
||||
style="fill:#f4e3d7;stroke:#000000;stroke-width:0.91671348px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 129.74505,413.85292 -32.258063,8.34851 -0.80645,365.94286 33.870963,18.78414 z"
|
||||
id="path3502"
|
||||
style="fill:#e3e2db;stroke:#000000;stroke-width:0.92880517px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 384.36546,421.62814 0.80645,-72.58064 14.51613,0 0.80645,72.58064 z"
|
||||
id="path3562"
|
||||
style="fill:#ececec;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 385.17191,349.0475 384.36546,120.82169"
|
||||
id="path3566"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 384.35034,101.46959 c -2.68065,0 -4.8125,2.1631 -4.8125,4.84375 l 0,16.9375 c 0,2.68065 2.13185,4.84375 4.8125,4.84375 l 1.46875,0 -1.46875,220.9375 15.34375,0.8125 -5.84375,-222 c 1.98181,-0.60497 3.40625,-2.40882 3.40625,-4.59375 l 0,-16.9375 c 0,-2.68065 -2.13185,-4.84375 -4.8125,-4.84375 l -8.09375,0 z"
|
||||
id="path3570"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 665.13192,425.71649 139.83553,413.73253 134.3061,809.20336 670.66135,792.42581 z"
|
||||
id="path3498"
|
||||
style="fill:#ececec;stroke:#000000;stroke-width:1.27415919px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="path3114"
|
||||
sodipodi:cx="324.35822"
|
||||
sodipodi:cy="615.37958"
|
||||
sodipodi:rx="64.871643"
|
||||
sodipodi:ry="62.168655"
|
||||
d="m 389.22986,615.37958 c 0,34.3348 -29.04403,62.16865 -64.87164,62.16865 -35.82762,0 -64.87165,-27.83385 -64.87165,-62.16865 0,-34.3348 29.04403,-62.16866 64.87165,-62.16866 35.12283,0 63.8666,26.78811 64.84639,60.4344"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.2552856"
|
||||
transform="matrix(1,0,0,0.92753623,-30.633831,40.087749)"
|
||||
sodipodi:open="true" />
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.875,0,0,0.78260869,252.2786,129.27319)"
|
||||
sodipodi:end="6.2552856"
|
||||
sodipodi:start="0"
|
||||
d="m 389.22986,615.37958 c 0,34.3348 -29.04403,62.16865 -64.87164,62.16865 -35.82762,0 -64.87165,-27.83385 -64.87165,-62.16865 0,-34.3348 29.04403,-62.16866 64.87165,-62.16866 35.12283,0 63.8666,26.78811 64.84639,60.4344"
|
||||
sodipodi:ry="62.168655"
|
||||
sodipodi:rx="64.871643"
|
||||
sodipodi:cy="615.37958"
|
||||
sodipodi:cx="324.35822"
|
||||
id="path3116"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
style="fill:#251c1c;fill-opacity:1;stroke:none"
|
||||
d="m 292.5864,609.02537 45.81682,-2.05672 -0.66401,11.31194 -45.81682,-3.08507 z"
|
||||
id="path3120"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="path3922"
|
||||
sodipodi:cx="376.61591"
|
||||
sodipodi:cy="613.57764"
|
||||
sodipodi:rx="7.2079601"
|
||||
sodipodi:ry="6.3069654"
|
||||
d="m 383.82387,613.57764 c 0,3.48324 -3.22712,6.30696 -7.20796,6.30696 -3.98085,0 -7.20796,-2.82372 -7.20796,-6.30696 0,-3.48324 3.22711,-6.30697 7.20796,-6.30697 3.90253,0 7.09629,2.71764 7.20515,6.13103"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.2552856"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.53504197,0,0,0.89898475,136.41341,60.795201)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3926"
|
||||
d="m 534.68428,609.66247 45.81682,-2.05672 -0.66401,11.31194 -45.81682,-3.08507 z"
|
||||
style="fill:#251c1c;fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
transform="matrix(0.53504197,0,0,0.89898475,378.51129,61.432301)"
|
||||
sodipodi:open="true"
|
||||
sodipodi:end="6.2552856"
|
||||
sodipodi:start="0"
|
||||
d="m 383.82387,613.57764 c 0,3.48324 -3.22712,6.30696 -7.20796,6.30696 -3.98085,0 -7.20796,-2.82372 -7.20796,-6.30696 0,-3.48324 3.22711,-6.30697 7.20796,-6.30697 3.90253,0 7.09629,2.71764 7.20515,6.13103"
|
||||
sodipodi:ry="6.3069654"
|
||||
sodipodi:rx="7.2079601"
|
||||
sodipodi:cy="613.57764"
|
||||
sodipodi:cx="376.61591"
|
||||
id="path3928"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>SettingsWidget</class>
|
||||
<widget class="QWidget" name="SettingsWidget">
|
||||
<class>InputWidget</class>
|
||||
<widget class="QWidget" name="InputWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
@ -17,7 +17,7 @@
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>2</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
@ -1190,1290 +1190,6 @@ p, li { white-space: pre-wrap; }
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Servo Output</string>
|
||||
</attribute>
|
||||
<widget class="QLabel" name="aircraftType">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>221</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Aircraft type: undefined</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator0Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>70</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator1Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>100</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 2</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator2Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>130</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator3Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>160</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 4</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator4Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>190</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 5</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator5Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>220</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 6</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch0OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>70</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch0Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>70</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch0OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>70</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Minimum PWM value, beware of not overdriving your servo.</p></body></html></string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch0OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>70</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maximum PWM value, beware of not overdriving your servo.</p></body></html></string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="channelOutTest">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>40</y>
|
||||
<width>151</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Move the servos using the sliders. Two important things:
|
||||
- Take extra care if the output is connected to an motor controller!
|
||||
- Will only work if the RC receiver is working (failsafe)</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Test outputs</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator6Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>250</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 7</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator7Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>280</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 8</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch1Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>100</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch1OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>100</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch1OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>100</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch1OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>100</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch2Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>130</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch2OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>130</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch2OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>130</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch2OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>130</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch3Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>160</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch3OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>160</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch3OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>160</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch3OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>160</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch4Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>190</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch4OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>190</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch4OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>190</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch4OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>190</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch5Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>220</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch5OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>220</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch5OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>220</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch5OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>220</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch6Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>250</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch6OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>250</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch6OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>250</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch6OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>250</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch7Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>280</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch7OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>280</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch7OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>280</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch7OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>280</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="saveRCOutputToSD">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>490</x>
|
||||
<y>310</y>
|
||||
<width>93</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Be sure to set the Neutral position on all sliders before sending!
|
||||
Applies and Saves all settings to SD</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save to SD</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="getRCOutputCurrent">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>310</y>
|
||||
<width>93</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Retrieve settings from OpenPilot</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Get Current</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="saveRCOutputToRAM">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>380</x>
|
||||
<y>310</y>
|
||||
<width>93</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Send to OpenPilot but don't write in SD.
|
||||
Be sure to set the Neutral position on all sliders before sending!</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save to RAM</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>10</y>
|
||||
<width>291</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<widget class="QSpinBox" name="outputRate2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>220</x>
|
||||
<y>20</y>
|
||||
<width>55</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes.
|
||||
Leave at 50Hz for fixed wing.</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
<width>81</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Update rate:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="outputRate1">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>120</x>
|
||||
<y>20</y>
|
||||
<width>55</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes.
|
||||
Leave at 50Hz for fixed wing.</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>0</y>
|
||||
<width>81</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 0-3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>210</x>
|
||||
<y>0</y>
|
||||
<width>81</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 4-7</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch0OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>70</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Current value of slider.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch1OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>100</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch2OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>130</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch3OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>160</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch4OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>190</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch5OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>220</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch6OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>250</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch7OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>280</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch5Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>220</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch0Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>70</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch2Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>130</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch6Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>250</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch7Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>280</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch1Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>100</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch3Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>160</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch4Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>190</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>50</y>
|
||||
<width>31</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rev.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_3">
|
||||
<attribute name="title">
|
||||
<string>Flight Mode Switch Settings</string>
|
||||
@ -2791,20 +1507,6 @@ if you have not done so already.</string>
|
||||
<number>66</number>
|
||||
</property>
|
||||
</widget>
|
||||
<zorder>fmsModePos1</zorder>
|
||||
<zorder>fmsModePos3</zorder>
|
||||
<zorder>label_11</zorder>
|
||||
<zorder>label_12</zorder>
|
||||
<zorder>label_13</zorder>
|
||||
<zorder>fmsSlider</zorder>
|
||||
<zorder>fmsModePos2</zorder>
|
||||
<zorder>fmsModePos2</zorder>
|
||||
<zorder>fmsModePos3</zorder>
|
||||
<zorder>label_11</zorder>
|
||||
<zorder>fmsModePos1</zorder>
|
||||
<zorder>label_12</zorder>
|
||||
<zorder>label_13</zorder>
|
||||
<zorder>fmsSlider</zorder>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_4">
|
||||
@ -2955,52 +1657,6 @@ if you have not done so already.</string>
|
||||
<tabstop>getRCInputCurrent</tabstop>
|
||||
<tabstop>saveRCInputToRAM</tabstop>
|
||||
<tabstop>saveRCInputToSD</tabstop>
|
||||
<tabstop>channelOutTest</tabstop>
|
||||
<tabstop>outputRate1</tabstop>
|
||||
<tabstop>outputRate2</tabstop>
|
||||
<tabstop>ch0Output</tabstop>
|
||||
<tabstop>ch0OutMin</tabstop>
|
||||
<tabstop>ch0OutSlider</tabstop>
|
||||
<tabstop>ch0OutMax</tabstop>
|
||||
<tabstop>ch0Rev</tabstop>
|
||||
<tabstop>ch1Output</tabstop>
|
||||
<tabstop>ch1OutMin</tabstop>
|
||||
<tabstop>ch1OutSlider</tabstop>
|
||||
<tabstop>ch1OutMax</tabstop>
|
||||
<tabstop>ch1Rev</tabstop>
|
||||
<tabstop>ch2Output</tabstop>
|
||||
<tabstop>ch2OutMin</tabstop>
|
||||
<tabstop>ch2OutSlider</tabstop>
|
||||
<tabstop>ch2OutMax</tabstop>
|
||||
<tabstop>ch2Rev</tabstop>
|
||||
<tabstop>ch3Output</tabstop>
|
||||
<tabstop>ch3OutMin</tabstop>
|
||||
<tabstop>ch3OutSlider</tabstop>
|
||||
<tabstop>ch3OutMax</tabstop>
|
||||
<tabstop>ch3Rev</tabstop>
|
||||
<tabstop>ch4Output</tabstop>
|
||||
<tabstop>ch4OutMin</tabstop>
|
||||
<tabstop>ch4OutSlider</tabstop>
|
||||
<tabstop>ch4OutMax</tabstop>
|
||||
<tabstop>ch4Rev</tabstop>
|
||||
<tabstop>ch5Output</tabstop>
|
||||
<tabstop>ch5OutMin</tabstop>
|
||||
<tabstop>ch5OutSlider</tabstop>
|
||||
<tabstop>ch5OutMax</tabstop>
|
||||
<tabstop>ch5Rev</tabstop>
|
||||
<tabstop>ch6Output</tabstop>
|
||||
<tabstop>ch6OutMin</tabstop>
|
||||
<tabstop>ch6OutSlider</tabstop>
|
||||
<tabstop>ch6OutMax</tabstop>
|
||||
<tabstop>ch6Rev</tabstop>
|
||||
<tabstop>ch7Output</tabstop>
|
||||
<tabstop>ch7OutMin</tabstop>
|
||||
<tabstop>ch7OutSlider</tabstop>
|
||||
<tabstop>ch7OutMax</tabstop>
|
||||
<tabstop>ch7Rev</tabstop>
|
||||
<tabstop>getRCOutputCurrent</tabstop>
|
||||
<tabstop>saveRCOutputToRAM</tabstop>
|
||||
<tabstop>saveRCOutputToSD</tabstop>
|
||||
<tabstop>fmsSlider</tabstop>
|
||||
<tabstop>fmsModePos3</tabstop>
|
||||
<tabstop>fmsSsPos3Roll</tabstop>
|
1360
ground/openpilotgcs/src/plugins/config/output.ui
Normal file
1360
ground/openpilotgcs/src/plugins/config/output.ui
Normal file
@ -0,0 +1,1360 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>OutputWidget</class>
|
||||
<widget class="QWidget" name="OutputWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>617</width>
|
||||
<height>395</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Servo Output</string>
|
||||
</attribute>
|
||||
<widget class="QLabel" name="aircraftType">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>221</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Aircraft type: undefined</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator0Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>70</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator1Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>100</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 2</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator2Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>130</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator3Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>160</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 4</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator4Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>190</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 5</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator5Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>220</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 6</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch0OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>70</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch0Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>70</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch0OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>70</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Minimum PWM value, beware of not overdriving your servo.</p></body></html></string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch0OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>70</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maximum PWM value, beware of not overdriving your servo.</p></body></html></string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="channelOutTest">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>40</y>
|
||||
<width>151</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Move the servos using the sliders. Two important things:
|
||||
- Take extra care if the output is connected to an motor controller!
|
||||
- Will only work if the RC receiver is working (failsafe)</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Test outputs</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator6Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>250</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 7</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="actuator7Label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>280</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 8</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch1Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>100</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch1OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>100</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch1OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>100</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch1OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>100</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch2Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>130</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch2OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>130</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch2OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>130</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch2OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>130</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch3Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>160</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch3OutMax">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>160</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch3OutMin">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>160</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch3OutSlider">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>160</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch4Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>190</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch4OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>190</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch4OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>190</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch4OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>190</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch5Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>220</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch5OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>220</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch5OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>220</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch5OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>220</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch6Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>250</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch6OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>250</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch6OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>250</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch6OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>250</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="ch7Output">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>280</y>
|
||||
<width>121</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">This is the actuator connected to this channel.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans';">You can change this through the &quot;Airframe&quot; dialog (on the left).</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch7OutMax">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>280</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="ch7OutMin">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>280</y>
|
||||
<width>55</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSlider" name="ch7OutSlider">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>280</y>
|
||||
<width>160</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="saveRCOutputToSD">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>490</x>
|
||||
<y>310</y>
|
||||
<width>93</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Be sure to set the Neutral position on all sliders before sending!
|
||||
Applies and Saves all settings to SD</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save to SD</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="getRCOutputCurrent">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>310</y>
|
||||
<width>93</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Retrieve settings from OpenPilot</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Get Current</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="saveRCOutputToRAM">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>380</x>
|
||||
<y>310</y>
|
||||
<width>93</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Send to OpenPilot but don't write in SD.
|
||||
Be sure to set the Neutral position on all sliders before sending!</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save to RAM</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>10</y>
|
||||
<width>291</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<widget class="QSpinBox" name="outputRate2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>220</x>
|
||||
<y>20</y>
|
||||
<width>55</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes.
|
||||
Leave at 50Hz for fixed wing.</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
<width>81</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Update rate:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QSpinBox" name="outputRate1">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>120</x>
|
||||
<y>20</y>
|
||||
<width>55</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes.
|
||||
Leave at 50Hz for fixed wing.</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>0</y>
|
||||
<width>81</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 0-3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>210</x>
|
||||
<y>0</y>
|
||||
<width>81</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel 4-7</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch0OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>70</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Current value of slider.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch1OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>100</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch2OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>130</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch3OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>160</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch4OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>190</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch5OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>220</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch6OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>250</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="ch7OutValue">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>520</x>
|
||||
<y>280</y>
|
||||
<width>41</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch5Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>220</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch0Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>70</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch2Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>130</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch6Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>250</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch7Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>280</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch1Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>100</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch3Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>160</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="ch4Rev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>190</y>
|
||||
<width>21</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'FreeSans'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check to invert the channel.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>50</y>
|
||||
<width>31</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rev.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>channelOutTest</tabstop>
|
||||
<tabstop>outputRate1</tabstop>
|
||||
<tabstop>outputRate2</tabstop>
|
||||
<tabstop>ch0Output</tabstop>
|
||||
<tabstop>ch0OutMin</tabstop>
|
||||
<tabstop>ch0OutSlider</tabstop>
|
||||
<tabstop>ch0OutMax</tabstop>
|
||||
<tabstop>ch0Rev</tabstop>
|
||||
<tabstop>ch1Output</tabstop>
|
||||
<tabstop>ch1OutMin</tabstop>
|
||||
<tabstop>ch1OutSlider</tabstop>
|
||||
<tabstop>ch1OutMax</tabstop>
|
||||
<tabstop>ch1Rev</tabstop>
|
||||
<tabstop>ch2Output</tabstop>
|
||||
<tabstop>ch2OutMin</tabstop>
|
||||
<tabstop>ch2OutSlider</tabstop>
|
||||
<tabstop>ch2OutMax</tabstop>
|
||||
<tabstop>ch2Rev</tabstop>
|
||||
<tabstop>ch3Output</tabstop>
|
||||
<tabstop>ch3OutMin</tabstop>
|
||||
<tabstop>ch3OutSlider</tabstop>
|
||||
<tabstop>ch3OutMax</tabstop>
|
||||
<tabstop>ch3Rev</tabstop>
|
||||
<tabstop>ch4Output</tabstop>
|
||||
<tabstop>ch4OutMin</tabstop>
|
||||
<tabstop>ch4OutSlider</tabstop>
|
||||
<tabstop>ch4OutMax</tabstop>
|
||||
<tabstop>ch4Rev</tabstop>
|
||||
<tabstop>ch5Output</tabstop>
|
||||
<tabstop>ch5OutMin</tabstop>
|
||||
<tabstop>ch5OutSlider</tabstop>
|
||||
<tabstop>ch5OutMax</tabstop>
|
||||
<tabstop>ch5Rev</tabstop>
|
||||
<tabstop>ch6Output</tabstop>
|
||||
<tabstop>ch6OutMin</tabstop>
|
||||
<tabstop>ch6OutSlider</tabstop>
|
||||
<tabstop>ch6OutMax</tabstop>
|
||||
<tabstop>ch6Rev</tabstop>
|
||||
<tabstop>ch7Output</tabstop>
|
||||
<tabstop>ch7OutMin</tabstop>
|
||||
<tabstop>ch7OutSlider</tabstop>
|
||||
<tabstop>ch7OutMax</tabstop>
|
||||
<tabstop>ch7Rev</tabstop>
|
||||
<tabstop>getRCOutputCurrent</tabstop>
|
||||
<tabstop>saveRCOutputToRAM</tabstop>
|
||||
<tabstop>saveRCOutputToSD</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
x
Reference in New Issue
Block a user