diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index eadafa0ea..a296f768a 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -53,7 +53,7 @@ option(MODULE_PROTOCOL_FLEX "Add support for non certified FLEX modules" OFF) option(MODULE_PROTOCOL_D8 "Add support for D8 modules" ON) option(FRSKY_RELEASE "Used to build FrSky released firmware" OFF) option(TBS_RELEASE "Used to build TBS released firmware" OFF) -option(ALLOW_TRAINER_MULTI "Allow multi trainer" OFF) +option(HARDWARE_TRAINER_MULTI "Allow multi trainer" OFF) option(BOOTLOADER "Include Bootloader" ON) # since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags. @@ -371,8 +371,8 @@ if(FRSKY_RELEASE) set(POPUP_LEVEL 3) endif() -if(ALLOW_TRAINER_MULTI) - add_definitions(-DALLOW_TRAINER_MULTI) +if(HARDWARE_TRAINER_MULTI) + add_definitions(-DHARDWARE_TRAINER_MULTI) endif() add_definitions(-DPOPUP_LEVEL=${POPUP_LEVEL}) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 85fb38f06..25b34982c 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -187,18 +187,16 @@ enum ModuleIndex { SPORT_MODULE, }; enum TrainerMode { + TRAINER_MODE_OFF, 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 { @@ -208,16 +206,6 @@ enum TrainerMode { }; #endif -#if defined(RADIO_FAMILY_T16) || 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) - #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE -#else - #define TRAINER_MODE_MAX() HAS_WIRELESS_TRAINER_HARDWARE() ? TRAINER_MODE_MASTER_BATTERY_COMPARTMENT : TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE -#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/datastructs.h b/radio/src/datastructs.h index 0b56cc1fe..2f5add70e 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -405,8 +405,7 @@ PACK(struct TelemetrySensor { */ PACK(struct TrainerModuleData { - uint8_t mode:3; - uint8_t spare1:5 SKIP; + uint8_t mode; uint8_t channelsStart; int8_t channelsCount; // 0=8 channels int8_t frameLength; diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index a4ff0fb2d..1b2a94e1e 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1039,7 +1039,7 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, INDENT TR_MODE); lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr); if (attr) { - g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable); + g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX, EE_MODEL, isTrainerModeAvailable); #if defined(BLUETOOTH) if (checkIncDec_Ret) { bluetooth.state = BLUETOOTH_STATE_OFF; diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index f893863d0..895e71f4c 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -916,7 +916,7 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, INDENT TR_MODE); lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr); if (attr) { - g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable); + g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX, EE_MODEL, isTrainerModeAvailable); #if defined(BLUETOOTH) if (checkIncDec_Ret) { bluetooth.state = BLUETOOTH_STATE_OFF; diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 1e73ba5cf..2691fa924 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -449,6 +449,88 @@ class ReceiverButton: public TextButton { uint8_t receiverIdx; }; +class TrainerModuleWindow : public FormGroup { + public: + TrainerModuleWindow(FormWindow * parent, const rect_t & rect) : + FormGroup(parent, rect, FORWARD_SCROLL | FORM_FORWARD_FOCUS) + { + update(); + } + + void update() + { + FormGridLayout grid; + 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) { + g_model.trainerData.mode = newValue; + update(); + SET_DIRTY(); + moduleChoice->setFocus(); + }); + moduleChoice->setAvailableHandler(isTrainerModeAvailable); + grid.nextLine(); + + if (g_model.trainerData.mode > TRAINER_MODE_OFF) { + 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, + GET_DEFAULT(1 + g_model.trainerData.channelsStart)); + channelEnd = new NumberEdit(this, grid.getFieldSlot(2, 1), + g_model.trainerData.channelsStart + 1, + min(MAX_TRAINER_CHANNELS, g_model.trainerData.channelsStart + MAX_TRAINER_CHANNELS_M8), + GET_DEFAULT(g_model.trainerData.channelsStart + 8 + g_model.trainerData.channelsCount)); + channelStart->setPrefix(STR_CH); + channelEnd->setPrefix(STR_CH); + channelStart->setSetValueHandler([=](int32_t newValue) { + g_model.trainerData.channelsStart = newValue - 1; + SET_DIRTY(); + channelEnd->setMin(g_model.trainerData.channelsStart + 1); + channelEnd->setMax(min(MAX_TRAINER_CHANNELS, g_model.trainerData.channelsStart + MAX_TRAINER_CHANNELS_M8)); + channelEnd->invalidate(); + }); + channelEnd->setSetValueHandler([=](int32_t newValue) { + g_model.trainerData.channelsCount = newValue - g_model.trainerData.channelsStart - 8; + SET_DIRTY(); + channelStart->setMax(MAX_TRAINER_CHANNELS - 8 + g_model.trainerData.channelsCount + 1); + }); + grid.nextLine(); + } + + if (g_model.trainerData.mode == TRAINER_MODE_SLAVE) { + // PPM frame + new StaticText(this, grid.getLabelSlot(true), STR_PPMFRAME); + + // PPM frame length + auto edit = new NumberEdit(this, grid.getFieldSlot(3, 0), 125, 35 * 5 + 225, + GET_DEFAULT(g_model.trainerData.frameLength * 5 + 225), + SET_VALUE(g_model.trainerData.frameLength, (newValue - 225) / 5), + PREC1); + edit->setStep(5); + edit->setSuffix(STR_MS); + + // PPM frame delay + edit = new NumberEdit(this, grid.getFieldSlot(3, 1), 100, 800, + GET_DEFAULT(g_model.trainerData.delay * 50 + 300), + SET_VALUE(g_model.trainerData.delay, (newValue - 300) / 50)); + edit->setStep(50); + edit->setSuffix("us"); + + // PPM Polarity + new Choice(this, grid.getFieldSlot(3, 2), STR_PPM_POL, 0, 1, GET_SET_DEFAULT(g_model.trainerData.pulsePol )); + grid.nextLine(); + } + getParent()->moveWindowsTop(top(), adjustHeight()); + getParent()->invalidate(); // TODO should be automatically done + } + + protected: + Choice * moduleChoice = nullptr; + NumberEdit * channelStart = nullptr; + NumberEdit * channelEnd = nullptr; +}; + class ModuleWindow : public FormGroup { public: ModuleWindow(FormWindow * parent, const rect_t &rect, uint8_t moduleIdx) : @@ -1067,7 +1149,12 @@ void ModelSetupPage::build(FormWindow * window) grid.addWindow(new ModuleWindow(window, {0, grid.getWindowHeight(), LCD_W, 0}, EXTERNAL_MODULE)); } - grid.nextLine(); + // Trainer + { + new Subtitle(window, grid.getLineSlot(), STR_TRAINER); + grid.nextLine(); + grid.addWindow(new TrainerModuleWindow(window, {0, grid.getWindowHeight(), LCD_W, 0})); + } window->setInnerHeight(grid.getWindowHeight()); } diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 49701d9d2..77b24eb3b 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -734,40 +734,49 @@ 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; + 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(); #endif #if defined(PCBX9E) - if (g_eeGeneral.bluetoothMode && mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) { - // bluetooth uses the same USART than SBUS - return false; + case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: + // bluetooth uses the same USART than SBUS + return !g_eeGeneral.bluetoothMode; +#endif + +#if defined(HARDWARE_TRAINER_AUX_SERIAL) + case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: + return g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER; +#endif + +#if defined(HARDWARE_TRAINER_BLUETOOTH) + case TRAINER_MODE_MASTER_BLUETOOTH: + case TRAINER_MODE_SLAVE_BLUETOOTH: + return g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER; +#endif + +#if defined(HARDWARE_TRAINER_JACK) + case TRAINER_MODE_MASTER_TRAINER_JACK: + case TRAINER_MODE_SLAVE: + return true; +#endif + +#if defined(HARDWARE_TRAINER_MULTI) + case TRAINER_MODE_MULTI: + return true; +#endif + +#if !defined(TRAINER_DETECT_GPIO) + case TRAINER_MODE_OFF: + return true; +#endif + + default: + return false; } -#endif - -#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(PCBX9E) - if (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH) - return false; -#elif defined(BLUETOOTH) - if (g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH)) - return false; -#endif - -#if defined(PCBXLITE) && !defined(PCBXLITES) - if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE) - return false; -#endif - - return true; } bool modelHasNotes() diff --git a/radio/src/lua/CMakeLists.txt b/radio/src/lua/CMakeLists.txt index 532ecf642..eb31f6b36 100644 --- a/radio/src/lua/CMakeLists.txt +++ b/radio/src/lua/CMakeLists.txt @@ -10,7 +10,7 @@ endmacro(add_lua_export_target) set(LUA_INCLUDES -DCPUARM -DLUA -DLUA_INPUTS -DLUA_EXPORT_GENERATION -DSIMU - -I${RADIO_SRC_DIRECTORY} + -I${RADIO_SRC_DIR} -I${RADIO_SRC_DIR}/targets/${TARGET_DIR} -I${RADIO_SRC_DIR}/thirdparty -I${RADIO_SRC_DIR}/targets/common/arm/stm32 diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 0d664729c..7fe8492f1 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -33,15 +33,12 @@ #define GET_MODULE_PPM_DELAY(idx) (g_model.moduleData[idx].ppm.delay * 50 + 300) #define GET_TRAINER_PPM_DELAY() (g_model.trainerData.delay * 50 + 300) -#if defined(PCBHORUS) - #define IS_TRAINER_EXTERNAL_MODULE() false - #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.auxSerialMode==UART_MODE_SBUS_TRAINER) -#elif defined(PCBTARANIS) - #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerData.mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerData.mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) - #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) +#if defined(HARDWARE_TRAINER_EXTERNAL_MODULE) + #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerData.mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerData.mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) #else - #define IS_TRAINER_EXTERNAL_MODULE() false + #define IS_TRAINER_EXTERNAL_MODULE() false #endif +#define IS_TRAINER_AUX_SERIAL() (g_eeGeneral.auxSerialMode==UART_MODE_SBUS_TRAINER) #define IS_PLAY_FUNC(func) ((func) >= FUNC_PLAY_SOUND && func <= FUNC_PLAY_VALUE) diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 74c7e6ae4..17e72ea20 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -129,6 +129,7 @@ add_definitions(-DPCBHORUS -DSTM32F429_439xx -DSDRAM -DCOLORLCD -DHARDWARE_KEYS) add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE}) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) +add_definitions(-DHARDWARE_TRAINER_JACK) if(NOT UNEXPECTED_SHUTDOWN) add_definitions(-DNO_UNEXPECTED_SHUTDOWN) @@ -186,6 +187,7 @@ if(BLUETOOTH) add_definitions(-DBLUETOOTH) set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/bluetooth_driver.cpp) set(SRC ${SRC} bluetooth.cpp) + add_definitions(-DHARDWARE_TRAINER_BLUETOOTH) endif() if (AUX_SERIAL) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 44b2e81ca..b3a34ddd8 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -407,7 +407,7 @@ #define AUX_SERIAL_DMA_Channel_RX DMA_Channel_5 #define AUX_SERIAL_PWR_GPIO GPIOB #define AUX_SERIAL_PWR_GPIO_PIN GPIO_Pin_0 // PB.00 - #define TRAINER_BATTERY_COMPARTMENT + #define HARDWARE_TRAINER_AUX_SERIAL #define AUX2_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define AUX2_SERIAL_PWR_GPIO GPIOA diff --git a/radio/src/targets/nv14/CMakeLists.txt b/radio/src/targets/nv14/CMakeLists.txt index 4090e76cb..ed410b3cc 100644 --- a/radio/src/targets/nv14/CMakeLists.txt +++ b/radio/src/targets/nv14/CMakeLists.txt @@ -16,6 +16,7 @@ set(GUI_DIR colorlcd) set(BITMAPS_DIR 480x272) # set(NAVIGATION_TYPE touch) set(TARGET_DIR nv14) +add_definitions(-DHARDWARE_TRAINER_JACK) if(BOOTLOADER) set(LINKER_SCRIPT targets/nv14/stm32f4_flash_bootloader.ld) diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index 952e48282..4ebf7115e 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -215,6 +215,9 @@ void calcConsumption(); #define TRAINER_CONNECTED() (PIOA->PIO_PDSR & PIO_PA8) void init_trainer_capture(); void stop_trainer_capture(); +#define TRAINER_DETECT_GPIO PIOA +#define TRAINER_DETECT_GPIO_PIN PIO_PA8 +#define TRAINER_CONNECTED() (TRAINER_DETECT_GPIO->PIO_PDSR & TRAINER_DETECT_GPIO_PIN) // Write Flash driver #define FLASH_PAGESIZE 256 diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 748e770c0..489360425 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -281,6 +281,10 @@ elseif(PCB STREQUAL XLITES) set(INTERNAL_MODULE_SERIAL YES) endif() +if(NOT PCB STREQUAL PCBXLITE) + add_definitions(-DHARDWARE_TRAINER_JACK) +endif() + if(GYRO) add_definitions(-DGYRO) set(TARGET_SRC @@ -326,6 +330,10 @@ if(BLUETOOTH) ${SRC} bluetooth.cpp ) + if(NOT PCB STREQUAL X9E) + # Bluetooth on X9E is compatible with almost nothing + add_definitions(-DHARDWARE_TRAINER_BLUETOOTH) + endif() endif() if(AUTOUPDATE) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index b8d1c7177..9787d28f1 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -1233,6 +1233,7 @@ #endif // Trainer Port +#define HARDWARE_TRAINER_EXTERNAL_MODULE #if defined(PCBXLITES) || defined(PCBX9LITE) // on these 2 radios the trainer port already uses DMA1_Stream6, we won't use the DMA #define TRAINER_RCC_AHB1Periph RCC_AHB1Periph_GPIOD @@ -1311,7 +1312,7 @@ #define AUX_SERIAL_RCC_APB1Periph 0 #define AUX_SERIAL_RCC_APB2Periph 0 #else - #define TRAINER_BATTERY_COMPARTMENT + #define HARDWARE_TRAINER_AUX_SERIAL #define AUX_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define AUX_SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 #define AUX_SERIAL_RCC_APB2Periph 0 diff --git a/radio/src/trainer.cpp b/radio/src/trainer.cpp index d9e3f4a10..e434b307b 100644 --- a/radio/src/trainer.cpp +++ b/radio/src/trainer.cpp @@ -87,7 +87,7 @@ void checkTrainerSettings() break; #endif -#if defined(TRAINER_BATTERY_COMPARTMENT) +#if defined(HARDWARE_TRAINER_AUX_SERIAL) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: auxSerialStop(); break; @@ -113,7 +113,7 @@ void checkTrainerSettings() break; #endif -#if defined(TRAINER_BATTERY_COMPARTMENT) +#if defined(HARDWARE_TRAINER_AUX_SERIAL) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) auxSerialSbusInit(); diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index e873ae417..b19f01607 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -357,6 +357,7 @@ #define TR_VTMRMODES "OFF\0""ON\0 ""Strt""THs\0""TH%\0""THt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 33f2f4c94..0039da53c 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -348,6 +348,7 @@ #define TR_VTMRMODES "VYP\0""ZAP\0""Pln>""Pln%""Pln*" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Učitel/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Žák/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Učitel/SBUS Modul\0" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index fe11e08f3..7fec7bb00 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -354,6 +354,7 @@ #define TR_VTMRMODES "AUS""EIN""GSs""GS%""GSt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Lehrer/Buchse\0 " #define TR_VTRAINER_SLAVE_JACK "Schüler/Buchse\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Lehrer/SBUS Modul\0" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index f3af3d5be..327c171ea 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -354,6 +354,7 @@ #define TR_VTMRMODES "OFF\0""ON\0 ""Strt""THs\0""TH%\0""THt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 4b9aba50e..7580dee8a 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -369,6 +369,7 @@ #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Esclav/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index cf555a465..8285e3fa8 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -369,6 +369,7 @@ #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 4f49e2678..fada9b386 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -371,6 +371,7 @@ #define TR_VTMRMODES "OFF""ON\0""GZs""GZ%""GZt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Maître/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Elève/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Maître/SBUS Module" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 58f945cd2..58b80dc9e 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -376,6 +376,7 @@ #define TR_VTMRMODES "OFF""ABS""MOs""MO%""MOt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Maestro/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Allievo/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/Modulo SBUS" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 6e06ff4b9..766aa9df0 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -351,6 +351,7 @@ #define TR_VTMRMODES "UIT""AAN""THs""TH%""THt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 509dc031a..651c9d84e 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -371,7 +371,8 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "WYŁ""ABS""THs""TH%""THt" -#define LEN_VTRAINERMODES "\022" /*18 decimal*/ +#define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " /*18 decimal*/ #define TR_VTRAINER_MASTER_JACK "Trener/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Uczeń/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Trener/SBUS Moduł " diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index c8b12d8d7..422ec03d1 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -354,6 +354,7 @@ #define TR_VTMRMODES "OFF""ABS""MTs""MT%""MTt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " #define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index de9bb5e12..1fb2b511f 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -370,6 +370,7 @@ #define TR_VTMRMODES "Av\0""På\0""GAs""GA%""GAt" #define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_OFF "Off\0 " #define TR_VTRAINER_MASTER_JACK "Lärare/Uttag\0 " #define TR_VTRAINER_SLAVE_JACK "Elev./Uttag\0 " #define TR_VTRAINER_MASTER_SBUS_MODULE "Lärare/SBUS-Modul\0" diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index f008b1a7c..c909a8154 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -71,7 +71,9 @@ #define TR_VSWITCHES "---" "ID0""ID1""ID2" "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_ON_ONE_SWITCHES #endif -#if defined(PCBHORUS) && defined(AUX_SERIAL) +#if defined(PCBNV14) + #define TR_VTRAINERMODES TR_VTRAINER_MASTER_OFF TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_BLUETOOTH TR_VTRAINER_MULTI +#elif defined(PCBHORUS) && defined(AUX_SERIAL) #define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH TR_VTRAINER_MULTI #elif defined(PCBHORUS) #define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_BLUETOOTH TR_VTRAINER_MULTI