diff --git a/companion/src/firmwares/moduledata.cpp b/companion/src/firmwares/moduledata.cpp index 001d0d956..d2cc4fd1b 100644 --- a/companion/src/firmwares/moduledata.cpp +++ b/companion/src/firmwares/moduledata.cpp @@ -30,6 +30,20 @@ void ModuleData::convert(RadioDataConversionState & cstate) } } +bool ModuleData::isPxx2Module() const +{ + switch(protocol){ + case PULSES_ACCESS_ISRM: + case PULSES_ACCESS_R9M: + case PULSES_ACCESS_R9M_LITE: + case PULSES_ACCESS_R9M_LITE_PRO: + case PULSES_XJT_LITE_X16: + return true; + default: + return false; + } +} + QString ModuleData::rfProtocolToString() const { switch (protocol) { diff --git a/companion/src/firmwares/moduledata.h b/companion/src/firmwares/moduledata.h index 12b1bde2b..5b3f908a6 100644 --- a/companion/src/firmwares/moduledata.h +++ b/companion/src/firmwares/moduledata.h @@ -175,11 +175,12 @@ class ModuleData { struct Access { unsigned int receivers; - char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME]; + char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME+1]; } access; void clear() { memset(this, 0, sizeof(ModuleData)); } void convert(RadioDataConversionState & cstate); + bool isPxx2Module() const; QString polarityToString() const { return ppm.pulsePol ? tr("Positive") : tr("Negative"); } QString rfProtocolToString() const; QString subTypeToString(int type = -1) const; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 591f67341..b162a8984 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1868,7 +1868,8 @@ class SensorField: public TransformedField { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) { _id = sensor.id; _subid = sensor.subid; - _instance = sensor.instance; + // keep highest 3 bits from instance (rxIdx & moduleIdx are read-only) + _instance = (sensor.instance & 0x1F) | (_instance & 0xE0); _ratio = sensor.ratio; _offset = sensor.offset; } @@ -1891,7 +1892,9 @@ class SensorField: public TransformedField { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) { sensor.id = _id; sensor.subid = _subid; - sensor.instance = _instance; + sensor.instance = _instance & 0x1F; // 5 bits instance + sensor.rxIdx = (_instance >> 5) & 0x03; // 2 bits Rx idx + sensor.moduleIdx = (_instance >> 7) & 0x1; // 1 bit module idx sensor.ratio = _ratio; sensor.offset = _offset; } @@ -2056,7 +2059,7 @@ class ModuleUnionField: public UnionField { internalField.Append(new SpareBitsField<5>(this)); for (int i=0; i(this, module.access.receiverName[i])); + internalField.Append(new CharField<8>(this, receiverName[i])); } bool select(const unsigned int& attr) const { @@ -2076,11 +2079,24 @@ class ModuleUnionField: public UnionField { if (module.protocol == PULSES_ACCESS_ISRM) { module.protocol += module.subType; } + for (int i=0; iid->hide(); ui->instanceLabel->hide(); ui->instance->hide(); + ui->rxLabel->hide(); + ui->moduleLabel->hide(); + ui->rxOrMod->hide(); ui->formula->show(); ui->formula->setCurrentIndex(sensor.formula); isConfigurable = (sensor.formula < SensorData::TELEM_FORMULA_CELL); @@ -676,6 +679,29 @@ void TelemetrySensorPanel::update() ui->id->show(); ui->instanceLabel->show(); ui->instance->show(); + + const ModuleData& module = model->moduleData[sensor.moduleIdx]; + if (module.isPxx2Module()) { + ui->rxLabel->show(); + ui->moduleLabel->hide(); + if (module.access.receivers & (1 << sensor.rxIdx)) { + ui->rxOrMod->setText(module.access.receiverName[sensor.rxIdx]); + } + else { + // receiver does not seem to be active + ui->rxOrMod->clear(); + } + } + else { + ui->rxLabel->hide(); + ui->moduleLabel->show(); + if (sensor.moduleIdx) + ui->rxOrMod->setText(tr("Internal Module")); + else + ui->rxOrMod->setText(tr("External Module")); + } + ui->rxOrMod->show(); + ui->formula->hide(); isConfigurable = sensor.unit < SensorData::UNIT_FIRST_VIRTUAL; ratioFieldsDisplayed = (sensor.unit < SensorData::UNIT_FIRST_VIRTUAL); diff --git a/companion/src/modeledit/telemetry_sensor.ui b/companion/src/modeledit/telemetry_sensor.ui index 9966bc8ee..f6007f6d6 100644 --- a/companion/src/modeledit/telemetry_sensor.ui +++ b/companion/src/modeledit/telemetry_sensor.ui @@ -13,7 +13,7 @@ Form - + 0 @@ -28,6 +28,12 @@ 0 + + + 50 + 16777215 + + 4 @@ -114,6 +120,48 @@ + + + + Rx + + + + + + + Mod. + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + false + + + Qt::RightToLeft + + + 10 + + + true + + +