From 6f21556b8125ce2d6d7cf4533f4a2c3eb3209c5e Mon Sep 17 00:00:00 2001 From: bsongis Date: Wed, 22 Jul 2015 22:30:37 +0200 Subject: [PATCH 1/4] #2538 - Proposal for a fix. We have many wrong sensors, including openXsensor. The first ID is stored in EEPROM, but not used during the search loop --- radio/src/gui/Taranis/menu_model_telemetry.cpp | 15 +++++++++++---- radio/src/myeeprom.h | 4 ++-- radio/src/telemetry/telemetry.cpp | 6 ++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp index d99741a7a..394876668 100644 --- a/radio/src/gui/Taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp @@ -74,6 +74,7 @@ enum menuModelTelemetryItems { ITEM_TELEMETRY_SENSOR31, ITEM_TELEMETRY_SENSOR32, ITEM_TELEMETRY_NEWSENSOR, + ITEM_TELEMETRY_IGNORE_SENSORID, #if defined(VARIO) ITEM_TELEMETRY_VARIO_LABEL, ITEM_TELEMETRY_VARIO_SOURCE, @@ -120,7 +121,7 @@ enum menuModelTelemetryItems { #define IS_RANGE_DEFINED(k) (g_model.frsky.channels[k].ratio > 0) #define SENSOR_ROWS(x) (isTelemetryFieldAvailable(x) ? (uint8_t)0 : HIDDEN_ROW) -#define SENSORS_ROWS LABEL(Sensors), SENSOR_ROWS(0), SENSOR_ROWS(1), SENSOR_ROWS(2), SENSOR_ROWS(3), SENSOR_ROWS(4), SENSOR_ROWS(5), SENSOR_ROWS(6), SENSOR_ROWS(7), SENSOR_ROWS(8), SENSOR_ROWS(9), SENSOR_ROWS(10), SENSOR_ROWS(11), SENSOR_ROWS(12), SENSOR_ROWS(13), SENSOR_ROWS(14), SENSOR_ROWS(15), SENSOR_ROWS(16), SENSOR_ROWS(17), SENSOR_ROWS(18), SENSOR_ROWS(19), SENSOR_ROWS(20), SENSOR_ROWS(21), SENSOR_ROWS(22), SENSOR_ROWS(23), SENSOR_ROWS(24), SENSOR_ROWS(25), SENSOR_ROWS(26), SENSOR_ROWS(27), SENSOR_ROWS(28), SENSOR_ROWS(29), SENSOR_ROWS(30), SENSOR_ROWS(31), 0, +#define SENSORS_ROWS LABEL(Sensors), SENSOR_ROWS(0), SENSOR_ROWS(1), SENSOR_ROWS(2), SENSOR_ROWS(3), SENSOR_ROWS(4), SENSOR_ROWS(5), SENSOR_ROWS(6), SENSOR_ROWS(7), SENSOR_ROWS(8), SENSOR_ROWS(9), SENSOR_ROWS(10), SENSOR_ROWS(11), SENSOR_ROWS(12), SENSOR_ROWS(13), SENSOR_ROWS(14), SENSOR_ROWS(15), SENSOR_ROWS(16), SENSOR_ROWS(17), SENSOR_ROWS(18), SENSOR_ROWS(19), SENSOR_ROWS(20), SENSOR_ROWS(21), SENSOR_ROWS(22), SENSOR_ROWS(23), SENSOR_ROWS(24), SENSOR_ROWS(25), SENSOR_ROWS(26), SENSOR_ROWS(27), SENSOR_ROWS(28), SENSOR_ROWS(29), SENSOR_ROWS(30), SENSOR_ROWS(31), 0, 0, #if defined(VARIO) #define VARIO_ROWS LABEL(Vario), 0, 1, 2, #else @@ -529,7 +530,7 @@ void menuModelTelemetry(uint8_t event) lcd_putsAtt(TELEM_COL2, y, "---", 0); // TODO shortcut } TelemetrySensor * sensor = & g_model.telemetrySensors[index]; - if (sensor->type == TELEM_TYPE_CUSTOM) { + if (sensor->type == TELEM_TYPE_CUSTOM && !g_model.ignoreSensorIds) { lcd_outdezAtt(TELEM_COL3, y, sensor->instance, LEFT); } if (attr) { @@ -555,8 +556,10 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_SENSORS_LABEL: lcd_putsLeft(y, STR_TELEMETRY_SENSORS); - lcd_putsAtt(TELEM_COL2, y, STR_VALUE, 0); - lcd_putsAtt(TELEM_COL3, y, STR_ID, 0); + if (!g_model.ignoreSensorIds) { + lcd_putsAtt(TELEM_COL2, y, STR_VALUE, 0); + lcd_putsAtt(TELEM_COL3, y, STR_ID, 0); + } break; case ITEM_TELEMETRY_NEWSENSOR: @@ -574,6 +577,10 @@ void menuModelTelemetry(uint8_t event) } break; + case ITEM_TELEMETRY_IGNORE_SENSORID: + ON_OFF_MENU_ITEM(g_model.ignoreSensorIds, TELEM_COL2, y, INDENT "Ignore IDs", attr, event); + break; + case ITEM_TELEMETRY_RSSI_LABEL: lcd_putsLeft(y, PSTR("RSSI")); break; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 99e1c6980..a7a52fcc1 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -1272,7 +1272,7 @@ enum TelemetrySensorFormula PACK(typedef struct { union { - uint16_t id; // data identifier, for FrSky we can reuse existing ones. Source unit is derived from type. + uint16_t id; // data identifier, for FrSky we can reuse existing ones. Source unit is derived from type. uint16_t persistentValue; }; union { @@ -2130,7 +2130,7 @@ PACK(typedef struct { AVR_FIELD(int8_t ppmNCH:4) ARM_FIELD(uint8_t noGlobalFunctions:1) ARM_FIELD(uint8_t displayTrims:2) - ARM_FIELD(uint8_t spare2:1) + ARM_FIELD(uint8_t ignoreSensorIds:1) int8_t trimInc:3; // Trim Increments uint8_t disableThrottleWarning:1; ARM_FIELD(uint8_t displayChecklist:1) diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 93fd18719..51e99f68b 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -179,7 +179,9 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32 newVal = 0; } else if (unit == UNIT_RPMS) { - newVal = (newVal * sensor.custom.offset) / sensor.custom.ratio; + if (sensor.custom.ratio != 0) { + newVal = (newVal * sensor.custom.offset) / sensor.custom.ratio; + } } else { newVal = sensor.getValue(newVal, unit, prec); @@ -486,7 +488,7 @@ void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance for (int index=0; index Date: Sat, 25 Jul 2015 18:11:02 +0200 Subject: [PATCH 2/4] We need to ignore the instance, not the data Id ;) --- radio/src/telemetry/telemetry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 51e99f68b..83077ac43 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -488,7 +488,7 @@ void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance for (int index=0; index Date: Sun, 26 Jul 2015 00:12:30 +0200 Subject: [PATCH 3/4] Companion part --- companion/src/eeprominterface.h | 1 + companion/src/firmwares/opentx/opentxeeprom.cpp | 2 +- companion/src/modeledit/telemetry.cpp | 11 +++++++++++ companion/src/modeledit/telemetry.h | 1 + companion/src/modeledit/telemetry.ui | 9 ++++++++- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index f5d3dff35..6f251d5e5 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -775,6 +775,7 @@ class FrSkyData { bool mAhPersistent; unsigned int storedMah; int fasOffset; + bool ignoreSensorIds; void clear(); }; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index b225c0120..f6d3fca00 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2957,7 +2957,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne if (IS_ARM(board) && version >= 217) { internalField.Append(new BoolField<1>(modelData.noGlobalFunctions)); internalField.Append(new UnsignedField<2>(modelData.trimsDisplay)); - internalField.Append(new SpareBitsField<1>()); + internalField.Append(new BoolField<1>(modelData.frsky.ignoreSensorIds)); } else if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216)) { internalField.Append(new SpareBitsField<4>()); diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index 407cb9796..b836965c3 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -728,6 +728,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin analogs[1] = new TelemetryAnalog(this, model.frsky.channels[1], model, generalSettings, firmware); ui->A2Layout->addWidget(analogs[1]); connect(analogs[1], SIGNAL(modified()), this, SLOT(onAnalogModified())); + ui->ignoreSensorIds->hide(); } if (IS_TARANIS(firmware->getBoard())) { @@ -870,6 +871,10 @@ void TelemetryPanel::setup() ui->variousGB->show(); } + if (IS_ARM(firmware->getBoard())) { + ui->ignoreSensorIds->setChecked(model->frsky.ignoreSensorIds); + } + if (!(firmware->getCapability(HasMahPersistent))) { ui->mahCount_label->hide(); ui->mahCount_SB->hide(); @@ -1036,6 +1041,12 @@ void TelemetryPanel::on_mahCount_SB_editingFinished() emit modified(); } +void TelemetryPanel::on_ignoreSensorIds_toggled(bool checked) +{ + model->frsky.ignoreSensorIds = checked; + emit modified(); +} + void TelemetryPanel::on_mahCount_ChkB_toggled(bool checked) { model->frsky.mAhPersistent = checked; diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h index cf8b4b992..a5867b057 100644 --- a/companion/src/modeledit/telemetry.h +++ b/companion/src/modeledit/telemetry.h @@ -132,6 +132,7 @@ class TelemetryPanel : public ModelPanel void on_fasOffset_DSB_editingFinished(); void on_mahCount_SB_editingFinished(); void on_mahCount_ChkB_toggled(bool checked); + void on_ignoreSensorIds_toggled(bool checked); private: Ui::Telemetry *ui; diff --git a/companion/src/modeledit/telemetry.ui b/companion/src/modeledit/telemetry.ui index 4305d6892..8c0e2bd84 100644 --- a/companion/src/modeledit/telemetry.ui +++ b/companion/src/modeledit/telemetry.ui @@ -896,7 +896,7 @@ 4 - + @@ -909,6 +909,13 @@ + + + + Disable multi sensor handling + + + From dad815f6314d82eff5a1ceda4997e2d58b757ffa Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 27 Jul 2015 07:36:38 +0200 Subject: [PATCH 4/4] [Companion] AutoCheckBox used instead of QCheckBox --- companion/src/modeledit/telemetry.cpp | 13 ++----------- companion/src/modeledit/telemetry.h | 1 - companion/src/modeledit/telemetry.ui | 2 +- companion/src/shared/autocheckbox.h | 2 +- 4 files changed, 4 insertions(+), 14 deletions(-) diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index b836965c3..8c3c2770b 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -728,7 +728,6 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin analogs[1] = new TelemetryAnalog(this, model.frsky.channels[1], model, generalSettings, firmware); ui->A2Layout->addWidget(analogs[1]); connect(analogs[1], SIGNAL(modified()), this, SLOT(onAnalogModified())); - ui->ignoreSensorIds->hide(); } if (IS_TARANIS(firmware->getBoard())) { @@ -796,10 +795,12 @@ void TelemetryPanel::setup() ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2); } ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol); + ui->ignoreSensorIds->setField(model->frsky.ignoreSensorIds); } else { ui->telemetryProtocolLabel->hide(); ui->telemetryProtocol->hide(); + ui->ignoreSensorIds->hide(); } ui->rssiAlarm1SB->setValue(model->frsky.rssiAlarms[0].value); @@ -871,10 +872,6 @@ void TelemetryPanel::setup() ui->variousGB->show(); } - if (IS_ARM(firmware->getBoard())) { - ui->ignoreSensorIds->setChecked(model->frsky.ignoreSensorIds); - } - if (!(firmware->getCapability(HasMahPersistent))) { ui->mahCount_label->hide(); ui->mahCount_SB->hide(); @@ -1041,12 +1038,6 @@ void TelemetryPanel::on_mahCount_SB_editingFinished() emit modified(); } -void TelemetryPanel::on_ignoreSensorIds_toggled(bool checked) -{ - model->frsky.ignoreSensorIds = checked; - emit modified(); -} - void TelemetryPanel::on_mahCount_ChkB_toggled(bool checked) { model->frsky.mAhPersistent = checked; diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h index a5867b057..cf8b4b992 100644 --- a/companion/src/modeledit/telemetry.h +++ b/companion/src/modeledit/telemetry.h @@ -132,7 +132,6 @@ class TelemetryPanel : public ModelPanel void on_fasOffset_DSB_editingFinished(); void on_mahCount_SB_editingFinished(); void on_mahCount_ChkB_toggled(bool checked); - void on_ignoreSensorIds_toggled(bool checked); private: Ui::Telemetry *ui; diff --git a/companion/src/modeledit/telemetry.ui b/companion/src/modeledit/telemetry.ui index 8c0e2bd84..0709dc70d 100644 --- a/companion/src/modeledit/telemetry.ui +++ b/companion/src/modeledit/telemetry.ui @@ -910,7 +910,7 @@ - + Disable multi sensor handling diff --git a/companion/src/shared/autocheckbox.h b/companion/src/shared/autocheckbox.h index 1c0a98b4c..5b38d20ac 100644 --- a/companion/src/shared/autocheckbox.h +++ b/companion/src/shared/autocheckbox.h @@ -29,7 +29,7 @@ class AutoCheckBox: public QCheckBox { lock = true; if (field) { - setChecked((int)*field); + setChecked(*field); } lock = false; }