diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 1e9b7958a10..758cd92bc8f 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -87,12 +87,6 @@ void GeneralSettings::clear() void GeneralSettings::init() { - for (int i = 0; i < CPN_MAX_ANALOGS; ++i) { - calibMid[i] = 0x200; - calibSpanNeg[i] = 0x180; - calibSpanPos[i] = 0x180; - } - Firmware * firmware = Firmware::getCurrentVariant(); Board::Type board = firmware->getBoard(); @@ -125,6 +119,18 @@ void GeneralSettings::init() setDefaultControlTypes(board); + for (int i = 0; i < CPN_MAX_ANALOGS; ++i) { + if ((i >= CPN_MAX_STICKS) && (i < CPN_MAX_STICKS + CPN_MAX_POTS) && (potConfig[i-CPN_MAX_STICKS] == Board::POT_MULTIPOS_SWITCH)) { + calibMid[i] = 773;; + calibSpanNeg[i] = 5388; + calibSpanPos[i] = 9758; + } else { + calibMid[i] = 0x200; + calibSpanNeg[i] = 0x180; + calibSpanPos[i] = 0x180; + } + } + backlightMode = 3; // keys and sticks backlightDelay = 2; // 2 * 5 = 10 secs inactivityTimer = 10; @@ -675,6 +681,21 @@ AbstractStaticItemModel * GeneralSettings::uartSampleModeItemModel() return mdl; } +bool GeneralSettings::fix6POSCalibration() +{ + bool changed = false; + // Fix default 6POS calibration + for (int i = CPN_MAX_STICKS; i < CPN_MAX_STICKS+CPN_MAX_POTS; i += 1) { + if ((potConfig[i-CPN_MAX_STICKS] == Board::POT_MULTIPOS_SWITCH) && (calibMid[i] == 0x200) && (calibSpanNeg[i] == 0x180) && (calibSpanPos[i] == 0x180)) { + calibMid[i] = 773;; + calibSpanNeg[i] = 5388; + calibSpanPos[i] = 9758; + changed = true; + } + } + return changed; +} + /* TrainerMix */ diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index 0709a67ca87..eb860470eb9 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -180,6 +180,7 @@ class GeneralSettings { int getDefaultStick(unsigned int channel) const; RawSource getDefaultSource(unsigned int channel) const; int getDefaultChannel(unsigned int stick) const; + bool fix6POSCalibration(); char semver[8 + 1]; unsigned int version; diff --git a/companion/src/mdichild.cpp b/companion/src/mdichild.cpp index 94cdc346e75..f1107c948ad 100644 --- a/companion/src/mdichild.cpp +++ b/companion/src/mdichild.cpp @@ -1277,6 +1277,9 @@ bool MdiChild::loadFile(const QString & filename, bool resetCurrentFile) setCurrentFile(filename); } + if (radioData.generalSettings.fix6POSCalibration()) + setModified(); + // set after successful import if (getStorageType(filename) == STORAGE_TYPE_YML) setModified(); @@ -1657,6 +1660,9 @@ void MdiChild::openModelTemplate(int row) QMessageBox::warning(this, CPN_STR_TTL_WARNING, warning); } + if (radioData.generalSettings.fix6POSCalibration()) + setModified(); + radioData.models[row] = data.models[0]; // reset module bindings