diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index acec95d46..e6b12ca5e 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -177,6 +177,8 @@ void ModelData::clear() for (unsigned i = 0; i < CPN_MAX_SENSORS; i++) sensorData[i].clear(); + trainerMode = TRAINER_MODE_MASTER_JACK; + const char * layoutId = "Layout2P1"; // currently all using same default though might change for NV14 RadioLayout::init(layoutId, customScreens); } @@ -1576,6 +1578,8 @@ QString ModelData::trainerModeToString() const QString ModelData::trainerModeToString(int value) { switch (value) { + case TRAINER_MODE_OFF: + return tr("OFF"); case TRAINER_MODE_MASTER_JACK: return tr("Master/Jack"); case TRAINER_MODE_SLAVE_JACK: @@ -1600,13 +1604,15 @@ QString ModelData::trainerModeToString(int value) // static bool ModelData::isTrainerModeAvailable(const GeneralSettings & generalSettings, const Firmware * firmware, const int value) { - if (value < 0 || value >= TRAINER_MODE_COUNT) + if (value < TRAINER_MODE_FIRST || value > TRAINER_MODE_LAST) return false; bool ret = true; const Board::Type board = firmware->getBoard(); - if (!IS_TARANIS(board) || IS_ACCESS_RADIO(board, Firmware::getCurrentVariant()->getId())) { + if (!IS_FLYSKY_NV14(board) && value == TRAINER_MODE_OFF) + ret = false; + else if (!IS_TARANIS(board) || IS_ACCESS_RADIO(board, Firmware::getCurrentVariant()->getId())) { if (value >= TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE && value <= TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) ret = false; } @@ -1628,7 +1634,7 @@ AbstractStaticItemModel * ModelData::trainerModeItemModel(const GeneralSettings AbstractStaticItemModel * mdl = new AbstractStaticItemModel(); mdl->setName(AIM_MODELDATA_TRAINERMODE); - for (int i = 0; i < TRAINER_MODE_COUNT; i++) { + for (int i = TRAINER_MODE_FIRST; i <= TRAINER_MODE_LAST; i++) { mdl->appendToItemList(trainerModeToString(i), i, isTrainerModeAvailable(generalSettings, firmware, i)); } diff --git a/companion/src/firmwares/modeldata.h b/companion/src/firmwares/modeldata.h index ceb7ed134..fbdd8f9c7 100644 --- a/companion/src/firmwares/modeldata.h +++ b/companion/src/firmwares/modeldata.h @@ -72,6 +72,8 @@ class ScriptData { }; enum TrainerMode { + TRAINER_MODE_OFF, + TRAINER_MODE_FIRST = TRAINER_MODE_OFF, TRAINER_MODE_MASTER_JACK, TRAINER_MODE_SLAVE_JACK, TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, @@ -80,7 +82,7 @@ enum TrainerMode { TRAINER_MODE_MASTER_BLUETOOTH, TRAINER_MODE_SLAVE_BLUETOOTH, TRAINER_MODE_MULTI, - TRAINER_MODE_COUNT + TRAINER_MODE_LAST = TRAINER_MODE_MULTI }; #define INPUT_NAME_LEN 4 diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index e3cf1ec4c..df8b9263a 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2854,6 +2854,10 @@ void OpenTxModelData::beforeExport() } // TODO remove when enum not radio specific requires eeprom change and conversion + // Note: this must mirror reverse afterImport + if (!IS_FLYSKY_NV14(board)) + modelData.trainerMode -= 1; + if (modelData.trainerMode > TRAINER_MODE_SLAVE_JACK) { if (!IS_TARANIS(board)) { modelData.trainerMode -= 2; @@ -2890,6 +2894,10 @@ void OpenTxModelData::afterImport() } // TODO remove when enum not radio specific requires eeprom change and conversion + // Note: this must mirror reverse beforeExport + if (!IS_FLYSKY_NV14(board)) + modelData.trainerMode += 1; + if (modelData.trainerMode > TRAINER_MODE_SLAVE_JACK) { if (!IS_TARANIS(board)) { modelData.trainerMode += 2; diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 4bd710626..9b4222d50 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -225,7 +225,10 @@ ModulePanel::ModulePanel(QWidget * parent, ModelData & model, ModuleData & modul if (panelFilteredItemModels) ui->trainerMode->setModel(panelFilteredItemModels->getItemModel(FIM_TRAINERMODE)); ui->trainerMode->setField(model.trainerMode); - connect(ui->trainerMode, SIGNAL(currentDataChanged(int)), this, SLOT(update())); + connect(ui->trainerMode, &AutoComboBox::currentDataChanged, this, [=] () { + update(); + emit modified(); + }); } } else {