diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 77b1ba264..17ed1d087 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -730,32 +730,36 @@ void concatGvarParam(int & gvar, const int _gvar, const unsigned int _gvarParam, } } -void exportGvarParam(const int gvar, int & _gvar) +void exportGvarParam(const int gvar, int & _gvar, int version) { + int GV1 = (version >= 216 ? 4096 : 512); + if (gvar < -10000) { - _gvar = 512 + gvar + 10000; + _gvar = GV1 + gvar + 10000; } else if (gvar > 10000) { - _gvar = 512 + gvar - 10001; + _gvar = GV1 + gvar - 10001; } else { _gvar = gvar; } } -void importGvarParam(int & gvar, const int _gvar) +void importGvarParam(int & gvar, const int _gvar, int version) { - if (_gvar >= 512) { - gvar = 10001 + _gvar - 512; + int GV1 = (version >= 216 ? 4096 : 512); + + if (_gvar >= GV1) { + gvar = 10001 + _gvar - GV1; } - else if (_gvar >= 512-5) { - gvar = -10000 + _gvar - 512; + else if (_gvar >= GV1-9) { + gvar = -10000 + _gvar - GV1; } - else if (_gvar < -512) { - gvar = -10000 + _gvar + 513; + else if (_gvar < -GV1) { + gvar = -10000 + _gvar + GV1 + 1; } - else if (_gvar < -512+5) { - gvar = 10000 + _gvar + 513; + else if (_gvar < -GV1+9) { + gvar = 10000 + _gvar + GV1 + 1; } else { gvar = _gvar; @@ -898,9 +902,9 @@ class MixField: public TransformedField { } if (IS_ARM(board)) { - exportGvarParam(mix.weight, _weight); + exportGvarParam(mix.weight, _weight, version); if (version >= 214) - exportGvarParam(mix.sOffset, _offset); + exportGvarParam(mix.sOffset, _offset, version); else splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version); } @@ -933,9 +937,9 @@ class MixField: public TransformedField { } if (IS_ARM(board)) { - importGvarParam(mix.weight, _weight); + importGvarParam(mix.weight, _weight, version); if (version >= 214) - importGvarParam(mix.sOffset, _offset); + importGvarParam(mix.sOffset, _offset, version); else concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version); } diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index 5a59a21b7..16548550d 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -384,6 +384,16 @@ int ConvertSwitch_215_to_216(int swtch) } #endif +int16_t ConvertGVAR_215_to_216(int16_t var) +{ + if (var <= -508) + return var + 512 - 4096; + else if (var >= 507) + return var - 512 + 4096; + else + return var; +} + void ConvertModel_215_to_216(ModelData &model) { // Virtual inputs added instead of Expo/DR @@ -440,7 +450,7 @@ void ConvertModel_215_to_216(ModelData &model) mix.destCh = oldModel.mixData[i].destCh; mix.phases = oldModel.mixData[i].phases; mix.mltpx = oldModel.mixData[i].mltpx; - mix.weight = oldModel.mixData[i].weight; + mix.weight = ConvertGVAR_215_to_216(oldModel.mixData[i].weight); mix.swtch = ConvertSwitch_215_to_216(oldModel.mixData[i].swtch); if (oldModel.mixData[i].curveMode==0/*differential*/) { mix.curve.type = CURVE_REF_DIFF; @@ -462,17 +472,14 @@ void ConvertModel_215_to_216(ModelData &model) mix.srcRaw = oldModel.mixData[i].srcRaw; if (mix.srcRaw > 4 || oldModel.mixData[i].noExpo) mix.srcRaw = ConvertSource_215_to_216(mix.srcRaw); - mix.offset = oldModel.mixData[i].offset; + mix.offset = ConvertGVAR_215_to_216(oldModel.mixData[i].offset); memcpy(mix.name, oldModel.mixData[i].name, LEN_EXPOMIX_NAME); #else memcpy(&mix, &oldModel.mixData[i], sizeof(mix)); #endif - if (mix.weight <= -508) - mix.weight = mix.weight + 512 - 4096; - else if (mix.weight >= 507) - mix.weight = mix.weight - 512 + 4096; - else + if (!GV_IS_GV_VALUE(mix.weight, 500, 500) && !GV_IS_GV_VALUE(mix.offset, 500, 500)) { mix.offset = ((mix.offset * mix.weight) + 50) / 100; + } } for (uint8_t i=0; i<32; i++) { g_model.limitData[i].min = 10 * oldModel.limitData[i].min;