Bsongis/issue 6798 (#6818)

* Avoid conversion of unused sensors
* Allow conversion of R9M sensors
* Conversion fixes in Companion
This commit is contained in:
Bertrand Songis
2019-09-23 15:29:49 +02:00
committed by GitHub
parent d52dfff70c
commit 38931d9cb6
6 changed files with 39 additions and 49 deletions
+19 -10
View File
@@ -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;
+7 -15
View File
@@ -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");
}
+1 -1
View File
@@ -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)); }
};
+8 -12
View File
@@ -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);
}
+3 -10
View File
@@ -13,7 +13,7 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0,0,1,0,0,0,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,0">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0,0,1,0,0,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,0">
<property name="leftMargin">
<number>0</number>
</property>
@@ -121,21 +121,14 @@
</widget>
</item>
<item>
<widget class="QLabel" name="rxLabel">
<widget class="QLabel" name="originLabel">
<property name="text">
<string>Rx</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="moduleLabel">
<property name="text">
<string>Mod.</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="rxOrMod">
<widget class="QLineEdit" name="origin">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -290,7 +290,7 @@ void convertModelData_218_to_219(ModelData &model)
for (uint8_t i=0; i<MAX_TELEMETRY_SENSORS_218; i++) {
newModel.telemetrySensors[i].id = oldModel.telemetrySensors[i].id;
if (oldModel.telemetrySensors[i].type == 0 && (oldModel.moduleData[0].type == MODULE_TYPE_XJT_PXX1 || oldModel.moduleData[1].type == MODULE_TYPE_XJT_PXX1))
if (oldModel.telemetrySensors[i].type == 0 && ZLEN(oldModel.telemetrySensors[i].label) > 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;