From de43d7e77cfb7b640650dd90eb35fef5f16e047b Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 8 Mar 2022 17:36:50 +0100 Subject: [PATCH] Try to fix the trainer mode mess --- radio/src/dataconstants.h | 33 ++------------ radio/src/gui/gui_common.cpp | 43 ++++++++----------- .../yaml/yaml_datastructs_funcs.cpp | 5 +-- .../storage/yaml/yaml_datastructs_funcs.cpp | 29 ++++++++++--- radio/src/targets/horus/hal.h | 4 -- radio/src/trainer.cpp | 28 ++++++------ 6 files changed, 60 insertions(+), 82 deletions(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index b4ba4c2c6..04f3410f6 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -177,7 +177,6 @@ enum BeeperMode { e_mode_all }; -#if defined(PCBFRSKY) || defined(PCBNV14) enum ModuleIndex { INTERNAL_MODULE, EXTERNAL_MODULE, @@ -185,23 +184,19 @@ enum ModuleIndex { }; enum TrainerMode { -#if defined(PCBNV14) TRAINER_MODE_OFF, -#endif TRAINER_MODE_MASTER_TRAINER_JACK, TRAINER_MODE_SLAVE, -#if defined(PCBTARANIS) || defined(PCBNV14) TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, -#endif -#if defined(PCBTARANIS) || defined(AUX_SERIAL) || defined(AUX2_SERIAL) - TRAINER_MODE_MASTER_BATTERY_COMPARTMENT, -#endif + TRAINER_MODE_MASTER_SERIAL, TRAINER_MODE_MASTER_BLUETOOTH, TRAINER_MODE_SLAVE_BLUETOOTH, TRAINER_MODE_MULTI, }; -#endif + +#define TRAINER_MODE_MIN() TRAINER_MODE_OFF +#define TRAINER_MODE_MAX() TRAINER_MODE_MULTI enum SerialPort { SP_AUX1=0, @@ -216,26 +211,6 @@ enum SerialPort { // GPS #define PILOTPOS_MIN_HDOP 500 -#define TRAINER_MODE_MIN() TRAINER_MODE_MASTER_TRAINER_JACK - -#if !defined(HARDWARE_EXTERNAL_MODULE) - #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE -#elif defined(RADIO_T16) && !defined(INTERNAL_MODULE_MULTI) -#if defined(BLUETOOTH) - #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH -#else - #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE -#endif -#elif defined(INTERNAL_MODULE_MULTI) || defined(ALLOW_TRAINER_MULTI) - #define TRAINER_MODE_MAX() TRAINER_MODE_MULTI -#elif defined(BLUETOOTH) - #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH -#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBNV14) - #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE -#else - #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_BATTERY_COMPARTMENT -#endif - #if defined(HARDWARE_INTERNAL_MODULE) #define IS_INTERNAL_MODULE_ENABLED() (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) #else diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index b8491a5b7..19b4b7ca2 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -781,50 +781,45 @@ bool isTelemetryProtocolAvailable(int protocol) bool isTrainerModeAvailable(int mode) { -#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) - if (g_eeGeneral.bluetoothMode && mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) { + if (g_eeGeneral.bluetoothMode && + mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) { // bluetooth uses the same USART than SBUS return false; } #endif -#if defined(PCBTARANIS) || defined(AUX_SERIAL) || defined(AUX2_SERIAL) - if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) { -#if defined(TRAINER_BATTERY_COMPARTMENT) + if (mode == TRAINER_MODE_MASTER_SERIAL) return hasSerialMode(UART_MODE_SBUS_TRAINER) >= 0; -#else - return false; -#endif - } -#endif + if ((mode == TRAINER_MODE_MASTER_BLUETOOTH || + mode == TRAINER_MODE_SLAVE_BLUETOOTH) #if defined(BLUETOOTH) && !defined(PCBX9E) - if (g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH)) - return false; -#else - if (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH) - return false; + && g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER #endif + ) + return false; #if defined(PCBXLITE) && !defined(PCBXLITES) if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE) return false; #endif -#if defined(PCBTARANIS) || defined(PCBNV14) - #if !defined(TRAINER_MODULE_CPPM) +#if !defined(TRAINER_MODULE_CPPM) if (mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) return false; - #endif - #if !defined(TRAINER_MODULE_SBUS) +#endif + +#if !defined(TRAINER_MODULE_SBUS) if (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) return false; - #endif +#endif + +#if defined(TRAINER_MODULE_CPPM) || defined(TRAINER_MODULE_SBUS) + if (IS_EXTERNAL_MODULE_ENABLED() && + (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || + mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)) + return false; #endif return true; diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index 3cc48a546..3a2641845 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -711,7 +711,6 @@ bool w_vPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opa return wf(opaque, s, strlen(s)); } -extern const struct YamlIdStr enum_TrainerMode[]; const struct YamlIdStr enum_TrainerMode[] = { #if defined(PCBNV14) { TRAINER_MODE_OFF, "OFF" }, @@ -733,8 +732,8 @@ const struct YamlIdStr enum_TrainerMode[] = { #define r_trainerMode nullptr -bool w_trainerMode(const YamlNode* node, uint32_t val, - yaml_writer_func wf, void* opaque) +static bool w_trainerMode(const YamlNode* node, uint32_t val, + yaml_writer_func wf, void* opaque) { const char* str = nullptr; str = yaml_output_enum(val, enum_TrainerMode); diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 4eeb28b16..939d682d1 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -58,10 +58,6 @@ namespace yaml_conv_220 { bool w_spPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque); bool w_vPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque); - extern const struct YamlIdStr enum_TrainerMode[]; - bool w_trainerMode(const YamlNode* node, uint32_t val, - yaml_writer_func wf, void* opaque); - extern const char* _tele_screen_type_lookup[]; bool w_tele_screen_type(void* user, uint8_t* data, uint32_t bitoffs, yaml_writer_func wf, void* opaque); @@ -1030,15 +1026,36 @@ static bool w_vPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, vo return yaml_conv_220::w_vPitch(node, val, wf, opaque); } +static const struct YamlIdStr enum_TrainerMode[] = { + { TRAINER_MODE_OFF, "OFF" }, + { TRAINER_MODE_MASTER_TRAINER_JACK, "MASTER_TRAINER_JACK" }, + { TRAINER_MODE_SLAVE, "SLAVE" }, + { TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, "MASTER_SBUS_EXT" }, + { TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, "MASTER_CPPM_EXT" }, + { TRAINER_MODE_MASTER_SERIAL, "MASTER_SERIAL" }, + { TRAINER_MODE_MASTER_SERIAL, "MASTER_BATT_COMP" }, + { TRAINER_MODE_MASTER_BLUETOOTH, "MASTER_BT" }, + { TRAINER_MODE_SLAVE_BLUETOOTH, "SLAVE_BT" }, + { TRAINER_MODE_MULTI, "MASTER_MULTI" }, + { 0, NULL } +}; + static uint32_t r_trainerMode(const YamlNode* node, const char* val, uint8_t val_len) { - return yaml_parse_enum(yaml_conv_220::enum_TrainerMode, val, val_len); + return yaml_parse_enum(enum_TrainerMode, val, val_len); } static bool w_trainerMode(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque) { - return yaml_conv_220::w_trainerMode(node, val, wf, opaque); + const char* str = nullptr; + str = yaml_output_enum(val, enum_TrainerMode); + + if (str) { + return wf(opaque, str, strlen(str)); + } + + return true; } #if !defined(COLORLCD) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index d5eb4a470..042640fcf 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -433,7 +433,6 @@ #if defined(RADIO_TX16S) #define AUX_SERIAL_PWR_GPIO GPIOA #define AUX_SERIAL_PWR_GPIO_PIN GPIO_Pin_15 // PA.15 - #define TRAINER_BATTERY_COMPARTMENT // allows serial port TTL trainer #endif #else #define AUX_SERIAL_RCC_AHB1Periph 0 @@ -481,9 +480,6 @@ #define AUX2_SERIAL_PWR_GPIO GPIOB #define AUX2_SERIAL_PWR_GPIO_PIN GPIO_Pin_0 // PB.00 #endif -#if defined(RADIO_TX16S) - #define TRAINER_BATTERY_COMPARTMENT // allows serial port TTL trainer -#endif #else // AUX2_SERIAL #define AUX2_SERIAL_RCC_AHB1Periph 0 #define AUX2_SERIAL_RCC_APB1Periph 0 diff --git a/radio/src/trainer.cpp b/radio/src/trainer.cpp index 73cd2504d..be7e568b0 100644 --- a/radio/src/trainer.cpp +++ b/radio/src/trainer.cpp @@ -61,6 +61,10 @@ void stopTrainer() stop_trainer_ppm(); break; + case TRAINER_MODE_MASTER_SERIAL: + sbusSetGetByte(nullptr); + break; + #if defined(TRAINER_MODULE_CPPM) case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: stop_trainer_module_cppm(); @@ -73,12 +77,6 @@ void stopTrainer() stop_trainer_module_sbus(); break; #endif - -#if defined(TRAINER_BATTERY_COMPARTMENT) - case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: - sbusSetGetByte(nullptr); - break; -#endif } currentTrainerMode = 0xFF; @@ -96,10 +94,18 @@ void checkTrainerSettings() currentTrainerMode = requiredTrainerMode; switch (requiredTrainerMode) { + case TRAINER_MODE_MASTER_TRAINER_JACK: + init_trainer_capture(); + break; + case TRAINER_MODE_SLAVE: init_trainer_ppm(); break; + case TRAINER_MODE_MASTER_SERIAL: + sbusSetGetByte(sbusAuxGetByte); + break; + #if defined(TRAINER_MODULE_CPPM) case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: init_trainer_module_cppm(); @@ -112,16 +118,6 @@ void checkTrainerSettings() sbusSetGetByte(trainerModuleSbusGetByte); break; #endif - -#if defined(TRAINER_BATTERY_COMPARTMENT) - case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: - sbusSetGetByte(sbusAuxGetByte); - break; -#endif - - case TRAINER_MODE_MASTER_TRAINER_JACK: - init_trainer_capture(); - break; } #if defined(INTMODULE_HEARTBEAT_GPIO) && !defined(SIMU)