1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-24 16:55:15 +03:00

Fix lots of broken stuff in companion telemetry sensor handling, sync displayed items/units/formulas with firmware (should fix #2285)

This commit is contained in:
Andre Bernet 2015-05-09 21:49:27 +04:00
parent 6d0537988f
commit 28e92d964a
6 changed files with 81 additions and 54 deletions

View file

@ -95,8 +95,8 @@ QString getGVarString(int16_t val, bool sign)
void SensorData::updateUnit() void SensorData::updateUnit()
{ {
if (type == TYPE_CALCULATED) { if (type == TELEM_TYPE_CALCULATED) {
if (formula == FORMULA_CONSUMPTION) if (formula == TELEM_FORMULA_CONSUMPTION)
unit = UNIT_MAH; unit = UNIT_MAH;
} }
} }

View file

@ -855,29 +855,45 @@ class SensorData {
enum enum
{ {
TYPE_CUSTOM, TELEM_TYPE_CUSTOM,
TYPE_CALCULATED TELEM_TYPE_CALCULATED
}; };
enum enum
{ {
FORMULA_ADD, TELEM_FORMULA_ADD,
FORMULA_AVERAGE, TELEM_FORMULA_AVERAGE,
FORMULA_MIN, TELEM_FORMULA_MIN,
FORMULA_MAX, TELEM_FORMULA_MAX,
FORMULA_MULTIPLY, TELEM_FORMULA_MULTIPLY,
FORMULA_CELL, TELEM_FORMULA_TOTALIZE,
FORMULA_CONSUMPTION, TELEM_FORMULA_CELL,
FORMULA_DIST TELEM_FORMULA_CONSUMPTION,
TELEM_FORMULA_DIST,
TELEM_FORMULA_LAST = TELEM_FORMULA_DIST
}; };
enum { enum {
TELEM_CELL_INDEX_LOWEST,
TELEM_CELL_INDEX_1,
TELEM_CELL_INDEX_2,
TELEM_CELL_INDEX_3,
TELEM_CELL_INDEX_4,
TELEM_CELL_INDEX_5,
TELEM_CELL_INDEX_6,
TELEM_CELL_INDEX_HIGHEST,
TELEM_CELL_INDEX_DELTA,
};
enum
{
UNIT_RAW, UNIT_RAW,
UNIT_VOLTS, UNIT_VOLTS,
UNIT_AMPS, UNIT_AMPS,
UNIT_MILLIAMPS, UNIT_MILLIAMPS,
UNIT_KTS, UNIT_KTS,
UNIT_METERS_PER_SECOND, UNIT_METERS_PER_SECOND,
UNIT_FEET_PER_SECOND,
UNIT_KMH, UNIT_KMH,
UNIT_MPH, UNIT_MPH,
UNIT_METERS, UNIT_METERS,
@ -891,11 +907,14 @@ class SensorData {
UNIT_RPMS, UNIT_RPMS,
UNIT_G, UNIT_G,
UNIT_DEGREE, UNIT_DEGREE,
UNIT_MILLILITERS,
UNIT_FLOZ,
UNIT_HOURS, UNIT_HOURS,
UNIT_MINUTES, UNIT_MINUTES,
UNIT_SECONDS, UNIT_SECONDS,
// FrSky format used for these fields, could be another format in the future // FrSky format used for these fields, could be another format in the future
UNIT_CELLS, UNIT_FIRST_VIRTUAL,
UNIT_CELLS = UNIT_FIRST_VIRTUAL,
UNIT_DATETIME, UNIT_DATETIME,
UNIT_GPS, UNIT_GPS,
UNIT_GPS_LONGITUDE, UNIT_GPS_LONGITUDE,

View file

@ -2706,7 +2706,7 @@ class SensorField: public TransformedField {
virtual void beforeExport() virtual void beforeExport()
{ {
if (sensor.type == SensorData::TYPE_CUSTOM) { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) {
_id = sensor.id; _id = sensor.id;
_instance = sensor.instance; _instance = sensor.instance;
_param = (sensor.ratio) + (sensor.offset << 16); _param = (sensor.ratio) + (sensor.offset << 16);
@ -2714,20 +2714,20 @@ class SensorField: public TransformedField {
else { else {
_id = sensor.persistentValue; _id = sensor.persistentValue;
_instance = sensor.formula; _instance = sensor.formula;
if (sensor.formula == SensorData::FORMULA_CELL) if (sensor.formula == SensorData::TELEM_FORMULA_CELL)
_param = (sensor.source) + (sensor.index << 8); _param = (sensor.source) + (sensor.index << 8);
else if (sensor.formula == SensorData::FORMULA_ADD || sensor.formula == SensorData::FORMULA_MULTIPLY || sensor.formula == SensorData::FORMULA_MIN || sensor.formula == SensorData::FORMULA_MAX) else if (sensor.formula == SensorData::TELEM_FORMULA_ADD || sensor.formula == SensorData::TELEM_FORMULA_MULTIPLY || sensor.formula == SensorData::TELEM_FORMULA_MIN || sensor.formula == SensorData::TELEM_FORMULA_MAX)
_param = ((uint8_t)sensor.sources[0]) + ((uint8_t)sensor.sources[1] << 8) + ((uint8_t)sensor.sources[2] << 16) + ((uint8_t)sensor.sources[3] << 24); _param = ((uint8_t)sensor.sources[0]) + ((uint8_t)sensor.sources[1] << 8) + ((uint8_t)sensor.sources[2] << 16) + ((uint8_t)sensor.sources[3] << 24);
else if (sensor.formula == SensorData::FORMULA_DIST) else if (sensor.formula == SensorData::TELEM_FORMULA_DIST)
_param = (sensor.gps) + (sensor.alt << 8); _param = (sensor.gps) + (sensor.alt << 8);
else if (sensor.formula == SensorData::FORMULA_CONSUMPTION) else if (sensor.formula == SensorData::TELEM_FORMULA_CONSUMPTION)
_param = (sensor.amps); _param = (sensor.amps);
} }
} }
virtual void afterImport() virtual void afterImport()
{ {
if (sensor.type == SensorData::TYPE_CUSTOM) { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) {
sensor.id = _id; sensor.id = _id;
sensor.instance = _instance; sensor.instance = _instance;
sensor.ratio = _param & 0xFF; sensor.ratio = _param & 0xFF;
@ -2736,14 +2736,14 @@ class SensorField: public TransformedField {
else { else {
sensor.persistentValue = _id; sensor.persistentValue = _id;
sensor.formula = _instance; sensor.formula = _instance;
if (sensor.formula == SensorData::FORMULA_CELL) if (sensor.formula == SensorData::TELEM_FORMULA_CELL)
(sensor.source = _sources[0], sensor.index = _sources[1]); (sensor.source = _sources[0], sensor.index = _sources[1]);
else if (sensor.formula == SensorData::FORMULA_ADD || sensor.formula == SensorData::FORMULA_MULTIPLY || sensor.formula == SensorData::FORMULA_MIN || sensor.formula == SensorData::FORMULA_MAX) else if (sensor.formula == SensorData::TELEM_FORMULA_ADD || sensor.formula == SensorData::TELEM_FORMULA_MULTIPLY || sensor.formula == SensorData::TELEM_FORMULA_MIN || sensor.formula == SensorData::TELEM_FORMULA_MAX)
for (int i=0; i<4; ++i) for (int i=0; i<4; ++i)
sensor.sources[i] = _sources[i]; sensor.sources[i] = _sources[i];
else if (sensor.formula == SensorData::FORMULA_DIST) else if (sensor.formula == SensorData::TELEM_FORMULA_DIST)
(sensor.gps = _sources[0], sensor.alt = _sources[1]); (sensor.gps = _sources[0], sensor.alt = _sources[1]);
else if (sensor.formula == SensorData::FORMULA_CONSUMPTION) else if (sensor.formula == SensorData::TELEM_FORMULA_CONSUMPTION)
sensor.amps = _sources[0]; sensor.amps = _sources[0];
} }
} }

View file

@ -494,11 +494,11 @@ TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor,
ui->altSensor->setField(sensor.alt); ui->altSensor->setField(sensor.alt);
ui->ampsSensor->setField(sensor.amps); ui->ampsSensor->setField(sensor.amps);
ui->cellsSensor->setField(sensor.source); ui->cellsSensor->setField(sensor.source);
ui->cellsIndex->addItem(tr("Lowest"), 0); ui->cellsIndex->addItem(tr("Lowest"), SensorData::TELEM_CELL_INDEX_LOWEST);
for (int i=1; i<=6; ++i) for (int i=1; i<=6; i++)
ui->cellsIndex->addItem(tr("Cell %1").arg(i), i); ui->cellsIndex->addItem(tr("Cell %1").arg(i), i);
ui->cellsIndex->addItem(tr("Highest"), 0); ui->cellsIndex->addItem(tr("Highest"), SensorData::TELEM_CELL_INDEX_HIGHEST);
ui->cellsIndex->addItem(tr("Delta"), 0); ui->cellsIndex->addItem(tr("Delta"), SensorData::TELEM_CELL_INDEX_DELTA);
ui->cellsIndex->setField(sensor.index); ui->cellsIndex->setField(sensor.index);
ui->source1->setField(sensor.sources[0]); ui->source1->setField(sensor.sources[0]);
ui->source2->setField(sensor.sources[1]); ui->source2->setField(sensor.sources[1]);
@ -514,7 +514,7 @@ TelemetrySensorPanel::~TelemetrySensorPanel()
void TelemetrySensorPanel::update() void TelemetrySensorPanel::update()
{ {
bool precDisplayed = false; bool isConfigurable = false;
bool gpsFieldsDisplayed = false; bool gpsFieldsDisplayed = false;
bool cellsFieldsDisplayed = false; bool cellsFieldsDisplayed = false;
bool consFieldsDisplayed = false; bool consFieldsDisplayed = false;
@ -528,7 +528,7 @@ void TelemetrySensorPanel::update()
ui->unit->setCurrentIndex(sensor.unit); ui->unit->setCurrentIndex(sensor.unit);
ui->prec->setValue(sensor.prec); ui->prec->setValue(sensor.prec);
if (sensor.type == SensorData::TYPE_CALCULATED) { if (sensor.type == SensorData::TELEM_TYPE_CALCULATED) {
sensor.updateUnit(); sensor.updateUnit();
ui->idLabel->hide(); ui->idLabel->hide();
ui->id->hide(); ui->id->hide();
@ -536,12 +536,12 @@ void TelemetrySensorPanel::update()
ui->instance->hide(); ui->instance->hide();
ui->formula->show(); ui->formula->show();
ui->formula->setCurrentIndex(sensor.formula); ui->formula->setCurrentIndex(sensor.formula);
precDisplayed = (sensor.formula < SensorData::FORMULA_CELL); isConfigurable = (sensor.formula < SensorData::TELEM_FORMULA_CELL);
gpsFieldsDisplayed = (sensor.formula == SensorData::FORMULA_DIST); gpsFieldsDisplayed = (sensor.formula == SensorData::TELEM_FORMULA_DIST);
cellsFieldsDisplayed = (sensor.formula == SensorData::FORMULA_CELL); cellsFieldsDisplayed = (sensor.formula == SensorData::TELEM_FORMULA_CELL);
consFieldsDisplayed = (sensor.formula == SensorData::FORMULA_CONSUMPTION); consFieldsDisplayed = (sensor.formula == SensorData::TELEM_FORMULA_CONSUMPTION);
sources12FieldsDisplayed = (sensor.formula <= SensorData::FORMULA_MULTIPLY); sources12FieldsDisplayed = (sensor.formula <= SensorData::TELEM_FORMULA_MULTIPLY);
sources34FieldsDisplayed = (sensor.formula < SensorData::FORMULA_MULTIPLY); sources34FieldsDisplayed = (sensor.formula < SensorData::TELEM_FORMULA_MULTIPLY);
updateSourcesComboBox(ui->source1, true); updateSourcesComboBox(ui->source1, true);
updateSourcesComboBox(ui->source2, true); updateSourcesComboBox(ui->source2, true);
updateSourcesComboBox(ui->source3, true); updateSourcesComboBox(ui->source3, true);
@ -557,8 +557,8 @@ void TelemetrySensorPanel::update()
ui->instanceLabel->show(); ui->instanceLabel->show();
ui->instance->show(); ui->instance->show();
ui->formula->hide(); ui->formula->hide();
ratioFieldsDisplayed = (sensor.unit != SensorData::UNIT_GPS && sensor.unit != SensorData::UNIT_DATETIME); isConfigurable = sensor.unit < SensorData::UNIT_FIRST_VIRTUAL;
precDisplayed = (sensor.unit != SensorData::UNIT_GPS && sensor.unit != SensorData::UNIT_DATETIME); ratioFieldsDisplayed = (sensor.unit < SensorData::UNIT_FIRST_VIRTUAL);
ui->offset->setMaximum((sensor.prec > 0 ? sensor.prec == 2 ? 30000 : 3000 : 300)); ui->offset->setMaximum((sensor.prec > 0 ? sensor.prec == 2 ? 30000 : 3000 : 300));
ui->offset->setMinimum((sensor.prec > 0 ? sensor.prec == 2 ? -30000 : -3000 : -300)); ui->offset->setMinimum((sensor.prec > 0 ? sensor.prec == 2 ? -30000 : -3000 : -300));
@ -581,9 +581,9 @@ void TelemetrySensorPanel::update()
ui->offsetLabel->setVisible(ratioFieldsDisplayed && sensor.unit != SensorData::UNIT_RPMS); ui->offsetLabel->setVisible(ratioFieldsDisplayed && sensor.unit != SensorData::UNIT_RPMS);
ui->multiplierLabel->setVisible(sensor.unit == SensorData::UNIT_RPMS); ui->multiplierLabel->setVisible(sensor.unit == SensorData::UNIT_RPMS);
ui->offset->setVisible(ratioFieldsDisplayed); ui->offset->setVisible(ratioFieldsDisplayed);
ui->precLabel->setVisible(precDisplayed); ui->precLabel->setVisible(isConfigurable);
ui->prec->setVisible(precDisplayed); ui->prec->setVisible(isConfigurable && sensor.unit != SensorData::UNIT_FAHRENHEIT);
ui->unit->setVisible(precDisplayed); ui->unit->setVisible((sensor.type == SensorData::TELEM_TYPE_CALCULATED && (sensor.formula == SensorData::TELEM_FORMULA_DIST)) || isConfigurable);
ui->gpsSensorLabel->setVisible(gpsFieldsDisplayed); ui->gpsSensorLabel->setVisible(gpsFieldsDisplayed);
ui->gpsSensor->setVisible(gpsFieldsDisplayed); ui->gpsSensor->setVisible(gpsFieldsDisplayed);
ui->altSensorLabel->setVisible(gpsFieldsDisplayed); ui->altSensorLabel->setVisible(gpsFieldsDisplayed);
@ -597,6 +597,9 @@ void TelemetrySensorPanel::update()
ui->source2->setVisible(sources12FieldsDisplayed); ui->source2->setVisible(sources12FieldsDisplayed);
ui->source3->setVisible(sources34FieldsDisplayed); ui->source3->setVisible(sources34FieldsDisplayed);
ui->source4->setVisible(sources34FieldsDisplayed); ui->source4->setVisible(sources34FieldsDisplayed);
ui->autoOffset->setVisible(sensor.unit != SensorData::UNIT_RPMS && isConfigurable);
ui->filter->setVisible(isConfigurable);
ui->persistent->setVisible((sensor.type == SensorData::TELEM_TYPE_CALCULATED && sensor.formula == SensorData::TELEM_FORMULA_CONSUMPTION) || isConfigurable);
lock = false; lock = false;
} }

View file

@ -13,7 +13,7 @@
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </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,0,1,0,0,1,0,0,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,0">
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>0</number>
</property> </property>
@ -48,7 +48,7 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Formula</string> <string>Calculated</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -147,6 +147,11 @@
<string>Multiply</string> <string>Multiply</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>Totalize</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>Cell</string> <string>Cell</string>
@ -406,7 +411,7 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Feet (f)</string> <string>Feet (ft)</string>
</property> </property>
</item> </item>
<item> <item>
@ -602,16 +607,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="AutoCheckBox" name="logs">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Logs</string>
</property>
</widget>
</item>
<item> <item>
<widget class="AutoCheckBox" name="persistent"> <widget class="AutoCheckBox" name="persistent">
<property name="layoutDirection"> <property name="layoutDirection">
@ -622,6 +617,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="AutoCheckBox" name="logs">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Logs</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View file

@ -202,7 +202,7 @@ bool isSensorAvailable(int sensor)
#define SENSOR_2ND_COLUMN (12*FW) #define SENSOR_2ND_COLUMN (12*FW)
#define SENSOR_3RD_COLUMN (18*FW) #define SENSOR_3RD_COLUMN (18*FW)
#define SENSOR_UNIT_ROWS ((sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_DIST)) || sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) #define SENSOR_UNIT_ROWS ((sensor->type == TELEM_TYPE_CALCULATED && (sensor->formula == TELEM_FORMULA_DIST)) || sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
#define SENSOR_PREC_ROWS (sensor->isConfigurable() && sensor->unit != UNIT_FAHRENHEIT ? (uint8_t)0 : HIDDEN_ROW) #define SENSOR_PREC_ROWS (sensor->isConfigurable() && sensor->unit != UNIT_FAHRENHEIT ? (uint8_t)0 : HIDDEN_ROW)
#define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0) #define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0)
#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_CONSUMPTION || sensor->formula==TELEM_FORMULA_TOTALIZE)) ? HIDDEN_ROW : (uint8_t)0) #define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_CONSUMPTION || sensor->formula==TELEM_FORMULA_TOTALIZE)) ? HIDDEN_ROW : (uint8_t)0)