From 8b29aa1e9b112e865070b802f1c67ee16ddac856 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Tue, 31 Mar 2015 17:49:43 +0400 Subject: [PATCH] Add multiplier to RPM sensor (Fix #1688), fix offset/ratio DSBs --- companion/src/modeledit/telemetry.cpp | 21 ++++++++++++-- companion/src/modeledit/telemetry_sensor.ui | 29 +++++++++++++++---- .../src/gui/Taranis/menu_model_telemetry.cpp | 10 +++++-- radio/src/telemetry/frsky_sport.cpp | 1 + radio/src/telemetry/telemetry.cpp | 2 +- 5 files changed, 51 insertions(+), 12 deletions(-) diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index 9e77effa4..d90196f5e 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -558,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); diff --git a/companion/src/modeledit/telemetry_sensor.ui b/companion/src/modeledit/telemetry_sensor.ui index ce8fafaca..c00836fb7 100644 --- a/companion/src/modeledit/telemetry_sensor.ui +++ b/companion/src/modeledit/telemetry_sensor.ui @@ -13,7 +13,7 @@ Form - + 0 @@ -506,6 +506,13 @@ + + + + Blades + + + @@ -518,7 +525,10 @@ - 1 + 0 + + + 0.000000000000000 3000.000000000000000 @@ -538,6 +548,13 @@ + + + + Multiplier + + + @@ -547,16 +564,16 @@ - 2 + 0 - -12.800000000000001 + -30000.000000000000000 - 12.699999999999999 + 30000.000000000000000 - 0.100000000000000 + 1.000000000000000 diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp index 575404846..07e739183 100644 --- a/radio/src/gui/Taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp @@ -205,10 +205,10 @@ bool isSensorAvailable(int sensor) #define SENSOR_UNIT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) #define SENSOR_PREC_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) #define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_RPMS || 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) #define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW #define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW -#define SENSOR_AUTOOFFSET_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_AUTOOFFSET_ROWS (sensor->unit != UNIT_RPMS && sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) #define SENSOR_FILTER_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) #define SENSOR_PERSISTENT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) @@ -377,6 +377,12 @@ void menuModelSensor(uint8_t event) break; } } + else if (sensor->unit == UNIT_RPMS) { + lcd_putsLeft(y, STR_MULTIPLIER); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.offset, 1, 30000); + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.offset, LEFT|attr); + break; + } else { lcd_putsLeft(y, NO_INDENT(STR_OFFSET)); if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.offset, -30000, +30000); diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 848701106..076d0a4f4 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -259,6 +259,7 @@ void frskySportSetDefault(int index, uint16_t id, uint8_t instance) } if (unit == UNIT_RPMS) { telemetrySensor.custom.ratio = 1; + telemetrySensor.custom.offset = 1; } } else { diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 9b4933333..26f474803 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -172,7 +172,7 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32 newVal = 0; } else if (unit == UNIT_RPMS) { - newVal = newVal / sensor.custom.ratio; + newVal = (newVal * sensor.custom.offset) / sensor.custom.ratio; } else { newVal = sensor.getValue(newVal, unit, prec);