diff --git a/companion/src/firmwares/boardjson.cpp b/companion/src/firmwares/boardjson.cpp index a0327585725..4eedfaf0af8 100644 --- a/companion/src/firmwares/boardjson.cpp +++ b/companion/src/firmwares/boardjson.cpp @@ -238,6 +238,9 @@ const int BoardJson::getCapability(const Board::Capability capability) const case Board::StatusLedColors: return m_hardware.status_led_colors; + case Board::HasTrainerJackCrossover: + return m_hardware.trainer_jack_crossover; + case Board::HasStatusLedPwm: return m_hardware.status_led_pwm; @@ -1342,6 +1345,12 @@ bool BoardJson::loadFile(Board::Type board, QString hwdefn, InputsTable * inputs hardware.cpu_type = o.value("cpu_type").toString().toStdString(); } + if (obj.value("trainer").isObject()) { + const QJsonObject &o = obj.value("trainer").toObject(); + + hardware.trainer_jack_crossover = o.value("trainer_jack_crossover").toBool(); + } + if (obj.value("identity").isObject()) { const QJsonObject &o = obj.value("identity").toObject(); diff --git a/companion/src/firmwares/boardjson.h b/companion/src/firmwares/boardjson.h index 55535c345cc..0677334a7d3 100644 --- a/companion/src/firmwares/boardjson.h +++ b/companion/src/firmwares/boardjson.h @@ -133,6 +133,7 @@ class BoardJson int has_int_module_support = 0; int sport_max_baudrate = 0; int surface = 0; + int trainer_jack_crossover = 0; std::string cpu = ""; std::string cpu_type = ""; }; diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index c5fb0921ae5..3a341f13a94 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -254,6 +254,7 @@ namespace Board { HasRTC, HasSDCard, HasSwitchableJack, + HasTrainerJackCrossover, HasTrainerModuleCPPM, HasTrainerModuleSBUS, HasVBat, diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp index 60e1c7f1e78..23beb578dc4 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp @@ -263,6 +263,7 @@ Node convert::encode(const GeneralSettings& rhs) node["disableTrainerPoweroffAlarm"] = (int)rhs.disableTrainerPoweroffAlarm; node["USBMode"] = rhs.usbMode; node["usbChargeDisabled"] = (int)rhs.usbChargeDisabled; + node["trainerTipOnly"] = rhs.trainerTipOnly; node["hatsMode"] = hatsModeLut << rhs.hatsMode; node["stickDeadZone"] = rhs.stickDeadZone; node["jackMode"] = rhs.jackMode; @@ -558,6 +559,7 @@ bool convert::decode(const Node& node, GeneralSettings& rhs) node["disableTrainerPoweroffAlarm"] >> rhs.disableTrainerPoweroffAlarm; node["USBMode"] >> rhs.usbMode; node["usbChargeDisabled"] >> rhs.usbChargeDisabled; + node["trainerTipOnly"] >> rhs.trainerTipOnly; node["hatsMode"] >> hatsModeLut >> rhs.hatsMode; node["stickDeadZone"] >> rhs.stickDeadZone; node["jackMode"] >> rhs.jackMode; diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index 4c0f34ddb91..dcb2cee69af 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -319,6 +319,7 @@ class GeneralSettings { bool disableTrainerPoweroffAlarm; unsigned int usbMode; bool usbChargeDisabled; + unsigned int trainerTipOnly; unsigned int hatsMode; unsigned int stickDeadZone; unsigned int jackMode; diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index d69f9dc4fc5..ec906689d3b 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -225,6 +225,16 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings addParams(); } + if (Boards::getCapability(board, Board::HasTrainerJackCrossover)) { + addLabel(tr("Trainer lead")); + AutoComboBox *trainerLead = new AutoComboBox(this); + trainerLead->addItem(tr("Crossover"), 0); + trainerLead->addItem(tr("Standard"), 1); + trainerLead->setField(generalSettings.trainerTipOnly, this); + params->append(trainerLead); + addParams(); + } + if (firmware->getCapability(BluetoothEnabled)) { addLabel(tr("Bluetooth")); diff --git a/radio/src/boards/generic_stm32/trainer_ports.cpp b/radio/src/boards/generic_stm32/trainer_ports.cpp index c0373921f4a..07eb10c1060 100644 --- a/radio/src/boards/generic_stm32/trainer_ports.cpp +++ b/radio/src/boards/generic_stm32/trainer_ports.cpp @@ -29,12 +29,13 @@ #include "dataconstants.h" #include "hal.h" +#include "edgetx.h" __WEAK void board_trainer_init() { #if defined(TRAINER_DETECT_GPIO) gpio_init(TRAINER_DETECT_GPIO, GPIO_IN_PU, GPIO_PIN_SPEED_LOW); -#endif +#endif trainer_init(); } @@ -63,11 +64,6 @@ static const stm32_pulse_timer_t trainerOutputTimer = { .DMA_TC_CallbackPtr = nullptr, }; -void trainer_init_dsc_out() -{ - trainer_init_output(&trainerOutputTimer); -} - static const stm32_pulse_timer_t trainerInputTimer = { .GPIO = TRAINER_IN_GPIO, .GPIO_Alternate = TRAINER_GPIO_AF, @@ -82,6 +78,25 @@ static const stm32_pulse_timer_t trainerInputTimer = { .DMA_TC_CallbackPtr = nullptr, }; +#if defined(TRAINER_JACK_CROSSOVER) +// Trainer in is on the jack tip and out on the ring, for the crossover lead +// the radio ships with. A mono lead grounds the ring, so optionally send on +// the tip (the input pin) as well. +static_assert(__IS_TRAINER_TIMER_OUT_CHANNEL_SUPPORTED(TRAINER_IN_TIMER_Channel), + "Unsupported trainer timer input channel for tip-only output"); +#endif + +void trainer_init_dsc_out() +{ +#if defined(TRAINER_JACK_CROSSOVER) + if (g_eeGeneral.trainerTipOnly) { + trainer_init_output(&trainerInputTimer); + return; + } +#endif + trainer_init_output(&trainerOutputTimer); +} + void trainer_init_dsc_in() { trainer_init_capture(&trainerInputTimer); diff --git a/radio/src/boards/hw_defs/el18.json b/radio/src/boards/hw_defs/el18.json index 1001ca99c3c..b30b87fd22f 100644 --- a/radio/src/boards/hw_defs/el18.json +++ b/radio/src/boards/hw_defs/el18.json @@ -404,6 +404,7 @@ "trainer_timer_irqn": "TIM4_IRQn", "trainer_timer_irqhandler": "TIM4_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_2", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/nb4p.json b/radio/src/boards/hw_defs/nb4p.json index 09154e6d46c..37192a06563 100644 --- a/radio/src/boards/hw_defs/nb4p.json +++ b/radio/src/boards/hw_defs/nb4p.json @@ -267,6 +267,7 @@ "trainer_timer_irqn": "TIM4_IRQn", "trainer_timer_irqhandler": "TIM4_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_2", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/nv14.json b/radio/src/boards/hw_defs/nv14.json index 045f71ba681..706c95dd323 100644 --- a/radio/src/boards/hw_defs/nv14.json +++ b/radio/src/boards/hw_defs/nv14.json @@ -404,6 +404,7 @@ "trainer_timer_irqn": "TIM4_IRQn", "trainer_timer_irqhandler": "TIM4_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_2", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/pa01.json b/radio/src/boards/hw_defs/pa01.json index 1c04a5c14cd..0f763794af6 100644 --- a/radio/src/boards/hw_defs/pa01.json +++ b/radio/src/boards/hw_defs/pa01.json @@ -392,6 +392,7 @@ "trainer_timer_irqn": "TIM1_CC_IRQn", "trainer_timer_irqhandler": "TIM1_CC_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_1", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/pl18.json b/radio/src/boards/hw_defs/pl18.json index da43303620a..bab36edf8b4 100644 --- a/radio/src/boards/hw_defs/pl18.json +++ b/radio/src/boards/hw_defs/pl18.json @@ -390,6 +390,7 @@ "trainer_timer_irqn": "TIM4_IRQn", "trainer_timer_irqhandler": "TIM4_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_2", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/pl18ev.json b/radio/src/boards/hw_defs/pl18ev.json index 0be17d570e7..b4ea1e0c1e0 100644 --- a/radio/src/boards/hw_defs/pl18ev.json +++ b/radio/src/boards/hw_defs/pl18ev.json @@ -434,6 +434,7 @@ "trainer_timer_irqn": "TIM4_IRQn", "trainer_timer_irqhandler": "TIM4_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_2", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/pl18u.json b/radio/src/boards/hw_defs/pl18u.json index 171ef41e0b7..579ef426393 100644 --- a/radio/src/boards/hw_defs/pl18u.json +++ b/radio/src/boards/hw_defs/pl18u.json @@ -407,6 +407,7 @@ "trainer_timer_irqn": "TIM4_IRQn", "trainer_timer_irqhandler": "TIM4_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_2", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true } } diff --git a/radio/src/boards/hw_defs/st16.json b/radio/src/boards/hw_defs/st16.json index 7b31d781175..ad078c9adc9 100644 --- a/radio/src/boards/hw_defs/st16.json +++ b/radio/src/boards/hw_defs/st16.json @@ -511,15 +511,16 @@ "usb_gpio_af": "GPIO_AF10" }, "trainer": { - "trainer_in_gpio": "GPIO_PIN(GPIOE, 5)", - "trainer_in_timer_channel": "LL_TIM_CHANNEL_CH1", - "trainer_out_gpio": "GPIO_PIN(GPIOE, 6)", - "trainer_out_timer_channel": "LL_TIM_CHANNEL_CH2", + "trainer_in_gpio": "GPIO_PIN(GPIOE, 6)", + "trainer_in_timer_channel": "LL_TIM_CHANNEL_CH2", + "trainer_out_gpio": "GPIO_PIN(GPIOE, 5)", + "trainer_out_timer_channel": "LL_TIM_CHANNEL_CH1", "trainer_timer": "TIM15", "trainer_timer_irqn": "TIM15_IRQn", "trainer_timer_irqhandler": "TIM15_IRQHandler", "trainer_gpio_af": "LL_GPIO_AF_4", - "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + "trainer_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "trainer_jack_crossover": true }, "key_lock_combo": [ "KEY_EXIT", diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index 18c9ca68c1e..6a15235c8f7 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -1219,13 +1219,16 @@ PACK(struct RadioData { // Radio level tabs control (global settings) NOBACKUP(uint8_t modelSelectLayout:2); NOBACKUP(uint8_t radioThemesDisabled:1); + // 0 = trainer in/out on their own jack contacts (crossover lead, default), + // 1 = both on the tip (mono / straight lead). TRAINER_JACK_CROSSOVER only + NOBACKUP(uint8_t trainerTipOnly:1); #if defined(USB_CHARGE_CONTROL) // 0 = charge while USB active (default), 1 = hold the charger off while USB // is plugged in SD/Joystick/VCP mode NOBACKUP(uint8_t usbChargeDisabled:1); - NOBACKUP(uint8_t spare:6 SKIP); + NOBACKUP(uint8_t spare:5 SKIP); #else - NOBACKUP(uint8_t spare:7 SKIP); + NOBACKUP(uint8_t spare:6 SKIP); #endif #elif LCD_W == 128 uint8_t invertLCD:1; // Invert B&W LCD display diff --git a/radio/src/gui/colorlcd/radio/radio_hardware.cpp b/radio/src/gui/colorlcd/radio/radio_hardware.cpp index fc57e4c3af6..e941fb7f173 100644 --- a/radio/src/gui/colorlcd/radio/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio/radio_hardware.cpp @@ -22,6 +22,7 @@ #include "radio_hardware.h" #include "edgetx.h" +#include "choice.h" #include "getset_helpers.h" #include "hal/adc_driver.h" #include "hw_extmodule.h" @@ -165,6 +166,21 @@ const static SetupLineDef setupLines[] = { new ToggleSwitch(parent, {x, y, 0, 0}, GET_SET_DEFAULT(g_eeGeneral.audioMuteEnable)); } }, +#endif +#if defined(TRAINER_JACK_CROSSOVER) + { + // Trainer jack wiring: crossover lead vs mono / straight lead + STR_DEF(STR_TRAINER_JACK_MODE), + [](Window* parent, coord_t x, coord_t y) { + new Choice(parent, {x, y, 0, 0}, STR_TRAINER_JACK_MODES, 0, 1, + GET_DEFAULT(g_eeGeneral.trainerTipOnly), [=](int32_t newValue) { + g_eeGeneral.trainerTipOnly = newValue; + SET_DIRTY(); + // restarted on the new contacts by checkTrainerSettings() + stopTrainer(); + }); + } + }, #endif {nullptr, nullptr}, }; diff --git a/radio/src/storage/yaml/yaml_datastructs_c14.cpp b/radio/src/storage/yaml/yaml_datastructs_c14.cpp index 81079dac127..7a12f97092c 100644 --- a/radio/src/storage/yaml/yaml_datastructs_c14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_c14.cpp @@ -474,7 +474,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_f16.cpp b/radio/src/storage/yaml/yaml_datastructs_f16.cpp index deca61c1a1b..1dbd5d91bca 100644 --- a/radio/src/storage/yaml/yaml_datastructs_f16.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_f16.cpp @@ -475,7 +475,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_gx15.cpp b/radio/src/storage/yaml/yaml_datastructs_gx15.cpp index 5373309f211..2983abac9ea 100644 --- a/radio/src/storage/yaml/yaml_datastructs_gx15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_gx15.cpp @@ -498,8 +498,9 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), YAML_UNSIGNED( "usbChargeDisabled", 1 ), - YAML_PADDING( 6 ), + YAML_PADDING( 5 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_h17.cpp b/radio/src/storage/yaml/yaml_datastructs_h17.cpp index 7cad23b569c..de5cb26d87d 100644 --- a/radio/src/storage/yaml/yaml_datastructs_h17.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_h17.cpp @@ -469,7 +469,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp b/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp index 41e83bb5be6..03e807226be 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp @@ -465,7 +465,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index 06b9f866951..36672f520b7 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -465,7 +465,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_KeyShortcut, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QMFavorite, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_pa01.cpp b/radio/src/storage/yaml/yaml_datastructs_pa01.cpp index 96643126a95..4f0ac605118 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pa01.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pa01.cpp @@ -498,7 +498,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp index e41b4810019..dcbe900758b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp @@ -472,7 +472,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp index cfddee0632a..2def7ffbe9a 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp @@ -465,7 +465,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_st16.cpp b/radio/src/storage/yaml/yaml_datastructs_st16.cpp index eca99be6f0d..d1536f51f6d 100644 --- a/radio/src/storage/yaml/yaml_datastructs_st16.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_st16.cpp @@ -498,7 +498,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t15.cpp b/radio/src/storage/yaml/yaml_datastructs_t15.cpp index 8e25a6ef249..1579cbf38ce 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t15.cpp @@ -483,7 +483,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t15h7.cpp b/radio/src/storage/yaml/yaml_datastructs_t15h7.cpp index efecdd65629..7513972850a 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t15h7.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t15h7.cpp @@ -498,7 +498,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp b/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp index efecdd65629..7513972850a 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp @@ -498,7 +498,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t18h7.cpp b/radio/src/storage/yaml/yaml_datastructs_t18h7.cpp index 38114b7a477..ab639771abc 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t18h7.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t18h7.cpp @@ -493,7 +493,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t22.cpp b/radio/src/storage/yaml/yaml_datastructs_t22.cpp index efecdd65629..7513972850a 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t22.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t22.cpp @@ -498,7 +498,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_tx15.cpp b/radio/src/storage/yaml/yaml_datastructs_tx15.cpp index 5373309f211..2983abac9ea 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tx15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tx15.cpp @@ -498,8 +498,9 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), YAML_UNSIGNED( "usbChargeDisabled", 1 ), - YAML_PADDING( 6 ), + YAML_PADDING( 5 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_tx16smk3.cpp b/radio/src/storage/yaml/yaml_datastructs_tx16smk3.cpp index 88ee740d5b7..e62517f3eaa 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tx16smk3.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tx16smk3.cpp @@ -499,8 +499,9 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), YAML_UNSIGNED( "usbChargeDisabled", 1 ), - YAML_PADDING( 6 ), + YAML_PADDING( 5 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_v12.cpp b/radio/src/storage/yaml/yaml_datastructs_v12.cpp index 3c886a9d22a..64e63fe2f59 100644 --- a/radio/src/storage/yaml/yaml_datastructs_v12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_v12.cpp @@ -493,7 +493,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_v15.cpp b/radio/src/storage/yaml/yaml_datastructs_v15.cpp index 192f60d3926..4dd823e075c 100644 --- a/radio/src/storage/yaml/yaml_datastructs_v15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_v15.cpp @@ -500,7 +500,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index f3c773b8e0b..920a8cf6a40 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -474,7 +474,8 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_PADDING( 7 ), + YAML_UNSIGNED( "trainerTipOnly", 1 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ENUM("statusLedError", 2, enum_StatusLedColor, NULL), YAML_ENUM("statusLedReady", 2, enum_StatusLedColor, NULL), diff --git a/radio/src/translations/i18n/cn.h b/radio/src/translations/i18n/cn.h index 626f29dc8b1..4a681fbfb32 100644 --- a/radio/src/translations/i18n/cn.h +++ b/radio/src/translations/i18n/cn.h @@ -567,6 +567,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("关机检查教练", "关机时检查教练信号") #define TR_MODEL_STILL_POWERED "模型未断电" #define TR_TRAINER_STILL_CONNECTED "教练信号未断开" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB未断开" #define TR_MODEL_SHUTDOWN "关机 ?" #define TR_PRESS_ENTER_TO_CONFIRM "确认" diff --git a/radio/src/translations/i18n/cz.h b/radio/src/translations/i18n/cz.h index d714b037bce..8cafb1a350e 100644 --- a/radio/src/translations/i18n/cz.h +++ b/radio/src/translations/i18n/cz.h @@ -569,6 +569,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trenér vypnutí", "Kontrola trenéra při vypnutí") #define TR_MODEL_STILL_POWERED "Model stále spuštěn" #define TR_TRAINER_STILL_CONNECTED "Trenér stále připojen" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB stále připojeno" #define TR_MODEL_SHUTDOWN "Vypnout?" #define TR_PRESS_ENTER_TO_CONFIRM "Zmáčkni ENTER pro potvrzení" diff --git a/radio/src/translations/i18n/da.h b/radio/src/translations/i18n/da.h index 9f6a9338127..4f72962bb1c 100644 --- a/radio/src/translations/i18n/da.h +++ b/radio/src/translations/i18n/da.h @@ -572,6 +572,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Træner alarm", "Kontroller træner forbindelse") #define TR_MODEL_STILL_POWERED "Model stadig med strøm" #define TR_TRAINER_STILL_CONNECTED "Træner fortsat forbundet" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB stadig forbundet" #define TR_MODEL_SHUTDOWN "Luk ned?" #define TR_PRESS_ENTER_TO_CONFIRM "Tryk enter for bekræft" diff --git a/radio/src/translations/i18n/de.h b/radio/src/translations/i18n/de.h index e16600f6459..3680ab697b5 100644 --- a/radio/src/translations/i18n/de.h +++ b/radio/src/translations/i18n/de.h @@ -569,6 +569,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer b. Aussch.", "Prüfe Trainer bei Ausschalten") #define TR_MODEL_STILL_POWERED "Modell noch aktiv!" #define TR_TRAINER_STILL_CONNECTED "Schüler noch verbunden" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB noch verbunden" #define TR_MODEL_SHUTDOWN "Herunterfahren?" #define TR_PRESS_ENTER_TO_CONFIRM "Drücke [ENTER] zum Bestätigen" diff --git a/radio/src/translations/i18n/en.h b/radio/src/translations/i18n/en.h index c89ac711e31..e38c2fcfc63 100644 --- a/radio/src/translations/i18n/en.h +++ b/radio/src/translations/i18n/en.h @@ -568,6 +568,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer shutdown", "Check trainer on shutdown") #define TR_MODEL_STILL_POWERED "Model still powered" #define TR_TRAINER_STILL_CONNECTED TR("Trainer still on","Trainer still connected") +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB still connected" #define TR_MODEL_SHUTDOWN "Shutdown?" #define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm" diff --git a/radio/src/translations/i18n/es.h b/radio/src/translations/i18n/es.h index 05370adcf39..7c18a393533 100644 --- a/radio/src/translations/i18n/es.h +++ b/radio/src/translations/i18n/es.h @@ -566,6 +566,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer alarm", "check trainer connection") #define TR_MODEL_STILL_POWERED "Modelo aun encendido" #define TR_TRAINER_STILL_CONNECTED "Trainer still connected" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB still connected" #define TR_MODEL_SHUTDOWN "Apagar ?" #define TR_PRESS_ENTER_TO_CONFIRM "Enter para confirmar" diff --git a/radio/src/translations/i18n/fi.h b/radio/src/translations/i18n/fi.h index 4a8da731af1..062b74458be 100644 --- a/radio/src/translations/i18n/fi.h +++ b/radio/src/translations/i18n/fi.h @@ -567,6 +567,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer alarm", "check trainer connection") #define TR_MODEL_STILL_POWERED "Model still powered" #define TR_TRAINER_STILL_CONNECTED "Trainer still connected" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB still connected" #define TR_MODEL_SHUTDOWN "Shutdown ?" #define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm" diff --git a/radio/src/translations/i18n/fr.h b/radio/src/translations/i18n/fr.h index 2cb7a25cb54..e470f52ac01 100644 --- a/radio/src/translations/i18n/fr.h +++ b/radio/src/translations/i18n/fr.h @@ -570,6 +570,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer shutdown", "Vérifier écolage avant extinction") #define TR_MODEL_STILL_POWERED TR("Modèle alimenté", "Modèle encore alimenté") #define TR_TRAINER_STILL_CONNECTED "Élève encore connecté" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB encore connecté" #define TR_MODEL_SHUTDOWN "Éteindre ?" #define TR_PRESS_ENTER_TO_CONFIRM "Appui [Enter] pour confirmer" diff --git a/radio/src/translations/i18n/he.h b/radio/src/translations/i18n/he.h index 76042693328..8c8d91d752d 100644 --- a/radio/src/translations/i18n/he.h +++ b/radio/src/translations/i18n/he.h @@ -571,6 +571,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("התראת טריינר", "בדוק חיבור טריינר") #define TR_MODEL_STILL_POWERED "מודל עדיין פעיל" #define TR_TRAINER_STILL_CONNECTED "מצב חניך עדיין מחובר" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "חיבור עדיין מחובר" #define TR_MODEL_SHUTDOWN "?לכבות" #define TR_PRESS_ENTER_TO_CONFIRM "לחץ אנטר לאישור" diff --git a/radio/src/translations/i18n/it.h b/radio/src/translations/i18n/it.h index 3b827b341db..adc564a00fa 100644 --- a/radio/src/translations/i18n/it.h +++ b/radio/src/translations/i18n/it.h @@ -568,6 +568,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Spegnimento Trainer", "Controlla trainer spegnendo") #define TR_MODEL_STILL_POWERED "Radio ancora\nconnessa" #define TR_TRAINER_STILL_CONNECTED "Trainer ancora\nconnesso" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB ancora\nconnesso" #define TR_MODEL_SHUTDOWN "Spegnimento?" #define TR_PRESS_ENTER_TO_CONFIRM "Premi [ENT] per confermare" diff --git a/radio/src/translations/i18n/jp.h b/radio/src/translations/i18n/jp.h index 7c0fe11b7fc..f205aeb31c4 100644 --- a/radio/src/translations/i18n/jp.h +++ b/radio/src/translations/i18n/jp.h @@ -567,6 +567,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer shutdown", "シャットダウン時にトレーナーをチェック") #define TR_MODEL_STILL_POWERED "電源が入ったままです" #define TR_TRAINER_STILL_CONNECTED "トレーナー通信はまだ継続しています" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USBが接続されたままです" #define TR_MODEL_SHUTDOWN "シャットダウンしますか?" #define TR_PRESS_ENTER_TO_CONFIRM "Enterを押して確認してください" diff --git a/radio/src/translations/i18n/ko.h b/radio/src/translations/i18n/ko.h index 7800a01be36..1c46ddd3861 100644 --- a/radio/src/translations/i18n/ko.h +++ b/radio/src/translations/i18n/ko.h @@ -574,6 +574,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("트레이너 상태 확인", "종료 시 트레이너 확인") #define TR_MODEL_STILL_POWERED "모델 전원이 켜져 있음" #define TR_TRAINER_STILL_CONNECTED TR("트레이너 연결됨", "트레이너 아직 연결됨") +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB 연결 중" #define TR_MODEL_SHUTDOWN "모델을 종료할까요?" diff --git a/radio/src/translations/i18n/nl.h b/radio/src/translations/i18n/nl.h index 42bf51a86fb..67d48859664 100644 --- a/radio/src/translations/i18n/nl.h +++ b/radio/src/translations/i18n/nl.h @@ -569,6 +569,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer alarm", "check trainer connection") #define TR_MODEL_STILL_POWERED "Model still powered" #define TR_TRAINER_STILL_CONNECTED "Trainer still connected" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB still connected" #define TR_MODEL_SHUTDOWN "Shutdown ?" #define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm" diff --git a/radio/src/translations/i18n/pl.h b/radio/src/translations/i18n/pl.h index c1303a1f863..35fe5003346 100644 --- a/radio/src/translations/i18n/pl.h +++ b/radio/src/translations/i18n/pl.h @@ -567,6 +567,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trener wyłączanie", "Sprawdzaj trener przy wyłączaniu") #define TR_MODEL_STILL_POWERED "Model jest włączony" #define TR_TRAINER_STILL_CONNECTED "Uczeń ciągle podłączony" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB jest podłączone" #define TR_MODEL_SHUTDOWN "Wyłączyć?" #define TR_PRESS_ENTER_TO_CONFIRM "Press enter to confirm" diff --git a/radio/src/translations/i18n/pt.h b/radio/src/translations/i18n/pt.h index 6fb1c3ec3a4..23d4cbf19c5 100644 --- a/radio/src/translations/i18n/pt.h +++ b/radio/src/translations/i18n/pt.h @@ -567,6 +567,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Trainer ao desl", "Checar trainer ao desligar") #define TR_MODEL_STILL_POWERED "Modelo ainda ligado" #define TR_TRAINER_STILL_CONNECTED "Trainer ainda conectado" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB ainda ligado" #define TR_MODEL_SHUTDOWN "Desligar?" #define TR_PRESS_ENTER_TO_CONFIRM "Press enter p/ confirmar" diff --git a/radio/src/translations/i18n/ru.h b/radio/src/translations/i18n/ru.h index 1d7d93d4b37..cd78446e7c4 100644 --- a/radio/src/translations/i18n/ru.h +++ b/radio/src/translations/i18n/ru.h @@ -570,6 +570,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("ВЫК Тренер", "Проверьте работу тренера при ВЫКЛ") #define TR_MODEL_STILL_POWERED "Модель работает" #define TR_TRAINER_STILL_CONNECTED "Тренер подкл" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB подкл" #define TR_MODEL_SHUTDOWN "Отключение?" #define TR_PRESS_ENTER_TO_CONFIRM "Нажмите [Enter] для подтв" diff --git a/radio/src/translations/i18n/se.h b/radio/src/translations/i18n/se.h index ecc354673e2..3a73b275876 100644 --- a/radio/src/translations/i18n/se.h +++ b/radio/src/translations/i18n/se.h @@ -571,6 +571,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Lärare alarm", "Kolla läraranslutningen") #define TR_MODEL_STILL_POWERED TR("Modell på","Modellen är på") #define TR_TRAINER_STILL_CONNECTED "Lärare fortfarande ansluten" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB är ansluten" #define TR_MODEL_SHUTDOWN "Stänga av?" #define TR_PRESS_ENTER_TO_CONFIRM "Tryck [ENTER] för att bekräfta" diff --git a/radio/src/translations/i18n/sk.h b/radio/src/translations/i18n/sk.h index 714a1b212ce..99f8fb70aae 100644 --- a/radio/src/translations/i18n/sk.h +++ b/radio/src/translations/i18n/sk.h @@ -574,6 +574,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Tréner vypnutý", "Kontrola trénera pri vypnutí") #define TR_MODEL_STILL_POWERED "Model stále spustený" #define TR_TRAINER_STILL_CONNECTED "Tréner stále pripojený" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB stále pripojené" #define TR_MODEL_SHUTDOWN "Vypnúť?" #define TR_PRESS_ENTER_TO_CONFIRM "Stlač ENTER pre potvrdenie" diff --git a/radio/src/translations/i18n/tw.h b/radio/src/translations/i18n/tw.h index a3c0c7eeee8..5484e753c19 100644 --- a/radio/src/translations/i18n/tw.h +++ b/radio/src/translations/i18n/tw.h @@ -565,6 +565,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("關機檢查教練", "關機時檢查教練信號") #define TR_MODEL_STILL_POWERED "模型未斷電" #define TR_TRAINER_STILL_CONNECTED "教練信號未斷開" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB未斷開" #define TR_MODEL_SHUTDOWN "關機 ?" #define TR_PRESS_ENTER_TO_CONFIRM "確認" diff --git a/radio/src/translations/i18n/ua.h b/radio/src/translations/i18n/ua.h index cf7ac995065..bb0b7770d8a 100644 --- a/radio/src/translations/i18n/ua.h +++ b/radio/src/translations/i18n/ua.h @@ -569,6 +569,9 @@ #define TR_TRAINER_SHUTDOWN_ALARM TR("Тренер при вимк.", "Перевіряти тренер при вимиканні") #define TR_MODEL_STILL_POWERED "Модель досі під живленням" #define TR_TRAINER_STILL_CONNECTED "Трен. досі підключено" +#define TR_TRAINER_JACK_MODE "Trainer lead" +#define TR_TRAINER_JACK_MODES_1 "Crossover" +#define TR_TRAINER_JACK_MODES_2 "Standard" #define TR_USB_STILL_CONNECTED "USB досі підключено" #define TR_MODEL_SHUTDOWN "Вимкнути?" #define TR_PRESS_ENTER_TO_CONFIRM "Тисни enter для підтвердження" diff --git a/radio/src/translations/sim_string_list.h b/radio/src/translations/sim_string_list.h index 0ece2c080f9..11ae8e55914 100644 --- a/radio/src/translations/sim_string_list.h +++ b/radio/src/translations/sim_string_list.h @@ -1010,6 +1010,8 @@ #define STR_TOUCH_PANEL currentLangStrings->STR_TOUCH_PANEL #define STR_TRAINER_SHUTDOWN_ALARM currentLangStrings->STR_TRAINER_SHUTDOWN_ALARM #define STR_TRAINER_STILL_CONNECTED currentLangStrings->STR_TRAINER_STILL_CONNECTED +#define STR_TRAINER_JACK_MODE currentLangStrings->STR_TRAINER_JACK_MODE +#define STR_TRAINER_JACK_MODES currentLangStrings->STR_TRAINER_JACK_MODES #define STR_TRAINER currentLangStrings->STR_TRAINER #define STR_TRIM currentLangStrings->STR_TRIM #define STR_TRIMINC currentLangStrings->STR_TRIMINC diff --git a/radio/src/translations/string_list.h b/radio/src/translations/string_list.h index f3dee893726..f51525022cd 100644 --- a/radio/src/translations/string_list.h +++ b/radio/src/translations/string_list.h @@ -1006,6 +1006,8 @@ STR(TOUCH_ENABLED) STR(TOUCH_PANEL) STR(TRAINER_SHUTDOWN_ALARM) STR(TRAINER_STILL_CONNECTED) +STR(TRAINER_JACK_MODE) +STRARRAY(TRAINER_JACK_MODES) STR(TRAINER) STR(TRIM) STR(TRIMINC) diff --git a/radio/src/translations/translation_def.h b/radio/src/translations/translation_def.h index c6c6ebba316..8bfe6dee206 100644 --- a/radio/src/translations/translation_def.h +++ b/radio/src/translations/translation_def.h @@ -136,6 +136,7 @@ #define TR_FS_COLOR_LIST SA9(TR_FS_COLOR_LIST) #define TR_STATUS_LED_COLORS SA3(TR_STATUS_LED_COLORS) +#define TR_TRAINER_JACK_MODES SA2(TR_TRAINER_JACK_MODES) #define TR_VUSBJOYSTICK_CH_AXIS SA9(TR_VUSBJOYSTICK_CH_AXIS) #define TR_POTTYPES SA8(TR_POTTYPES) @@ -189,7 +190,7 @@ #define TR_TRNMODE SA3(TR_TRNMODE) #define TR_VPERSISTENT SA3(TR_VPERSISTENT) #define TR_COUNTRY_CODES SA3(TR_COUNTRY_CODES) -#define TR_JACK_MODES SA3(TR_COUNTRY_CODES) +#define TR_JACK_MODES SA3(TR_JACK_MODES) #define TR_VDISPLAYTRIMS SA3(TR_VDISPLAYTRIMS) #define TR_ADCFILTERVALUES SA3(TR_ADCFILTERVALUES) #define TR_VMLTPX SA3(TR_VMLTPX) diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py index 04c9f6c742a..284b46fb202 100644 --- a/radio/util/hw_defs/models.py +++ b/radio/util/hw_defs/models.py @@ -363,6 +363,7 @@ class Trainer(BaseModel): trainer_gpio_af: Optional[str] = None trainer_detect_gpio: Optional[str] = None trainer_detect_inverted: Optional[bool] = None + trainer_jack_crossover: Optional[bool] = None Input = Union[StickInput, FlexInput, SwitchInput, RawInput, VBatInput, RTCBatInput, LuxInput] diff --git a/tools/hwdef_schema.json b/tools/hwdef_schema.json index e9133e8ff75..c7b7cf4dd7f 100644 --- a/tools/hwdef_schema.json +++ b/tools/hwdef_schema.json @@ -480,7 +480,8 @@ "trainer_timer_freq": { "type": "string" }, "trainer_gpio_af": { "type": "string" }, "trainer_detect_gpio": { "type": "string" }, - "trainer_detect_inverted": { "type": "boolean" } + "trainer_detect_inverted": { "type": "boolean" }, + "trainer_jack_crossover": { "type": "boolean" } } } }