Merge branch 'next' into bsongis/issue_1471_Lua_read_write_SD

This commit is contained in:
Andre Bernet
2015-03-31 20:04:39 +04:00
107 changed files with 2929 additions and 1707 deletions
+51 -19
View File
@@ -20,7 +20,7 @@ AppData g;
// ** CompStoreObj class********************
void CompStoreObj::clear (const QString tag1, const QString tag2, const QString tag3)
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (tag2.isEmpty())
{
settings.remove(tag1);
@@ -43,7 +43,7 @@ void CompStoreObj::clear (const QString tag1, const QString tag2, const QString
void CompStoreObj::store(const QByteArray newArray, QByteArray &array, const QString tag, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -56,7 +56,7 @@ void CompStoreObj::store(const QByteArray newArray, QByteArray &array, const QSt
void CompStoreObj::store(const QStringList newSList, QStringList &stringList, const QString tag, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -69,7 +69,7 @@ void CompStoreObj::store(const QStringList newSList, QStringList &stringList, co
void CompStoreObj::store(const QString newString, QString &string, const QString tag, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -82,7 +82,7 @@ void CompStoreObj::store(const QString newString, QString &string, const QString
void CompStoreObj::store(const bool newTruth, bool &truth, const QString tag, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -95,7 +95,7 @@ void CompStoreObj::store(const bool newTruth, bool &truth, const QString tag, co
void CompStoreObj::store(const int newNumber, int &number, const QString tag, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -109,7 +109,7 @@ void CompStoreObj::store(const int newNumber, int &number, const QString tag, co
// Retrieval functions
void CompStoreObj::retrieve( QByteArray &array, const QString tag, const QString def, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -121,7 +121,7 @@ void CompStoreObj::retrieve( QByteArray &array, const QString tag, const QString
void CompStoreObj::retrieve( QStringList &stringList, const QString tag, const QString def, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -133,7 +133,7 @@ void CompStoreObj::retrieve( QStringList &stringList, const QString tag, const Q
void CompStoreObj::retrieve( QString &string, const QString tag, const QString def, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -145,7 +145,7 @@ void CompStoreObj::retrieve( QString &string, const QString tag, const QString d
void CompStoreObj::retrieve( bool &truth, const QString tag, const bool def, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -157,7 +157,7 @@ void CompStoreObj::retrieve( bool &truth, const QString tag, const bool def, con
void CompStoreObj::retrieve( int &number, const QString tag, const int def, const QString group1, const QString group2 )
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2);
@@ -241,7 +241,7 @@ JStickData::JStickData()
void JStickData::remove()
{
// Remove all JStickData values from settings file
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
settings.beginGroup( "JsCalibration" );
settings.remove( QString( "stick%1_axe").arg(index) );
settings.remove( QString( "stick%1_min").arg(index) );
@@ -256,7 +256,7 @@ void JStickData::remove()
bool JStickData::existsOnDisk()
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
settings.beginGroup("JsCalibration");
int axe = settings.value( QString("stick%1_axe").arg(index), -1 ).toInt();
settings.endGroup();
@@ -377,7 +377,7 @@ Profile& Profile::operator=(const Profile& rhs)
void Profile::remove()
{
// Remove all profile values from settings file
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
settings.beginGroup("Profiles");
settings.remove(QString("profile%1").arg(index));
settings.endGroup();
@@ -388,7 +388,7 @@ void Profile::remove()
bool Profile::existsOnDisk()
{
QSettings settings(PRODUCT, COMPANY);
QSettings settings(COMPANY, PRODUCT);
settings.beginGroup("Profiles");
settings.beginGroup(QString("profile%1").arg(index));
QStringList keyList = settings.allKeys();
@@ -577,11 +577,43 @@ AppData::AppData()
for (int i=0; i<MAX_JOYSTICKS; i++)
joystick[i].init( i );
// Import settings from companion9x, but only do it one time.
QSettings c9x_settings("companion9x", "companion9x");
QSettings settings(PRODUCT, COMPANY);
if (profile[0].name().isEmpty() )
// Copy existing 2.0.16 settings if present
QSettings settings(COMPANY, PRODUCT);
if (profile[0].name().isEmpty())
{
QSettings settings20("OpenTX", "Companion 2.0");
QStringList keys = settings20.allKeys();
for (QStringList::iterator i=keys.begin(); i!=keys.end(); i++)
{
settings.setValue(*i, settings20.value(*i));
}
//Reload profiles
for (int i=0; i<MAX_PROFILES; i++)
profile[i].init( i );
}
// Else copy existing <2.0.16 settings if present
if (profile[0].name().isEmpty())
{
QSettings pre2016settings("OpenTX", "OpenTX Companion");
QStringList keys = pre2016settings.allKeys();
for (QStringList::iterator i=keys.begin(); i!=keys.end(); i++)
{
settings.setValue(*i, pre2016settings.value(*i));
}
//Reload profiles
for (int i=0; i<MAX_PROFILES; i++)
profile[i].init( i );
}
// Else import settings from companion9x if present
if (profile[0].name().isEmpty())
{
QSettings c9x_settings("companion9x", "companion9x");
// Copy all settings from companion9x to companion
QStringList keys = c9x_settings.allKeys();
for (QStringList::iterator i=keys.begin(); i!=keys.end(); i++)
+2 -2
View File
@@ -24,8 +24,8 @@
#include <QString>
#include <QSettings>
#define COMPANY "OpenTX Companion"
#define PRODUCT "OpenTX"
#define COMPANY "OpenTX"
#define PRODUCT "Companion 2.1"
#define MAX_PROFILES 15
#define MAX_JOYSTICKS 8
+19 -17
View File
@@ -533,15 +533,19 @@ QString RawSwitch::toString()
SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'),
SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'),
SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'),
SwitchUp('F'), SwitchDn('F'),
SwitchUp('F'), QString::fromUtf8("SF-"), SwitchDn('F'),
SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'),
SwitchUp('H'), SwitchDn('H'),
SwitchUp('I'), SwitchDn('I'),
SwitchUp('J'), SwitchDn('J'),
SwitchUp('K'), SwitchDn('K'),
SwitchUp('L'), SwitchDn('L'),
SwitchUp('M'), SwitchDn('M'),
SwitchUp('N'), SwitchDn('N'),
SwitchUp('H'), QString::fromUtf8("SH-"), SwitchDn('H'),
SwitchUp('I'), QString::fromUtf8("SI-"), SwitchDn('I'),
SwitchUp('J'), QString::fromUtf8("SJ-"), SwitchDn('J'),
SwitchUp('K'), QString::fromUtf8("SK-"), SwitchDn('K'),
SwitchUp('L'), QString::fromUtf8("SL-"), SwitchDn('L'),
SwitchUp('M'), QString::fromUtf8("SM-"), SwitchDn('M'),
SwitchUp('N'), QString::fromUtf8("SN-"), SwitchDn('N'),
SwitchUp('O'), QString::fromUtf8("SO-"), SwitchDn('O'),
SwitchUp('P'), QString::fromUtf8("SP-"), SwitchDn('P'),
SwitchUp('Q'), QString::fromUtf8("SQ-"), SwitchDn('Q'),
SwitchUp('R'), QString::fromUtf8("SR-"), SwitchDn('R'),
};
static const QString logicalSwitches[] = {
@@ -991,14 +995,7 @@ void LimitData::clear()
GeneralSettings::SwitchInfo GeneralSettings::switchInfoFromSwitchPositionTaranis(unsigned int index)
{
if (index <= 3*5)
return SwitchInfo((index-1)/3, (index-1)%3);
else if (index <= 17)
return SwitchInfo(5, index==17 ? 2 : 0);
else if (index <= 20)
return SwitchInfo(6, index-18);
else
return SwitchInfo(7+(index-21)/2, 2*((index-21)%2));
return SwitchInfo((index-1)/3, (index-1)%3);
}
bool GeneralSettings::switchPositionAllowedTaranis(int index) const
@@ -1011,7 +1008,12 @@ bool GeneralSettings::switchPositionAllowedTaranis(int index) const
else if (info.position == 1)
return switchConfig[info.index] == SWITCH_3POS;
else
return true;
return switchConfig[info.index] != SWITCH_NONE;
}
bool GeneralSettings::switchSourceAllowedTaranis(int index) const
{
return switchConfig[index] != SWITCH_NONE;
}
GeneralSettings::GeneralSettings()
+5 -3
View File
@@ -906,7 +906,8 @@ class SensorData {
char label[4+1];
unsigned int unit;
unsigned int prec;
unsigned int inputFlags;
bool autoOffset;
bool filter;
bool logs;
bool persistent;
@@ -1095,7 +1096,8 @@ class GeneralSettings {
bool enableTelemetryAlarm;
BeeperMode hapticMode;
unsigned int stickMode; // TODO enum
int timezone;
int timezone;
bool adjustRTC;
bool optrexDisplay;
unsigned int inactivityTimer;
bool minuteBeep;
@@ -1172,6 +1174,7 @@ class GeneralSettings {
static SwitchInfo switchInfoFromSwitchPositionTaranis(unsigned int index);
bool switchPositionAllowedTaranis(int index) const;
bool switchSourceAllowedTaranis(int index) const;
};
class RadioData {
@@ -1246,7 +1249,6 @@ enum Capability {
NoTelemetryProtocol,
TelemetryCustomScreens,
TelemetryCustomScreensFieldsPerLine,
TelemetryTimeshift,
TelemetryMaxMultiplier,
HasVario,
HasVarioSink,
@@ -2696,7 +2696,8 @@ class SensorField: public TransformedField {
internalField.Append(new UnsignedField<1>(sensor.type, "type"));
internalField.Append(new UnsignedField<5>(sensor.unit, "unit"));
internalField.Append(new UnsignedField<2>(sensor.prec, "prec"));
internalField.Append(new UnsignedField<2>(sensor.inputFlags, "inputFlags"));
internalField.Append(new BoolField<1>(sensor.autoOffset));
internalField.Append(new BoolField<1>(sensor.filter));
internalField.Append(new BoolField<1>(sensor.logs));
internalField.Append(new BoolField<1>(sensor.persistent));
internalField.Append(new SpareBitsField<4>());
@@ -2729,6 +2730,8 @@ class SensorField: public TransformedField {
if (sensor.type == SensorData::TYPE_CUSTOM) {
sensor.id = _id;
sensor.instance = _instance;
sensor.ratio = _param & 0xFF;
sensor.offset = (_param >> 16) & 0xFF;
}
else {
sensor.persistentValue = _id;
@@ -3012,8 +3015,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
}
if (IS_ARM(board) && version >= 217) {
int size = IS_TARANIS_X9E(board) ? 32 : 8;
for (int i=0; i<size; i++) {
for (int i=0; i<8; i++) {
if (i < MAX_POTS(board)+MAX_SLIDERS(board))
internalField.Append(new BoolField<1>(modelData.potsWarningEnabled[i]));
else
@@ -3031,7 +3033,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
}
if (IS_ARM(board) && version >= 216) {
for (int i=0; i < GetCurrentFirmware()->getCapability(Pots); i++) {
for (int i=0; i < MAX_POTS(board)+MAX_SLIDERS(board); i++) {
internalField.Append(new SignedField<8>(modelData.potPosition[i]));
}
}
@@ -3157,7 +3159,12 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
internalField.Append(new UnsignedField<2>(generalData.stickMode));
internalField.Append(new SignedField<5>(generalData.timezone));
internalField.Append(new SpareBitsField<1>());
if (version >= 217 && IS_TARANIS(board)) {
internalField.Append(new BoolField<1>(generalData.adjustRTC));
}
else {
internalField.Append(new SpareBitsField<1>());
}
internalField.Append(new UnsignedField<8>(generalData.inactivityTimer));
if (IS_9X(board) && version >= 215) {
@@ -3269,7 +3276,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
internalField.Append(new SpareBitsField<64>());
else if (IS_TARANIS(board))
internalField.Append(new SpareBitsField<16>());
if (version >= 217) {
for (int i=0; i<MAX_CUSTOM_FUNCTIONS(board, version); i++) {
internalField.Append(new ArmCustomFunctionField(generalData.customFn[i], board, version, variant));
@@ -551,7 +551,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
case FlightModesName:
return (IS_TARANIS(board) ? 10 : 6);
case GvarsName:
return 6;
return (IS_9X(board) ? 0 : 6);
case HasChNames:
return (IS_TARANIS(board) ? 1 : 0);
case GvarsInCS:
@@ -689,8 +689,6 @@ int OpenTxFirmware::getCapability(const Capability capability)
return IS_TARANIS(board) ? 1 : 0;
case TelemetryUnits:
return 0;
case TelemetryTimeshift:
return 1;
case TelemetryMaxMultiplier:
return (IS_ARM(board) ? 32 : 8);
case PPMCenter:
@@ -13,12 +13,13 @@
* GNU General Public License for more details.
*
*/
#ifndef open9x_interface_h
#define open9x_interface_h
#ifndef opentx_interface_h
#define opentx_interface_h
#include "eeprominterface.h"
#define OPENTX_FIRMWARE_DOWNLOADS "http://downloads-20.open-tx.org/firmware"
#define OPENTX_FIRMWARE_DOWNLOADS "http://downloads-21.open-tx.org/firmware"
class RleFile;
+14 -8
View File
@@ -123,17 +123,16 @@ GeneralSetupPanel::GeneralSetupPanel(QWidget * parent, GeneralSettings & general
ui->units_CB->setCurrentIndex(generalSettings.imperial);
}
if (!firmware->getCapability(TelemetryTimeshift)) {
ui->label_timezone->hide();
ui->timezoneSB->hide();
ui->timezoneSB->setDisabled(true);
ui->gpsFormatCB->hide();
ui->gpsFormatLabel->hide();
}
ui->gpsFormatCB->setCurrentIndex(generalSettings.gpsFormat);
ui->timezoneSB->setValue(generalSettings.timezone);
if (IS_TARANIS(firmware->getBoard())) {
ui->adjustRTC->setChecked(generalSettings.adjustRTC);
}
else {
ui->adjustRTC->hide();
}
if (!firmware->getCapability(OptrexDisplay)) {
ui->label_displayType->hide();
ui->displayTypeCB->setDisabled(true);
@@ -533,6 +532,13 @@ void GeneralSetupPanel::on_timezoneSB_editingFinished()
emit modified();
}
void GeneralSetupPanel::on_adjustRTC_stateChanged(int)
{
generalSettings.adjustRTC = ui->adjustRTC->isChecked();
emit modified();
}
void GeneralSetupPanel::on_inactimerSB_editingFinished()
{
generalSettings.inactivityTimer = ui->inactimerSB->value();
+2 -1
View File
@@ -19,7 +19,7 @@ class GeneralSetupPanel : public GeneralPanel
private slots:
void on_splashScreenChkB_stateChanged(int);
void on_splashScreenDuration_currentIndexChanged(int index);
void on_alarmwarnChkB_stateChanged(int );
void on_alarmwarnChkB_stateChanged(int);
void on_gpsFormatCB_currentIndexChanged(int index);
void on_displayTypeCB_currentIndexChanged(int index);
void on_BLBright_SB_editingFinished();
@@ -29,6 +29,7 @@ class GeneralSetupPanel : public GeneralPanel
void on_faimode_CB_stateChanged(int );
void on_speakerPitchSB_editingFinished();
void on_timezoneSB_editingFinished();
void on_adjustRTC_stateChanged(int);
void on_hapticStrength_valueChanged();
void on_soundModeCB_currentIndexChanged(int index);
void on_beeperlenCB_currentIndexChanged(int index);
+272 -255
View File
@@ -6,101 +6,29 @@
<rect>
<x>0</x>
<y>0</y>
<width>689</width>
<height>606</height>
<width>758</width>
<height>635</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="1,0,0,0,0">
<item row="34" column="3">
<item row="36" column="0">
<widget class="QLabel" name="gpsFormatLabel">
<property name="text">
<string>GPS Coordinates</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_speakerPitch">
<property name="text">
<string>Speaker Pitch (spkr only)</string>
</property>
</widget>
</item>
<item row="36" column="4">
<widget class="QComboBox" name="voiceLang_CB"/>
</item>
<item row="33" column="3">
<item row="35" column="0">
<widget class="QLabel" name="units_label">
<property name="text">
<string>Measurement Units</string>
</property>
</widget>
</item>
<item row="34" column="4">
<widget class="QComboBox" name="gpsFormatCB">
<item>
<property name="text">
<string>hh° (N/S) mm' ss''.dd</string>
</property>
</item>
<item>
<property name="text">
<string>NMEA</string>
</property>
</item>
</widget>
</item>
<item row="35" column="4">
<widget class="QSpinBox" name="timezoneSB">
<property name="minimum">
<number>-14</number>
</property>
<property name="maximum">
<number>12</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="36" column="3">
<widget class="QLabel" name="VoiceLang_label">
<property name="text">
<string>Voice Language</string>
</property>
</widget>
</item>
<item row="35" column="3">
<widget class="QLabel" name="label_timezone">
<property name="text">
<string>Timeshift from UTC</string>
</property>
</widget>
</item>
<item row="33" column="4">
<widget class="QComboBox" name="units_CB">
<item>
<property name="text">
<string>Metric</string>
</property>
</item>
<item>
<property name="text">
<string>Imperial</string>
</property>
</item>
</widget>
</item>
<item row="31" column="3">
<widget class="QLabel" name="countrycode_label">
<property name="text">
<string>Country Code</string>
</property>
</widget>
</item>
<item row="31" column="4">
<widget class="QComboBox" name="countrycode_CB">
<item>
<property name="text">
@@ -119,6 +47,144 @@
</item>
</widget>
</item>
<item row="34" column="3">
<widget class="QLabel" name="label_faimode">
<property name="text">
<string>FAI Mode</string>
</property>
</widget>
</item>
<item row="35" column="3">
<widget class="QLabel" name="countrycode_label">
<property name="text">
<string>Country Code</string>
</property>
</widget>
</item>
<item row="12" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="splashScreenChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Show splash screen on startup</string>
</property>
<property name="whatsThis">
<string>Show splash screen on startup</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="splashScreenDuration">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>---</string>
</property>
</item>
<item>
<property name="text">
<string>2s</string>
</property>
</item>
<item>
<property name="text">
<string>3s</string>
</property>
</item>
<item>
<property name="text">
<string>4s</string>
</property>
</item>
<item>
<property name="text">
<string>6s</string>
</property>
</item>
<item>
<property name="text">
<string>8s</string>
</property>
</item>
<item>
<property name="text">
<string>10s</string>
</property>
</item>
<item>
<property name="text">
<string>15s</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="36" column="1">
<widget class="QComboBox" name="gpsFormatCB">
<item>
<property name="text">
<string>hh° (N/S) mm' ss''.dd</string>
</property>
</item>
<item>
<property name="text">
<string>NMEA</string>
</property>
</item>
</widget>
</item>
<item row="35" column="1">
<widget class="QComboBox" name="units_CB">
<item>
<property name="text">
<string>Metric</string>
</property>
</item>
<item>
<property name="text">
<string>Imperial</string>
</property>
</item>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_speakerPitch">
<property name="text">
<string>Speaker Pitch (spkr only)</string>
</property>
</widget>
</item>
<item row="37" column="4">
<widget class="QComboBox" name="voiceLang_CB"/>
</item>
<item row="37" column="3">
<widget class="QLabel" name="VoiceLang_label">
<property name="text">
<string>Voice Language</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSlider" name="hapticStrength">
<property name="minimum">
@@ -195,6 +261,41 @@
</item>
</layout>
</item>
<item row="16" column="1">
<widget class="QCheckBox" name="memwarnChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_beeperlen">
<property name="text">
@@ -247,7 +348,7 @@
</property>
</widget>
</item>
<item row="38" column="0" colspan="2">
<item row="39" column="0" colspan="2">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -1278,41 +1379,6 @@ Acceptable values are 5v..10v</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QCheckBox" name="memwarnChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="mavbaud_label">
<property name="text">
@@ -1404,85 +1470,6 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="12" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="splashScreenChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Show splash screen on startup</string>
</property>
<property name="whatsThis">
<string>Show splash screen on startup</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="splashScreenDuration">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>---</string>
</property>
</item>
<item>
<property name="text">
<string>2s</string>
</property>
</item>
<item>
<property name="text">
<string>3s</string>
</property>
</item>
<item>
<property name="text">
<string>4s</string>
</property>
</item>
<item>
<property name="text">
<string>6s</string>
</property>
</item>
<item>
<property name="text">
<string>8s</string>
</property>
</item>
<item>
<property name="text">
<string>10s</string>
</property>
</item>
<item>
<property name="text">
<string>15s</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
@@ -1607,19 +1594,6 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="33" column="0">
<widget class="QLabel" name="stickReverseLB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Stick reverse (order as above)</string>
</property>
</widget>
</item>
<item row="34" column="0">
<widget class="QLabel" name="label_13">
<property name="sizePolicy">
@@ -1633,13 +1607,6 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="35" column="0">
<widget class="QLabel" name="label_faimode">
<property name="text">
<string>FAI Mode</string>
</property>
</widget>
</item>
<item row="31" column="1">
<widget class="QComboBox" name="stickmodeCB">
<property name="toolTip">
@@ -1694,38 +1661,6 @@ Mode 4:
</item>
</widget>
</item>
<item row="33" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="stickReverse1">
<property name="text">
<string notr="true">1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse2">
<property name="text">
<string notr="true">2</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse3">
<property name="text">
<string notr="true">3</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse4">
<property name="text">
<string notr="true">4</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="34" column="1">
<widget class="QComboBox" name="channelorderCB">
<property name="toolTip">
@@ -1862,17 +1797,7 @@ Mode 4:
</item>
</widget>
</item>
<item row="35" column="1">
<widget class="QCheckBox" name="faimode_CB">
<property name="toolTip">
<string>If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio.</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="36" column="0">
<item row="37" column="0">
<widget class="QLabel" name="switchesDelayLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
@@ -1885,7 +1810,7 @@ Mode 4:
</property>
</widget>
</item>
<item row="36" column="1">
<item row="37" column="1">
<widget class="QSpinBox" name="switchesDelay">
<property name="toolTip">
<string/>
@@ -1932,6 +1857,98 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="36" column="3">
<widget class="QLabel" name="label_timezone">
<property name="text">
<string>Timeshift from UTC</string>
</property>
</widget>
</item>
<item row="31" column="4">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="stickReverse1">
<property name="text">
<string notr="true">1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse2">
<property name="text">
<string notr="true">2</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse3">
<property name="text">
<string notr="true">3</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse4">
<property name="text">
<string notr="true">4</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="31" column="3">
<widget class="QLabel" name="stickReverseLB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Stick reverse</string>
</property>
</widget>
</item>
<item row="36" column="4">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QSpinBox" name="timezoneSB">
<property name="minimum">
<number>-14</number>
</property>
<property name="maximum">
<number>12</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="adjustRTC">
<property name="toolTip">
<string>If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio.</string>
</property>
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string>Adjust RTC</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="34" column="4">
<widget class="QCheckBox" name="faimode_CB">
<property name="toolTip">
<string>If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio.</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
+12 -5
View File
@@ -412,9 +412,10 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin
}
for (int i=-GetCurrentFirmware()->getCapability(SwitchesPositions); i<0; i++) {
if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i))
continue;
item = RawSwitch(SWITCH_TYPE_SWITCH, i);
if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i)){
continue;
}
b->addItem(item.toString(), item.toValue());
if (item == value) b->setCurrentIndex(b->count()-1);
}
@@ -433,9 +434,10 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin
}
for (int i=1; i<=GetCurrentFirmware()->getCapability(SwitchesPositions); i++) {
if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i))
continue;
item = RawSwitch(SWITCH_TYPE_SWITCH, i);
if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i)){
continue;
}
b->addItem(item.toString(), item.toValue());
if (item == value) b->setCurrentIndex(b->count()-1);
}
@@ -525,7 +527,7 @@ void populateGVCB(QComboBox *b, int value)
}
}
void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData * model, unsigned int flags)
void populateSourceCB(QComboBox *b, const RawSource & source, const GeneralSettings generalSettings, const ModelData * model, unsigned int flags)
{
BoardEnum board = GetCurrentFirmware()->getBoard();
RawSource item;
@@ -590,6 +592,11 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData *
for (int i=0; i<GetCurrentFirmware()->getCapability(Switches); i++) {
item = RawSource(SOURCE_TYPE_SWITCH, i);
b->addItem(item.toString(model), item.toValue());
if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchSourceAllowedTaranis(i)) {
QModelIndex index = b->model()->index(b->count()-1, 0);
QVariant v(0);
b->model()->setData(index, v, Qt::UserRole - 1);
}
if (item == source) b->setCurrentIndex(b->count()-1);
}
+1 -1
View File
@@ -115,7 +115,7 @@ QString getPhasesStr(unsigned int phases, ModelData * model);
// void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up
void populateGVCB(QComboBox *b, int value);
void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData * model, unsigned int flags);
void populateSourceCB(QComboBox *b, const RawSource &source, const GeneralSettings generalSettings, const ModelData * model, unsigned int flags);
QString getPhaseName(int val, const char * phasename=NULL);
QString getInputStr(ModelData * model, int index);
QString image2qstring(QImage image);
+3 -3
View File
@@ -68,7 +68,7 @@
#include "radiointerface.h"
#include "progressdialog.h"
#define OPENTX_COMPANION_DOWNLOADS "http://downloads-20.open-tx.org/companion"
#define OPENTX_COMPANION_DOWNLOADS "http://downloads-21.open-tx.org/companion"
#define DONATE_STR "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QUZ48K4SEXDP2"
#ifdef __APPLE__
@@ -121,6 +121,7 @@ MainWindow::MainWindow():
}
QTimer::singleShot(updateDelay, this, SLOT(doAutoUpdates()));
QTimer::singleShot(updateDelay, this, SLOT(displayWarnings()));
updateSdsyncAction();
QStringList strl = QApplication::arguments();
QString str;
@@ -916,13 +917,12 @@ void MainWindow::updateMenus()
printAct->setEnabled(hasSelection);
loadbackupAct->setEnabled(hasMdiChild);
compareAct->setEnabled(activeMdiChild());
updateSdsyncAction();
updateRecentFileActions();
updateProfilesActions();
updateLanguageActions();
updateIconSizeActions();
updateIconThemeActions();
setWindowTitle(tr("OpenTX Companion - FW: %1 - Profile: %2").arg(GetCurrentFirmware()->getName()).arg( g.profile[g.id()].name() ));
setWindowTitle(tr("OpenTX Companion 2.1 - FW: %1 - Profile: %2").arg(GetCurrentFirmware()->getName()).arg( g.profile[g.id()].name() ));
}
MdiChild *MainWindow::createMdiChild()
+5 -4
View File
@@ -264,6 +264,7 @@ void CustomFunctionsPanel::playMusic()
phononCurrent = -1;
}
else {
playBT[phononCurrent]->setIcon(CompanionIcon("play.png"));
phononCurrent = index;
clickObject->clear();
#ifdef __APPLE__
@@ -714,18 +715,18 @@ void CustomFunctionsPanel::populateFuncParamCB(QComboBox *b, uint function, unsi
b->setCurrentIndex(value);
}
else if (function==FuncVolume) {
populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS);
populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS);
}
else if (function==FuncPlayValue) {
populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT);
populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT);
}
else if (function>=FuncAdjustGV1 && function<=FuncAdjustGVLast) {
switch (adjustmode) {
case 1:
populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS|POPULATE_SWITCHES);
populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS|POPULATE_SWITCHES);
break;
case 2:
populateSourceCB(b, RawSource(value), model, POPULATE_GVARS);
populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_GVARS);
break;
case 3:
b->clear();
+1 -1
View File
@@ -60,7 +60,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
if (firmware->getCapability(VirtualInputs)) {
ui->inputName->setMaxLength(4);
populateSourceCB(ui->sourceCB, ed->srcRaw, &model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY);
populateSourceCB(ui->sourceCB, ed->srcRaw, generalSettings, &model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY);
ui->sourceCB->removeItem(0);
}
else {
+3 -1
View File
@@ -209,7 +209,9 @@ void FlightModePanel::update()
if (ui->gvGB->isVisible()) {
for (int i=0; i<gvCount; i++) {
gvNames[i]->setText(model->gvars_names[i]);
if (firmware->getCapability(GvarsName) > 0) {
gvNames[i]->setText(model->gvars_names[i]);
}
gvValues[i]->setDisabled(model->isGVarLinked(phaseIdx, i));
gvValues[i]->setValue(model->getGVarValue(phaseIdx, i));
if (IS_TARANIS(GetEepromInterface()->getBoard()) && phaseIdx == 0) {
+3 -3
View File
@@ -48,11 +48,11 @@ void HeliPanel::update()
lock = true;
ui->swashType->setCurrentIndex(model->swashRingData.type);
populateSourceCB(ui->swashCollectiveSource, model->swashRingData.collectiveSource, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
populateSourceCB(ui->swashCollectiveSource, model->swashRingData.collectiveSource, generalSettings, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
ui->swashRingVal->setValue(model->swashRingData.value);
if (firmware->getCapability(VirtualInputs)) {
populateSourceCB(ui->swashElevatorSource, model->swashRingData.elevatorSource, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
populateSourceCB(ui->swashAileronSource, model->swashRingData.aileronSource, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
populateSourceCB(ui->swashElevatorSource, model->swashRingData.elevatorSource, generalSettings, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
populateSourceCB(ui->swashAileronSource, model->swashRingData.aileronSource, generalSettings, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
ui->swashElevatorWeight->setValue(model->swashRingData.elevatorWeight);
ui->swashAileronWeight->setValue(model->swashRingData.aileronWeight);
ui->swashCollectiveWeight->setValue(model->swashRingData.collectiveWeight);
+4 -3
View File
@@ -261,6 +261,7 @@ void LogicalSwitchesPanel::edited()
}
emit modified();
lock = false;
updateLine(i);
}
}
@@ -300,7 +301,7 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i)
{
case LS_FAMILY_VOFS:
mask |= SOURCE1_VISIBLE;
populateSourceCB(cswitchSource1[i], source, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0));
populateSourceCB(cswitchSource1[i], source, generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0));
cswitchOffset[i]->setDecimals(range.decimals);
cswitchOffset[i]->setSingleStep(range.step);
if (source.isTimeBased()) {
@@ -345,8 +346,8 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i)
break;
case LS_FAMILY_VCOMP:
mask |= SOURCE1_VISIBLE | SOURCE2_VISIBLE;
populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0));
populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0));
populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0));
populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0));
break;
case LS_FAMILY_TIMER:
mask |= VALUE1_VISIBLE | VALUE2_VISIBLE;
+1 -1
View File
@@ -19,7 +19,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G
this->setWindowTitle(tr("DEST -> CH%1").arg(md->destCh));
populateSourceCB(ui->sourceCB, md->srcRaw, &model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
populateSourceCB(ui->sourceCB, md->srcRaw, generalSettings, &model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS);
ui->sourceCB->removeItem(0);
int limit = firmware->getCapability(OffsetWeight);
+23 -9
View File
@@ -495,19 +495,16 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
slider->setTickPosition(QSlider::TicksBothSides);
slider->setMinimumSize(QSize(30, 50));
slider->setMaximumSize(QSize(50, 50));
slider->setSingleStep(1);
slider->setPageStep(1);
slider->setTickInterval(1);
if (IS_TARANIS(board)) {
label->setText(switchesX9D[i]);
slider->setMaximum(2);
slider->setSingleStep(generalSettings.switchConfig[i] == GeneralSettings::SWITCH_3POS ? 1 : 2);
slider->setPageStep(slider->singleStep());
slider->setTickInterval(slider->singleStep());
slider->setMaximum(generalSettings.switchConfig[i] == GeneralSettings::SWITCH_3POS ? 2 : 1);
}
else {
label->setText(switches9X[i]);
slider->setMaximum(i==0 ? 2 : 1);
slider->setSingleStep(1);
slider->setPageStep(1);
slider->setTickInterval(1);
}
cb->setProperty("index", i);
ui->switchesStartupLayout->addWidget(label, 0, i+1);
@@ -735,12 +732,25 @@ void SetupPanel::updateBeepCenter()
void SetupPanel::updateStartupSwitches()
{
lock = true;
unsigned int switchStates = model->switchWarningStates;
unsigned int value;
for (int i=0; i<startupSwitchesSliders.size(); i++) {
QSlider *slider = startupSwitchesSliders[i];
QCheckBox * cb = startupSwitchesCheckboxes[i];
int index = slider->property("index").toInt();
bool enabled = !(model->switchWarningEnable & (1 << index));
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
value = (switchStates >> 2*index) & 0x03;
if (generalSettings.switchConfig[index] != GeneralSettings::SWITCH_3POS && value == 2)
value = 1;
}
else {
value = (i==0 ? switchStates & 0x3 : switchStates & 0x1);
switchStates >>= (i==0 ? 2 : 1);
}
slider->setValue(value);
slider->setEnabled(enabled);
cb->setChecked(enabled);
}
@@ -760,16 +770,20 @@ void SetupPanel::startupSwitchEdited(int value)
mask = 0x03 << shift;
}
else {
if (index == 1) {
if (index == 0) {
mask = 0x03;
}
else {
shift = index;
shift = index+1;
mask = 0x01 << shift;
}
}
model->switchWarningStates &= ~mask;
if (IS_TARANIS(GetEepromInterface()->getBoard()) && generalSettings.switchConfig[index] != GeneralSettings::SWITCH_3POS) {
if (value == 1) value = 2;
}
if (value) {
model->switchWarningStates |= (value << shift);
+21 -5
View File
@@ -486,7 +486,8 @@ TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor,
ui->instance->setField(sensor.instance);
ui->ratio->setField(sensor.ratio);
ui->offset->setField(sensor.offset);
ui->inputFlags->setField(sensor.inputFlags);
ui->autoOffset->setField(sensor.autoOffset);
ui->filter->setField(sensor.filter);
ui->logs->setField(sensor.logs);
ui->persistent->setField(sensor.persistent);
ui->gpsSensor->setField(sensor.gps);
@@ -557,13 +558,28 @@ void TelemetrySensorPanel::update()
ui->instance->show();
ui->formula->hide();
ratioFieldsDisplayed = (sensor.unit != SensorData::UNIT_GPS && sensor.unit != SensorData::UNIT_DATETIME);
ui->offset->setDecimals(sensor.prec);
precDisplayed = (sensor.unit != SensorData::UNIT_GPS && sensor.unit != SensorData::UNIT_DATETIME);
ui->offset->setMaximum((sensor.prec > 0 ? sensor.prec == 2 ? 30000 : 3000 : 300));
ui->offset->setMinimum((sensor.prec > 0 ? sensor.prec == 2 ? -30000 : -3000 : -300));
if (sensor.unit == SensorData::UNIT_RPMS) {
ui->offset->setDecimals(0);
ui->ratio->setDecimals(0);
ui->autoOffset->hide();
ui->ratio->setMinimum(1);
ui->offset->setMinimum(1);
}
else {
ui->offset->setDecimals(sensor.prec);
ui->ratio->setDecimals(1);
}
}
ui->ratioLabel->setVisible(ratioFieldsDisplayed);
ui->ratioLabel->setVisible(ratioFieldsDisplayed && sensor.unit != SensorData::UNIT_RPMS);
ui->bladesLabel->setVisible(sensor.unit == SensorData::UNIT_RPMS);
ui->ratio->setVisible(ratioFieldsDisplayed);
ui->offsetLabel->setVisible(ratioFieldsDisplayed);
ui->offsetLabel->setVisible(ratioFieldsDisplayed && sensor.unit != SensorData::UNIT_RPMS);
ui->multiplierLabel->setVisible(sensor.unit == SensorData::UNIT_RPMS);
ui->offset->setVisible(ratioFieldsDisplayed);
ui->precLabel->setVisible(precDisplayed);
ui->prec->setVisible(precDisplayed);
@@ -642,7 +658,7 @@ void TelemetrySensorPanel::on_unit_currentIndexChanged(int index)
}
}
void TelemetrySensorPanel::on_prec_editingFinished()
void TelemetrySensorPanel::on_prec_valueChanged()
{
if (!lock) {
sensor.prec = ui->prec->value();
+1 -1
View File
@@ -95,7 +95,7 @@ class TelemetrySensorPanel: public ModelPanel
void on_type_currentIndexChanged(int index);
void on_formula_currentIndexChanged(int index);
void on_unit_currentIndexChanged(int index);
void on_prec_editingFinished();
void on_prec_valueChanged();
protected:
void updateSourcesComboBox(AutoComboBox * cb, bool negative);
+79 -27
View File
@@ -13,7 +13,7 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1">
<property name="leftMargin">
<number>0</number>
</property>
@@ -419,6 +419,46 @@
<string>Percentage (%)</string>
</property>
</item>
<item>
<property name="text">
<string>Energy (mAh)</string>
</property>
</item>
<item>
<property name="text">
<string>Power (W)</string>
</property>
</item>
<item>
<property name="text">
<string>RF Power (dBm)</string>
</property>
</item>
<item>
<property name="text">
<string>RPM</string>
</property>
</item>
<item>
<property name="text">
<string>Acceleration (g)</string>
</property>
</item>
<item>
<property name="text">
<string>Heading (°)</string>
</property>
</item>
<item>
<property name="text">
<string>Volume (mL)</string>
</property>
</item>
<item>
<property name="text">
<string>Volume (US fl.Oz.)</string>
</property>
</item>
</widget>
</item>
<item>
@@ -466,6 +506,13 @@
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="bladesLabel">
<property name="text">
<string>Blades</string>
</property>
</widget>
</item>
<item>
<widget class="AutoDoubleSpinBox" name="ratio">
<property name="enabled">
@@ -478,7 +525,10 @@
</sizepolicy>
</property>
<property name="decimals">
<number>1</number>
<number>0</number>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>3000.000000000000000</double>
@@ -498,6 +548,13 @@
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="multiplierLabel">
<property name="text">
<string>Multiplier</string>
</property>
</widget>
</item>
<item>
<widget class="AutoDoubleSpinBox" name="offset">
<property name="sizePolicy">
@@ -507,42 +564,37 @@
</sizepolicy>
</property>
<property name="decimals">
<number>2</number>
<number>0</number>
</property>
<property name="minimum">
<double>-12.800000000000001</double>
<double>-30000.000000000000000</double>
</property>
<property name="maximum">
<double>12.699999999999999</double>
<double>30000.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="AutoComboBox" name="inputFlags">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<widget class="AutoCheckBox" name="autoOffset">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Auto Offset</string>
</property>
</widget>
</item>
<item>
<widget class="AutoCheckBox" name="filter">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Filter</string>
</property>
<item>
<property name="text">
<string>---</string>
</property>
</item>
<item>
<property name="text">
<string>Auto Offset</string>
</property>
</item>
<item>
<property name="text">
<string>Filtered</string>
</property>
</item>
</widget>
</item>
<item>
@@ -31,7 +31,7 @@ void registerSimulators()
{
QDir dir(".");
QStringList filters;
#if !defined __GNUC__
#if (!defined __GNUC__) || (defined __CYGWIN__)
filters << "*-simulator.dll";
#else
filters << "*-simulator.so";
+115 -5
View File
@@ -61,11 +61,14 @@ void generateSportPacket(uint8_t * packet, uint8_t dataId, uint8_t prim, uint16_
void TelemetrySimulator::generateTelemetryFrame()
{
static int item = 0;
bool ok = true;
uint8_t buffer[FRSKY_SPORT_PACKET_SIZE];
memset(buffer, 0, sizeof(buffer));
switch(item++) {
case 0:
generateSportPacket(buffer, 1, DATA_FRAME, RSSI_ID, LIMIT<uint32_t>(0, ui->Rssi->text().toInt(), 0xFF));
if (ui->Rssi->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, RSSI_ID, LIMIT<uint32_t>(0, ui->Rssi->text().toInt(&ok, 0), 0xFF));
break;
case 1:
@@ -75,20 +78,127 @@ void TelemetrySimulator::generateTelemetryFrame()
break;
case 2:
generateSportPacket(buffer, 1, DATA_FRAME, SWR_ID, LIMIT<uint32_t>(0, ui->Swr->text().toInt(), 0xFF));
if (ui->Swr->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, SWR_ID, LIMIT<uint32_t>(0, ui->Swr->text().toInt(&ok, 0), 0xFFFF));
break;
case 3:
generateSportPacket(buffer, 1, DATA_FRAME, ADC1_ID, LIMIT<uint32_t>(0, ui->A1->text().toInt(), 0xFF));
if (ui->A1->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, ADC1_ID, LIMIT<uint32_t>(0, ui->A1->text().toInt(&ok, 0), 0xFF));
break;
case 4:
generateSportPacket(buffer, 1, DATA_FRAME, ADC2_ID, LIMIT<uint32_t>(0, ui->A2->text().toInt(), 0xFF));
if (ui->A2->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, ADC2_ID, LIMIT<uint32_t>(0, ui->A2->text().toInt(&ok, 0), 0xFF));
break;
case 5:
if (ui->A3->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, A3_FIRST_ID, LIMIT<uint32_t>(0, ui->A3->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 6:
if (ui->A4->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, A4_FIRST_ID, LIMIT<uint32_t>(0, ui->A4->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 7:
if (ui->T1->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, T1_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->T1->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 8:
if (ui->T2->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, T2_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->T2->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 9:
if (ui->rpm->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, RPM_FIRST_ID, LIMIT<uint32_t>(0, ui->rpm->text().toInt(&ok, 0), 0xFFFF));
break;
case 10:
if (ui->fuel->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, FUEL_FIRST_ID, LIMIT<uint32_t>(0, ui->fuel->text().toInt(&ok, 0), 0xFFFF));
break;
case 11:
if (ui->aspeed->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, AIR_SPEED_FIRST_ID, LIMIT<uint32_t>(0, ui->aspeed->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 12:
if (ui->vspeed->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, VARIO_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->vspeed->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 13:
if (ui->valt->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, ALT_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->valt->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 14:
if (ui->accx->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, ACCX_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->accx->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 15:
if (ui->accy->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, ACCY_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->accy->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 16:
if (ui->accz->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, ACCZ_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->accz->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 17:
if (ui->vfas->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, VFAS_FIRST_ID, LIMIT<uint32_t>(0, ui->vfas->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 18:
if (ui->curr->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, CURR_FIRST_ID, LIMIT<uint32_t>(0, ui->curr->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 19:
if (ui->cells->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, CELLS_FIRST_ID, LIMIT<uint32_t>(0, ui->cells->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 20:
if (ui->gps_alt->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, GPS_ALT_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->gps_alt->text().toInt(&ok, 0), 0x7FFFFFFF));
break;
case 21:
if (ui->gps_speed->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, GPS_SPEED_FIRST_ID, LIMIT<uint32_t>(0, ui->gps_speed->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 22:
if (ui->gps_course->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, GPS_COURS_FIRST_ID, LIMIT<uint32_t>(0, ui->gps_course->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 23:
if (ui->gps_time->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, GPS_TIME_DATE_FIRST_ID, LIMIT<uint32_t>(0, ui->gps_time->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
case 24:
if (ui->gps_latlon->text().length())
generateSportPacket(buffer, 1, DATA_FRAME, GPS_LONG_LATI_FIRST_ID, LIMIT<uint32_t>(0, ui->gps_latlon->text().toInt(&ok, 0), 0xFFFFFFFF));
break;
default:
item = 0;
return;
}
simulator->sendTelemetry(buffer, 9);
if (ok && buffer[0])
simulator->sendTelemetry(buffer, FRSKY_SPORT_PACKET_SIZE);
else
onTimerEvent();
}
+293 -18
View File
@@ -6,67 +6,342 @@
<rect>
<x>0</x>
<y>0</y>
<width>184</width>
<height>165</height>
<width>278</width>
<height>384</height>
</rect>
</property>
<property name="windowTitle">
<string>Telemetry Simulator</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="bottomMargin">
<number>6</number>
</property>
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout_2">
<item row="12" column="0">
<widget class="QLabel" name="label_12">
<property name="toolTip">
<string>Vario Altitude</string>
</property>
<property name="text">
<string>V-ALT</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_11">
<property name="toolTip">
<string>Vario Vertical Speed</string>
</property>
<property name="text">
<string>V-VSPD</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QLineEdit" name="valt"/>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="vspeed"/>
</item>
<item row="5" column="3">
<widget class="QLineEdit" name="gps_alt"/>
</item>
<item row="12" column="2">
<widget class="QLabel" name="label_15">
<property name="text">
<string>ACCZ</string>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QLabel" name="label_23">
<property name="toolTip">
<string>GPS Time</string>
</property>
<property name="text">
<string>GPS-T</string>
</property>
</widget>
</item>
<item row="8" column="3">
<widget class="QLineEdit" name="gps_time"/>
</item>
<item row="10" column="2">
<widget class="QLabel" name="label_13">
<property name="text">
<string>ACCX</string>
</property>
</widget>
</item>
<item row="10" column="3">
<widget class="QLineEdit" name="accx"/>
</item>
<item row="3" column="3">
<widget class="QLineEdit" name="Swr"/>
<widget class="QLineEdit" name="cells"/>
</item>
<item row="4" column="3">
<widget class="QLineEdit" name="A1"/>
<item row="2" column="3">
<widget class="QLineEdit" name="curr"/>
</item>
<item row="1" column="1">
<item row="6" column="3">
<widget class="QLineEdit" name="gps_speed"/>
</item>
<item row="9" column="2">
<widget class="QLabel" name="label_24">
<property name="toolTip">
<string>GPS Lat/Lon</string>
</property>
<property name="text">
<string>GPS-LL</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_17">
<property name="toolTip">
<string>VFAS</string>
</property>
<property name="text">
<string>FAS-V</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLabel" name="label_21">
<property name="toolTip">
<string>GPS Speed</string>
</property>
<property name="text">
<string>GPS-S</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_19">
<property name="text">
<string>CELLS</string>
</property>
</widget>
</item>
<item row="11" column="3">
<widget class="QLineEdit" name="accy"/>
</item>
<item row="7" column="3">
<widget class="QLineEdit" name="gps_course"/>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="vfas"/>
</item>
<item row="11" column="2">
<widget class="QLabel" name="label_14">
<property name="text">
<string>ACCY</string>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QLabel" name="label_22">
<property name="toolTip">
<string>GPS Course</string>
</property>
<property name="text">
<string>GPS-C</string>
</property>
</widget>
</item>
<item row="9" column="3">
<widget class="QLineEdit" name="gps_latlon"/>
</item>
<item row="12" column="3">
<widget class="QLineEdit" name="accz"/>
</item>
<item row="5" column="2">
<widget class="QLabel" name="label_20">
<property name="toolTip">
<string>GPS Altitude</string>
</property>
<property name="text">
<string>GPS-A</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_18">
<property name="toolTip">
<string>CURRENT</string>
</property>
<property name="text">
<string>FAS-C</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="Swr">
<property name="text">
<string>30</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>RSSI</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="Rssi"/>
</item>
<item row="4" column="1">
<widget class="QLabel" name="label_3">
<item row="1" column="1">
<widget class="QLineEdit" name="Rssi">
<property name="text">
<string>A1</string>
<string>75</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>SWR</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QCheckBox" name="Simulate">
<item row="4" column="2">
<widget class="QLabel" name="label_16">
<property name="toolTip">
<string>FR_ID_AIR_SPEED</string>
</property>
<property name="text">
<string>simulate</string>
<string>ASPD</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLineEdit" name="aspeed"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="A1"/>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="A2"/>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="A3"/>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="A4"/>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="T1"/>
</item>
<item row="8" column="1">
<widget class="QLineEdit" name="T2"/>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="rpm"/>
</item>
<item row="10" column="1">
<widget class="QLineEdit" name="fuel"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>A1</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>A2</string>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QLineEdit" name="A2"/>
<item row="5" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>A3</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>A4</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_8">
<property name="toolTip">
<string>Temperature 1</string>
</property>
<property name="text">
<string>T1</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_9">
<property name="toolTip">
<string>Temperature 2</string>
</property>
<property name="text">
<string>T2</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>RPM</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>FUEL</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="Simulate">
<property name="toolTip">
<string>When enabled, sends any non-blank values as simulated telemetry data.</string>
</property>
<property name="text">
<string>simulate</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Start with &lt;span style=&quot; font-style:italic;&quot;&gt;0x&lt;/span&gt; for hex, &lt;span style=&quot; font-style:italic;&quot;&gt;0&lt;/span&gt; for octal, otherwise decimal.&lt;br/&gt;Numeric entry only. Blank values are not sent.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>Simulate</tabstop>
<tabstop>Rssi</tabstop>
<tabstop>Swr</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>