From 38931d9cb61e8d90ab55da683b7f5b983678e814 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 23 Sep 2019 15:29:49 +0200 Subject: [PATCH] Bsongis/issue 6798 (#6818) * Avoid conversion of unused sensors * Allow conversion of R9M sensors * Conversion fixes in Companion --- .../src/firmwares/opentx/opentxeeprom.cpp | 29 ++++++++++++------- companion/src/firmwares/sensordata.cpp | 22 +++++--------- companion/src/firmwares/sensordata.h | 2 +- companion/src/modeledit/telemetry.cpp | 20 +++++-------- companion/src/modeledit/telemetry_sensor.ui | 13 ++------- .../conversions/conversions_218_219.cpp | 2 +- 6 files changed, 39 insertions(+), 49 deletions(-) diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index f13881149..a81457e23 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1935,16 +1935,25 @@ class SensorField: public TransformedField { void afterImport() override { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) { - sensor.id = _id; - sensor.subid = _subid; - if (model.moduleData[0].isPxx1Module() || model.moduleData[1].isPxx1Module()) - sensor.instance = (_instance & 0x1F) + (version <= 218 ? -1 : 0); // 5 bits instance - else - sensor.instance = _instance & 0x1F; - sensor.rxIdx = (_instance >> 5) & 0x03; // 2 bits Rx idx - sensor.moduleIdx = (_instance >> 7) & 0x1; // 1 bit module idx - sensor.ratio = _ratio; - sensor.offset = _offset; + if (strlen(sensor.label) == 0) { + sensor.clear(); + } + else { + sensor.id = _id; + sensor.subid = _subid; + if (model.moduleData[0].isPxx1Module() || model.moduleData[1].isPxx1Module()) { + sensor.instance = (_instance & 0x1F) + (version <= 218 ? -1 : 0); // 5 bits instance + sensor.rxIdx = 0x03; // 2 bits Rx idx + sensor.moduleIdx = 0x01; // 1 bit module idx + } + else { + sensor.instance = _instance & 0x1F; + sensor.rxIdx = (_instance >> 5) & 0x03; // 2 bits Rx idx + sensor.moduleIdx = (_instance >> 7) & 0x1; // 1 bit module idx + } + sensor.ratio = _ratio; + sensor.offset = _offset; + } } else { sensor.persistentValue = _id; diff --git a/companion/src/firmwares/sensordata.cpp b/companion/src/firmwares/sensordata.cpp index a88f3239a..8d677ed50 100644 --- a/companion/src/firmwares/sensordata.cpp +++ b/companion/src/firmwares/sensordata.cpp @@ -92,24 +92,16 @@ QString SensorData::nameToString(int index) const return RadioData::getElementName(tr("TELE"), index + 1, label); } -QString SensorData::getRxOrModName(const ModelData* model) const +QString SensorData::getOrigin(const ModelData * model) const { - if ((type != TELEM_TYPE_CUSTOM) || (!id && !instance)) + if (type != TELEM_TYPE_CUSTOM || !id) return QString(); - const ModuleData& module = model->moduleData[moduleIdx]; - - if (module.isPxx2Module()) { - if (module.access.receivers & (1 << rxIdx)) { - return QString(module.access.receiverName[rxIdx]); - } - - // receiver does not seem to be active + const ModuleData & module = model->moduleData[moduleIdx]; + if (module.isPxx2Module() && rxIdx <= 2 && module.access.receivers & (1 << rxIdx)) { + return QString(module.access.receiverName[rxIdx]); + } + else { return QString(); } - - if (moduleIdx) - return tr("Internal"); - - return tr("External"); } diff --git a/companion/src/firmwares/sensordata.h b/companion/src/firmwares/sensordata.h index 8e95aa7f6..a5cdb4957 100644 --- a/companion/src/firmwares/sensordata.h +++ b/companion/src/firmwares/sensordata.h @@ -148,7 +148,7 @@ class SensorData { void updateUnit(); QString unitString() const; QString nameToString(int index) const; - QString getRxOrModName(const ModelData* model) const; + QString getOrigin(const ModelData* model) const; void clear() { memset(this, 0, sizeof(SensorData)); } }; diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index 39a314fa7..68be10638 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -653,9 +653,8 @@ void TelemetrySensorPanel::update() ui->id->hide(); ui->instanceLabel->hide(); ui->instance->hide(); - ui->rxLabel->hide(); - ui->moduleLabel->hide(); - ui->rxOrMod->hide(); + ui->originLabel->hide(); + ui->origin->hide(); ui->formula->show(); ui->formula->setCurrentIndex(sensor.formula); isConfigurable = (sensor.formula < SensorData::TELEM_FORMULA_CELL); @@ -679,13 +678,10 @@ void TelemetrySensorPanel::update() ui->id->show(); ui->instanceLabel->show(); ui->instance->show(); - - bool is_pxx2 = model->moduleData[sensor.moduleIdx].isPxx2Module(); - ui->rxLabel->setVisible(is_pxx2); - ui->moduleLabel->setVisible(!is_pxx2); - - ui->rxOrMod->setText(sensor.getRxOrModName(model)); - ui->rxOrMod->show(); + QString origin = sensor.getOrigin(model); + ui->originLabel->setVisible(!origin.isEmpty()); + ui->origin->setVisible(!origin.isEmpty()); + ui->origin->setText(origin); ui->formula->hide(); isConfigurable = sensor.unit < SensorData::UNIT_FIRST_VIRTUAL; @@ -755,7 +751,7 @@ void populateTelemetrySourcesComboBox(AutoComboBox * cb, const ModelData * model const SensorData& sensor = model->sensorData[-i-1]; if (sensor.isAvailable()) { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) - cb->addItem(QString("-%1 (%2)").arg(sensor.label, sensor.getRxOrModName(model)), i); + cb->addItem(QString("-%1 (%2)").arg(sensor.label, sensor.getOrigin(model)), i); else cb->addItem(QString("-%1").arg(sensor.label), i); } @@ -766,7 +762,7 @@ void populateTelemetrySourcesComboBox(AutoComboBox * cb, const ModelData * model const SensorData& sensor = model->sensorData[i-1]; if (sensor.isAvailable()) { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) - cb->addItem(QString("%1 (%2)").arg(sensor.label, sensor.getRxOrModName(model)), i); + cb->addItem(QString("%1 (%2)").arg(sensor.label, sensor.getOrigin(model)), i); else cb->addItem(QString("%1").arg(sensor.label), i); } diff --git a/companion/src/modeledit/telemetry_sensor.ui b/companion/src/modeledit/telemetry_sensor.ui index f6007f6d6..7d08243e0 100644 --- a/companion/src/modeledit/telemetry_sensor.ui +++ b/companion/src/modeledit/telemetry_sensor.ui @@ -13,7 +13,7 @@ Form - + 0 @@ -121,21 +121,14 @@ - + Rx - - - Mod. - - - - - + 0 diff --git a/radio/src/storage/conversions/conversions_218_219.cpp b/radio/src/storage/conversions/conversions_218_219.cpp index 0f2c6de9c..f6076917d 100644 --- a/radio/src/storage/conversions/conversions_218_219.cpp +++ b/radio/src/storage/conversions/conversions_218_219.cpp @@ -290,7 +290,7 @@ void convertModelData_218_to_219(ModelData &model) for (uint8_t i=0; i 0 && (isModuleTypePXX1(oldModel.moduleData[0].type) || isModuleTypePXX1(oldModel.moduleData[1].type))) newModel.telemetrySensors[i].instance = 0xE0 + (oldModel.telemetrySensors[i].instance & 0x1F) - 1; else newModel.telemetrySensors[i].instance = oldModel.telemetrySensors[i].instance;