Telemetry Volts and Current sources (RxBatt, A3, A4) now available in

Companion. QAutoComboBox introduced to simplify code
This commit is contained in:
bsongis
2014-05-25 09:43:54 +02:00
parent 09d49126a4
commit 2fd1f575ba
8 changed files with 168 additions and 69 deletions
+1
View File
@@ -187,6 +187,7 @@ set(companion_MOC_HDRS
mainwindow.h
taranisnotfound.h
qcustomplot.h
qautocombobox.h
helpers.h
wizarddialog.h
)
+19
View File
@@ -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 {
+2
View File
@@ -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();
+35 -15
View File
@@ -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;
+2 -5
View File
@@ -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
+10 -43
View File
@@ -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>
+53
View File
@@ -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_ */