diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index e584e226e..2eb7cb27b 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -188,20 +188,26 @@ enum ModuleIndex { SPORT_MODULE, BOOTLOADER_MODULE, }; + enum TrainerMode { +#if defined(PCBNV14) TRAINER_MODE_OFF, +#endif TRAINER_MODE_MASTER_TRAINER_JACK, TRAINER_MODE_SLAVE, +#if defined(PCBTARANIS) TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, +#endif +#if defined(PCBTARANIS) || defined(AUX_SERIAL) TRAINER_MODE_MASTER_BATTERY_COMPARTMENT, +#endif TRAINER_MODE_MASTER_BLUETOOTH, TRAINER_MODE_SLAVE_BLUETOOTH, TRAINER_MODE_MULTI, - TRAINER_MODE_MAX = TRAINER_MODE_MULTI }; #elif defined(PCBSKY9X) - enum ModuleIndex { +enum ModuleIndex { EXTERNAL_MODULE, EXTRA_MODULE, SPORT_MODULE @@ -209,9 +215,9 @@ enum TrainerMode { #endif #if defined(RADIO_FAMILY_T16) || (defined(RADIO_T12) && defined(INTERNAL_MODULE_MULTI)) || defined(ALLOW_TRAINER_MULTI) - #define TRAINER_MODE_MAX() TRAINER_MODE_MULTI +#define TRAINER_MODE_MAX() TRAINER_MODE_MULTI #elif defined(BLUETOOTH) - #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH +#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH #elif defined(PCBX7) || defined(PCBXLITE) #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE #else diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index b784886bd..c5ab4baf2 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -475,16 +475,16 @@ class TrainerModuleWindow : public FormGroup { clear(); new StaticText(this, grid.getLabelSlot(true), STR_MODE); - moduleChoice = new Choice(this, grid.getFieldSlot(), STR_VTRAINERMODES, 0, TRAINER_MODE_MAX, GET_DEFAULT(g_model.trainerData.mode), [=](int32_t newValue) { + trainerChoice = new Choice(this, grid.getFieldSlot(), STR_VTRAINERMODES, 0, TRAINER_MODE_MAX(), GET_DEFAULT(g_model.trainerData.mode), [=](int32_t newValue) { g_model.trainerData.mode = newValue; - update(); SET_DIRTY(); - moduleChoice->setFocus(SET_FOCUS_DEFAULT); + update(); + trainerChoice->setFocus(SET_FOCUS_DEFAULT); }); - moduleChoice->setAvailableHandler(isTrainerModeAvailable); + trainerChoice->setAvailableHandler(isTrainerModeAvailable); grid.nextLine(); - if (g_model.trainerData.mode > TRAINER_MODE_OFF) { + if (g_model.trainerData.mode >= TRAINER_MODE_MASTER_TRAINER_JACK) { new StaticText(this, grid.getLabelSlot(true), STR_CHANNELRANGE); channelStart = new NumberEdit(this, grid.getFieldSlot(2, 0), 1, MAX_OUTPUT_CHANNELS - 8 + g_model.trainerData.channelsCount + 1, @@ -537,7 +537,7 @@ class TrainerModuleWindow : public FormGroup { } protected: - Choice * moduleChoice = nullptr; + Choice * trainerChoice = nullptr; NumberEdit * channelStart = nullptr; NumberEdit * channelEnd = nullptr; }; diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 11165f611..fbc3073b4 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -734,22 +734,24 @@ bool isTelemetryProtocolAvailable(int protocol) bool isTrainerModeAvailable(int mode) { - switch(mode) { -#if defined(HARDWARE_TRAINER_EXTERNAL_MODULE) - case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: - case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: - return !IS_EXTERNAL_MODULE_ENABLED(); +#if defined(PCBTARANIS) + if (IS_EXTERNAL_MODULE_ENABLED() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)) + return false; #endif #if defined(PCBX9E) - case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: - // bluetooth uses the same USART than SBUS - return !g_eeGeneral.bluetoothMode; + if (g_eeGeneral.bluetoothMode && mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) { + // bluetooth uses the same USART than SBUS + return false; + } #endif -#if defined(HARDWARE_TRAINER_AUX_SERIAL) - case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: - return g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER; +#if defined(PCBTARANIS) && !defined(TRAINER_BATTERY_COMPARTMENT) + if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) + return false; +#elif defined(PCBTARANIS) + if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) + return g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER; #endif #if defined(BLUETOOTH) && !defined(PCBX9E) @@ -760,19 +762,12 @@ bool isTrainerModeAvailable(int mode) return false; #endif -#if defined(HARDWARE_TRAINER_MULTI) - case TRAINER_MODE_MULTI: - return true; +#if defined(PCBXLITE) && !defined(PCBXLITES) + if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE) + return false; #endif -#if !defined(TRAINER_DETECT_GPIO) - case TRAINER_MODE_OFF: - return true; -#endif - - default: - return false; - } + return true; } bool modelHasNotes()