Telemetry Volts and Current sources (RxBatt, A3, A4) now available in
Companion. QAutoComboBox introduced to simplify code
This commit is contained in:
@@ -187,6 +187,7 @@ set(companion_MOC_HDRS
|
||||
mainwindow.h
|
||||
taranisnotfound.h
|
||||
qcustomplot.h
|
||||
qautocombobox.h
|
||||
helpers.h
|
||||
wizarddialog.h
|
||||
)
|
||||
|
||||
@@ -856,6 +856,25 @@ class FrSkyScreenData {
|
||||
void clear() { memset(this, 0, sizeof(FrSkyScreenData)); }
|
||||
};
|
||||
|
||||
enum TelemetryVoltsSources {
|
||||
TELEMETRY_VOLTS_SOURCE_RXBATT,
|
||||
TELEMETRY_VOLTS_SOURCE_A1,
|
||||
TELEMETRY_VOLTS_SOURCE_A2,
|
||||
TELEMETRY_VOLTS_SOURCE_A3,
|
||||
TELEMETRY_VOLTS_SOURCE_A4,
|
||||
TELEMETRY_VOLTS_SOURCE_FAS,
|
||||
TELEMETRY_VOLTS_SOURCE_CELLS
|
||||
};
|
||||
|
||||
enum TelemetryCurrentSources {
|
||||
TELEMETRY_CURRENT_SOURCE_NONE,
|
||||
TELEMETRY_CURRENT_SOURCE_A1,
|
||||
TELEMETRY_CURRENT_SOURCE_A2,
|
||||
TELEMETRY_CURRENT_SOURCE_A3,
|
||||
TELEMETRY_CURRENT_SOURCE_A4,
|
||||
TELEMETRY_CURRENT_SOURCE_FAS
|
||||
};
|
||||
|
||||
class FrSkyData {
|
||||
public:
|
||||
FrSkyData() { clear(); }
|
||||
|
||||
@@ -2177,6 +2177,42 @@ class RSSIConversionTable: public ConversionTable
|
||||
}
|
||||
};
|
||||
|
||||
class TelemetryVoltsSourceConversionTable: public ConversionTable
|
||||
{
|
||||
public:
|
||||
TelemetryVoltsSourceConversionTable(BoardEnum board, unsigned int version)
|
||||
{
|
||||
int val = 0;
|
||||
if (IS_ARM(board) && version >= 216)
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_RXBATT, val++);
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_A1, val++);
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_A2, val++);
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_A3, val++);
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_A4, val++);
|
||||
}
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_FAS, val++);
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_CELLS, val++);
|
||||
}
|
||||
};
|
||||
|
||||
class TelemetryCurrentSourceConversionTable: public ConversionTable
|
||||
{
|
||||
public:
|
||||
TelemetryCurrentSourceConversionTable(BoardEnum board, unsigned int version)
|
||||
{
|
||||
int val = 0;
|
||||
addConversion(TELEMETRY_CURRENT_SOURCE_NONE, val++);
|
||||
addConversion(TELEMETRY_CURRENT_SOURCE_A1, val++);
|
||||
addConversion(TELEMETRY_CURRENT_SOURCE_A2, val++);
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
addConversion(TELEMETRY_CURRENT_SOURCE_A3, val++);
|
||||
addConversion(TELEMETRY_CURRENT_SOURCE_A4, val++);
|
||||
}
|
||||
addConversion(TELEMETRY_CURRENT_SOURCE_FAS, val++);
|
||||
}
|
||||
};
|
||||
|
||||
class VarioConversionTable: public ConversionTable
|
||||
{
|
||||
public:
|
||||
@@ -2191,7 +2227,9 @@ class VarioConversionTable: public ConversionTable
|
||||
class FrskyField: public StructField {
|
||||
public:
|
||||
FrskyField(FrSkyData & frsky, BoardEnum board, unsigned int version):
|
||||
StructField("FrSky")
|
||||
StructField("FrSky"),
|
||||
telemetryVoltsSourceConversionTable(board, version),
|
||||
telemetryCurrentSourceConversionTable(board, version)
|
||||
{
|
||||
rssiConversionTable[0] = RSSIConversionTable(0);
|
||||
rssiConversionTable[1] = RSSIConversionTable(1);
|
||||
@@ -2212,14 +2250,14 @@ class FrskyField: public StructField {
|
||||
}
|
||||
Append(new UnsignedField<8>(frsky.usrProto));
|
||||
if (version >= 216) {
|
||||
Append(new UnsignedField<7>(frsky.voltsSource));
|
||||
Append(new ConversionField< UnsignedField<7> >(frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source"));
|
||||
Append(new BoolField<1>(frsky.altitudeDisplayed));
|
||||
}
|
||||
else {
|
||||
Append(new UnsignedField<8>(frsky.voltsSource));
|
||||
Append(new ConversionField< UnsignedField<8> >(frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source"));
|
||||
}
|
||||
Append(new ConversionField< SignedField<8> >(frsky.blades, -2));
|
||||
Append(new UnsignedField<8>(frsky.currentSource));
|
||||
Append(new ConversionField< UnsignedField<8> >(frsky.currentSource, &telemetryCurrentSourceConversionTable, "Current Source"));
|
||||
|
||||
Append(new UnsignedField<1>(frsky.screens[0].type));
|
||||
Append(new UnsignedField<1>(frsky.screens[1].type));
|
||||
@@ -2264,7 +2302,7 @@ class FrskyField: public StructField {
|
||||
Append(new ConversionField< UnsignedField<2> >((unsigned int &)frsky.blades, -2));
|
||||
Append(new UnsignedField<1>(frsky.screens[0].type));
|
||||
Append(new UnsignedField<1>(frsky.screens[1].type));
|
||||
Append(new UnsignedField<2>(frsky.voltsSource, "Volts Source"));
|
||||
Append(new ConversionField< UnsignedField<2> >(frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source"));
|
||||
Append(new SignedField<4>(frsky.varioMin, "Vario Min"));
|
||||
Append(new SignedField<4>(frsky.varioMax));
|
||||
for (int i=0; i<2; i++) {
|
||||
@@ -2276,7 +2314,7 @@ class FrskyField: public StructField {
|
||||
}
|
||||
Append(new UnsignedField<3>(frsky.varioSource));
|
||||
Append(new SignedField<5>(frsky.varioCenterMin));
|
||||
Append(new UnsignedField<3>(frsky.currentSource));
|
||||
Append(new ConversionField< UnsignedField<3> >(frsky.currentSource, &telemetryCurrentSourceConversionTable, "Current Source"));
|
||||
Append(new SignedField<8>(frsky.varioCenterMax));
|
||||
if (version >= 216) {
|
||||
// TODO int8_t fasOffset;
|
||||
@@ -2288,6 +2326,8 @@ class FrskyField: public StructField {
|
||||
protected:
|
||||
RSSIConversionTable rssiConversionTable[2];
|
||||
VarioConversionTable varioConversionTable;
|
||||
TelemetryVoltsSourceConversionTable telemetryVoltsSourceConversionTable;
|
||||
TelemetryCurrentSourceConversionTable telemetryCurrentSourceConversionTable;
|
||||
};
|
||||
|
||||
class MavlinkField: public StructField {
|
||||
|
||||
@@ -9,6 +9,8 @@ class ModelPanel : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
friend class QUnsignedAutoComboBox;
|
||||
|
||||
public:
|
||||
ModelPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware);
|
||||
virtual ~ModelPanel();
|
||||
|
||||
@@ -655,10 +655,42 @@ void TelemetryPanel::setup()
|
||||
ui->frskyProtoCB->setCurrentIndex(model.frsky.usrProto);
|
||||
ui->frskyUnitsCB->setCurrentIndex(model.frsky.imperial);
|
||||
ui->bladesCount->setValue(model.frsky.blades);
|
||||
ui->frskyCurrentCB->setCurrentIndex(model.frsky.currentSource);
|
||||
ui->frskyVoltCB->setCurrentIndex(model.frsky.voltsSource);
|
||||
|
||||
lock=false;
|
||||
populateVoltsSource();
|
||||
populateCurrentSource();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
void TelemetryPanel::populateVoltsSource()
|
||||
{
|
||||
QUnsignedAutoComboBox * cb = ui->frskyVoltCB;
|
||||
cb->setField(&model.frsky.voltsSource, this);
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
cb->addItem(tr("RxBatt"), TELEMETRY_VOLTS_SOURCE_RXBATT);
|
||||
}
|
||||
cb->addItem(tr("A1"), TELEMETRY_VOLTS_SOURCE_A1);
|
||||
cb->addItem(tr("A2"), TELEMETRY_VOLTS_SOURCE_A2);
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
cb->addItem(tr("A3"), TELEMETRY_VOLTS_SOURCE_A3);
|
||||
cb->addItem(tr("A4"), TELEMETRY_VOLTS_SOURCE_A4);
|
||||
}
|
||||
cb->addItem(tr("FAS"), TELEMETRY_VOLTS_SOURCE_FAS);
|
||||
cb->addItem(tr("Cells"), TELEMETRY_VOLTS_SOURCE_CELLS);
|
||||
}
|
||||
|
||||
void TelemetryPanel::populateCurrentSource()
|
||||
{
|
||||
QUnsignedAutoComboBox * cb = ui->frskyCurrentCB;
|
||||
cb->setField(&model.frsky.currentSource, this);
|
||||
cb->addItem(tr("---"), TELEMETRY_CURRENT_SOURCE_NONE);
|
||||
cb->addItem(tr("A1"), TELEMETRY_CURRENT_SOURCE_A1);
|
||||
cb->addItem(tr("A2"), TELEMETRY_CURRENT_SOURCE_A2);
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
cb->addItem(tr("A3"), TELEMETRY_CURRENT_SOURCE_A3);
|
||||
cb->addItem(tr("A4"), TELEMETRY_CURRENT_SOURCE_A4);
|
||||
}
|
||||
cb->addItem(tr("FAS"), TELEMETRY_CURRENT_SOURCE_FAS);
|
||||
}
|
||||
|
||||
void TelemetryPanel::onAnalogModified()
|
||||
@@ -678,18 +710,6 @@ void TelemetryPanel::on_bladesCount_editingFinished()
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_frskyCurrentCB_currentIndexChanged(int index)
|
||||
{
|
||||
model.frsky.currentSource=index;
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_frskyVoltCB_currentIndexChanged(int index)
|
||||
{
|
||||
model.frsky.voltsSource=index;
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_frskyProtoCB_currentIndexChanged(int index)
|
||||
{
|
||||
model.frsky.usrProto = index;
|
||||
|
||||
@@ -82,16 +82,11 @@ class TelemetryPanel : public ModelPanel
|
||||
TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware);
|
||||
virtual ~TelemetryPanel();
|
||||
|
||||
signals:
|
||||
void modified();
|
||||
|
||||
private slots:
|
||||
void onAnalogModified();
|
||||
void on_frskyProtoCB_currentIndexChanged(int index);
|
||||
void on_frskyUnitsCB_currentIndexChanged(int index);
|
||||
void on_bladesCount_editingFinished();
|
||||
void on_frskyCurrentCB_currentIndexChanged(int index);
|
||||
void on_frskyVoltCB_currentIndexChanged(int index);
|
||||
void on_AltitudeToolbar_ChkB_toggled(bool checked);
|
||||
void on_rssiAlarm1CB_currentIndexChanged(int index);
|
||||
void on_rssiAlarm2CB_currentIndexChanged(int index);
|
||||
@@ -114,6 +109,8 @@ class TelemetryPanel : public ModelPanel
|
||||
|
||||
void setup();
|
||||
void telBarUpdate();
|
||||
void populateVoltsSource();
|
||||
void populateCurrentSource();
|
||||
};
|
||||
|
||||
#endif // TELEMETRY_H
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>757</width>
|
||||
<width>840</width>
|
||||
<height>457</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -249,33 +249,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<widget class="QComboBox" name="frskyCurrentCB">
|
||||
<widget class="QUnsignedAutoComboBox" name="frskyCurrentCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>NONE</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>A1</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>A2</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>FAS</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="3">
|
||||
@@ -299,33 +279,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="frskyVoltCB">
|
||||
<widget class="QUnsignedAutoComboBox" name="frskyVoltCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>A1</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>A2</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>FAS</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>CELS</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
@@ -1125,6 +1085,13 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>QUnsignedAutoComboBox</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>qautocombobox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#ifndef QAUTOCOMBOBOX_H_
|
||||
#define QAUTOCOMBOBOX_H_
|
||||
|
||||
#include <QComboBox>
|
||||
#include "modeledit/modelpanel.h"
|
||||
|
||||
class QUnsignedAutoComboBox: public QComboBox
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit QUnsignedAutoComboBox(QWidget *parent = 0):
|
||||
QComboBox(parent),
|
||||
field(NULL),
|
||||
panel(NULL),
|
||||
lock(false)
|
||||
{
|
||||
connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));
|
||||
}
|
||||
|
||||
void addItem(const QString & item, unsigned int value)
|
||||
{
|
||||
lock = true;
|
||||
QComboBox::addItem(item, value);
|
||||
if (field && *field==value)
|
||||
setCurrentIndex(count()-1);
|
||||
lock = false;
|
||||
}
|
||||
|
||||
void setField(unsigned int * field, ModelPanel * panel=NULL)
|
||||
{
|
||||
this->field = field;
|
||||
this->panel = panel;
|
||||
}
|
||||
|
||||
protected slots:
|
||||
void onCurrentIndexChanged(int index)
|
||||
{
|
||||
if (field && !lock) {
|
||||
*field = itemData(index).toInt();
|
||||
if (panel) {
|
||||
emit panel->modified();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
unsigned int * field;
|
||||
ModelPanel * panel;
|
||||
bool lock;
|
||||
};
|
||||
|
||||
#endif /* QAUTOCOMBOBOX_H_ */
|
||||
Reference in New Issue
Block a user