Trainer UI (#7423)

Trainer UI
This commit is contained in:
3djc
2020-03-06 15:47:34 +01:00
committed by GitHub
parent 766211a6f3
commit 2fb3d977a9
29 changed files with 175 additions and 66 deletions
+3 -3
View File
@@ -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})
+2 -14
View File
@@ -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
+1 -2
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+88 -1
View File
@@ -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<int8_t>(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<int8_t>(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());
}
+39 -30
View File
@@ -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()
+1 -1
View File
@@ -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
+4 -7
View File
@@ -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)
+2
View File
@@ -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)
+1 -1
View File
@@ -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
+1
View File
@@ -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)
+3
View File
@@ -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
+8
View File
@@ -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)
+2 -1
View File
@@ -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
+2 -2
View File
@@ -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();
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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"
+2 -1
View File
@@ -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ł "
+1
View File
@@ -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"
+1
View File
@@ -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"
+3 -1
View File
@@ -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