Merge pull request #676 from opentx/driver33/PL_Translation

Fixes (reverted from commit 1a6832c83a)
This commit is contained in:
Kjell Kernen
2014-02-10 20:41:29 +01:00
17 changed files with 13363 additions and 23225 deletions
+24 -24
View File
@@ -759,122 +759,122 @@ This is used by the templated to determine which channel goes to what number out
</property>
<item>
<property name="text">
<string notr="true">R E T A</string>
<string>R E T A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R E A T</string>
<string>R E A T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R T E A</string>
<string>R T E A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R T A E</string>
<string>R T A E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R A E T</string>
<string>R A E T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R A T E</string>
<string>R A T E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E R T A</string>
<string>E R T A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E R A T</string>
<string>E R A T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E T R A</string>
<string>E T R A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E T A R</string>
<string>E T A R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E A R T</string>
<string>E A R T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E A T R</string>
<string>E A T R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T R E A</string>
<string>T R E A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T R A E</string>
<string>T R A E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T E R A</string>
<string>T E R A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T E A R</string>
<string>T E A R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T A R E</string>
<string>T A R E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T A E R</string>
<string>T A E R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A R E T</string>
<string>A R E T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A R T E</string>
<string>A R T E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A E R T</string>
<string>A E R T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A E T R</string>
<string>A E T R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A T R E</string>
<string>A T R E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A T E R</string>
<string>A T E R</string>
</property>
</item>
</widget>
+24 -24
View File
@@ -388,122 +388,122 @@ This is used by the templated to determine which channel goes to what number out
</property>
<item>
<property name="text">
<string notr="true">R E T A</string>
<string>R E T A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R E A T</string>
<string>R E A T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R T E A</string>
<string>R T E A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R T A E</string>
<string>R T A E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R A E T</string>
<string>R A E T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">R A T E</string>
<string>R A T E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E R T A</string>
<string>E R T A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E R A T</string>
<string>E R A T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E T R A</string>
<string>E T R A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E T A R</string>
<string>E T A R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E A R T</string>
<string>E A R T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">E A T R</string>
<string>E A T R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T R E A</string>
<string>T R E A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T R A E</string>
<string>T R A E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T E R A</string>
<string>T E R A</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T E A R</string>
<string>T E A R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T A R E</string>
<string>T A R E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">T A E R</string>
<string>T A E R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A R E T</string>
<string>A R E T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A R T E</string>
<string>A R T E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A E R T</string>
<string>A E R T</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A E T R</string>
<string>A E T R</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A T R E</string>
<string>A T R E</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">A T E R</string>
<string>A T E R</string>
</property>
</item>
</widget>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+120 -27
View File
@@ -133,6 +133,30 @@ PACK(typedef struct {
gvar_t gvars[5];
}) PhaseData_v215;
PACK(typedef struct {
int16_t v1;
int16_t v2;
uint8_t func;
uint8_t delay;
uint8_t duration;
int8_t andsw;
}) LogicalSwitchData_v215;
PACK(typedef struct {
int8_t swtch;
uint8_t func;
PACK(union {
char name[LEN_CFN_NAME];
struct {
int16_t val;
int16_t ext1;
int16_t ext2;
} composite;
}) param;
uint8_t mode:2;
uint8_t active:6;
}) CustomFnData_v215;
PACK(typedef struct {
FrSkyChannelData channels[2];
uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh, 3=Halcyon
@@ -170,8 +194,8 @@ PACK(typedef struct {
int16_t curves[16];
int8_t points[NUM_POINTS];
LogicalSwitchData customSw[NUM_CSW];
CustomFnData funcSw[NUM_CFN];
LogicalSwitchData_v215 customSw[NUM_CSW];
CustomFnData_v215 funcSw[NUM_CFN];
SwashRingData swashR;
PhaseData_v215 phaseData[MAX_PHASES];
@@ -379,75 +403,144 @@ void ConvertModel_215_to_216(ModelData &model)
g_model.points[i] = oldModel.points[i];
}
for (uint8_t i=0; i<32; i++) {
g_model.customSw[i] = oldModel.customSw[i];
LogicalSwitchData & sw = g_model.customSw[i];
sw.func = oldModel.customSw[i].func;
if (sw.func >= LS_FUNC_RANGE) sw.func += 1;
if (sw.func >= LS_FUNC_STAY) sw.func += 1;
sw.v1 = oldModel.customSw[i].v1;
sw.v2 = oldModel.customSw[i].v2;
sw.delay = oldModel.customSw[i].delay;
sw.duration = oldModel.customSw[i].duration;
sw.andsw = oldModel.customSw[i].andsw;
#if defined(PCBTARANIS)
LogicalSwitchData * cs = &g_model.customSw[i];
uint8_t cstate = cswFamily(cs->func);
uint8_t cstate = cswFamily(sw.func);
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) {
if (cs->v1 > 0) cs->v1 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
if (cs->v1 > MIXSRC_GVAR1+4) cs->v1 += 4;
if (sw.v1 > 0) sw.v1 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
if (sw.v1 > MIXSRC_GVAR1+4) sw.v1 += 4;
}
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_DIFF) {
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
switch ((uint8_t)cs->v1) {
if (sw.v1 >= MIXSRC_FIRST_TELEM) {
switch ((uint8_t)sw.v1) {
case MIXSRC_FIRST_TELEM + TELEM_TM1-1:
case MIXSRC_FIRST_TELEM + TELEM_TM2-1:
cs->v2 = (cs->v2+128) * 3;
sw.v2 = (sw.v2+128) * 3;
break;
case MIXSRC_FIRST_TELEM + TELEM_ALT-1:
case MIXSRC_FIRST_TELEM + TELEM_GPSALT-1:
case MIXSRC_FIRST_TELEM + TELEM_MIN_ALT-1:
case MIXSRC_FIRST_TELEM + TELEM_MAX_ALT-1:
cs->v2 = (cs->v2+128) * 8 - 500;
sw.v2 = (sw.v2+128) * 8 - 500;
break;
case MIXSRC_FIRST_TELEM + TELEM_RPM-1:
case MIXSRC_FIRST_TELEM + TELEM_MAX_RPM-1:
cs->v2 = (cs->v2+128) * 50;
sw.v2 = (sw.v2+128) * 50;
break;
case MIXSRC_FIRST_TELEM + TELEM_T1-1:
case MIXSRC_FIRST_TELEM + TELEM_T2-1:
case MIXSRC_FIRST_TELEM + TELEM_MAX_T1-1:
case MIXSRC_FIRST_TELEM + TELEM_MAX_T2-1:
cs->v2 = (cs->v2+128) + 30;
sw.v2 = (sw.v2+128) + 30;
break;
case MIXSRC_FIRST_TELEM + TELEM_CELL-1:
case MIXSRC_FIRST_TELEM + TELEM_HDG-1:
cs->v2 = (cs->v2+128) * 2;
sw.v2 = (sw.v2+128) * 2;
break;
case MIXSRC_FIRST_TELEM + TELEM_DIST-1:
case MIXSRC_FIRST_TELEM + TELEM_MAX_DIST-1:
cs->v2 = (cs->v2+128) * 8;
sw.v2 = (sw.v2+128) * 8;
break;
case MIXSRC_FIRST_TELEM + TELEM_CURRENT-1:
case MIXSRC_FIRST_TELEM + TELEM_POWER-1:
cs->v2 = (cs->v2+128) * 5;
sw.v2 = (sw.v2+128) * 5;
break;
case MIXSRC_FIRST_TELEM + TELEM_CONSUMPTION-1:
cs->v2 = (cs->v2+128) * 20;
sw.v2 = (sw.v2+128) * 20;
break;
default:
cs->v2 += 128;
sw.v2 += 128;
break;
}
}
}
if (cstate == LS_FAMILY_COMP) {
if (cs->v2 > 0) cs->v2 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
if (cs->v2 > MIXSRC_GVAR1+4) cs->v2 += 4;
if (sw.v2 > 0) sw.v2 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
if (sw.v2 > MIXSRC_GVAR1+4) sw.v2 += 4;
}
#endif
}
for (uint8_t i=0; i<32; i++) {
g_model.funcSw[i] = oldModel.funcSw[i];
CustomFnData *sd = &g_model.funcSw[i];
if (CFN_FUNC(sd) == FUNC_PLAY_VALUE || CFN_FUNC(sd) == FUNC_VOLUME || (IS_ADJUST_GV_FUNC(CFN_FUNC(sd)) && CFN_GVAR_MODE(sd) == FUNC_ADJUST_GVAR_SOURCE)) {
CustomFnData & fn = g_model.funcSw[i];
fn.swtch = oldModel.funcSw[i].swtch;
fn.func = oldModel.funcSw[i].func;
if (fn.func <= 15) {
fn.all.param = fn.func;
fn.func = FUNC_SAFETY_CHANNEL;
}
else if (fn.func <= 20) {
fn.all.param = fn.func - 16;
fn.func = FUNC_TRAINER;
}
else if (fn.func == 21) {
fn.func = FUNC_INSTANT_TRIM;
}
else if (fn.func == 22) {
fn.func = FUNC_PLAY_SOUND;
}
#if defined(PCBSKY9X)
else if (fn.func == 23) {
fn.func = FUNC_HAPTIC;
}
#endif
else if (fn.func == 23+IS_PCBSKY9X) {
fn.func = FUNC_RESET;
}
else if (fn.func == 24+IS_PCBSKY9X) {
fn.func = FUNC_VARIO;
}
else if (fn.func == 25+IS_PCBSKY9X) {
fn.func = FUNC_PLAY_TRACK;
}
else if (fn.func == 26+IS_PCBSKY9X) {
fn.func = FUNC_PLAY_VALUE;
}
else if (fn.func == 27+IS_PCBSKY9X) {
fn.func = FUNC_LOGS;
}
else if (fn.func == 28+IS_PCBSKY9X) {
fn.func = FUNC_VOLUME;
}
else if (fn.func == 29+IS_PCBSKY9X) {
fn.func = FUNC_BACKLIGHT;
}
else if (fn.func == 30+IS_PCBSKY9X) {
fn.func = FUNC_BACKGND_MUSIC;
}
else if (fn.func == 31+IS_PCBSKY9X) {
fn.func = FUNC_BACKGND_MUSIC_PAUSE;
}
else {
fn.all.param = fn.func - 32 - IS_PCBSKY9X;
fn.all.mode = oldModel.funcSw[i].mode;
fn.func = FUNC_ADJUST_GVAR;
}
fn.active = oldModel.funcSw[i].active;
if (HAS_REPEAT_PARAM(fn.func)) {
fn.active *= 5;
}
if (fn.func == FUNC_PLAY_TRACK || fn.func == FUNC_BACKGND_MUSIC) {
memcpy(fn.play.name, oldModel.funcSw[i].param.name, LEN_CFN_NAME);
}
else {
fn.all.val = oldModel.funcSw[i].param.composite.val;
}
if (fn.func == FUNC_PLAY_VALUE || fn.func == FUNC_VOLUME || (IS_ADJUST_GV_FUNC(fn.func) && fn.all.mode == FUNC_ADJUST_GVAR_SOURCE)) {
#if defined(PCBTARANIS)
CFN_PARAM(sd) += 1 + MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
fn.all.param += 1 + MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS;
#endif
if (CFN_PARAM(sd) > MIXSRC_GVAR1+4) CFN_PARAM(sd) += 4;
if (fn.all.param > MIXSRC_GVAR1+4) fn.all.param += 4;
}
if (HAS_REPEAT_PARAM(sd))
CFN_PLAY_REPEAT(sd) *= 5;
}
g_model.swashR = oldModel.swashR;
+3 -3
View File
@@ -160,8 +160,8 @@ enum menuGeneralSetupItems {
ITEM_SETUP_CONTRAST,
ITEM_SETUP_ALARMS_LABEL,
ITEM_SETUP_BATTERY_WARNING,
IF_PCBSKY9X(ITEM_SETUP_CAPACITY_WARNING)
IF_PCBSKY9X(ITEM_SETUP_TEMPERATURE_WARNING)
CASE_PCBSKY9X(ITEM_SETUP_CAPACITY_WARNING)
CASE_PCBSKY9X(ITEM_SETUP_TEMPERATURE_WARNING)
ITEM_SETUP_INACTIVITY_ALARM,
ITEM_SETUP_MEMORY_WARNING,
ITEM_SETUP_ALARM_WARNING,
@@ -211,7 +211,7 @@ void menuGeneralSetup(uint8_t event)
}
#endif
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/});
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/});
uint8_t sub = m_posVert - 1;
+4 -3
View File
@@ -976,7 +976,7 @@ void menuModelSetup(uint8_t event)
#define MODEL_SETUP_MAX_LINES ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX)
uint8_t protocol = g_model.protocol;
MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) 2, IF_PERSISTENT_TIMERS(0) 0, 0, 2, IF_PERSISTENT_TIMERS(0) 0, 0, 0, 1, 0, 0, 0, 0, 0, 6, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, FIELD_PROTOCOL_MAX, 2, IF_PCBSKY9X(1) IF_PCBSKY9X(2) });
MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) 2, IF_PERSISTENT_TIMERS(0) 0, 0, 2, IF_PERSISTENT_TIMERS(0) 0, 0, 0, 1, 0, 0, 0, 0, 0, 6, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, FIELD_PROTOCOL_MAX, 2, CASE_PCBSKY9X(1) CASE_PCBSKY9X(2) });
#endif
if (!MENU_CHECK(menuTabModel, e_ModelSetup, MODEL_SETUP_MAX_LINES)) {
@@ -1163,7 +1163,6 @@ void menuModelSetup(uint8_t event)
switch(event) {
CASE_EVT_ROTARY_BREAK
case EVT_KEY_BREAK(KEY_ENTER):
killEvents(event);
#if defined(CPUM64)
g_model.nSwToWarn ^= (1 << m_posHorz);
eeDirty(EE_MODEL);
@@ -1190,10 +1189,12 @@ void menuModelSetup(uint8_t event)
eeDirty(EE_MODEL);
}
#endif
killEvents(event);
break;
}
}
}
LcdFlags line = attr;
for (uint8_t i=0; i<NUM_SWITCHES-1; i++) {
@@ -5092,7 +5093,7 @@ void menuModelCustomFunctions(uint8_t event)
menu_lcd_onoff(MODEL_CUSTOM_FUNC_4TH_COLUMN_ONOFF, y, CFN_ACTIVE(sd), attr);
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_ACTIVE(sd), 1);
}
else if (HAS_REPEAT_PARAM(sd)) {
else if (HAS_REPEAT_PARAM(func)) {
if (CFN_PLAY_REPEAT(sd) == 0) {
#if LCD_W >= 212
lcd_putsAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, "1x", attr);
+2 -2
View File
@@ -775,9 +775,9 @@ enum Functions {
#endif
#if defined(VOICE)
#define HAS_REPEAT_PARAM(sd) (CFN_FUNC(sd) == FUNC_PLAY_SOUND || (CFN_FUNC(sd) >= FUNC_PLAY_TRACK && CFN_FUNC(sd) <= FUNC_PLAY_VALUE))
#define HAS_REPEAT_PARAM(func) (func == FUNC_PLAY_SOUND || (func >= FUNC_PLAY_TRACK && func <= FUNC_PLAY_VALUE))
#else
#define HAS_REPEAT_PARAM(sd) (CFN_FUNC(sd) == FUNC_PLAY_SOUND)
#define HAS_REPEAT_PARAM(func) (func == FUNC_PLAY_SOUND)
#endif
enum ResetFunctionParam {
+4 -2
View File
@@ -45,9 +45,11 @@
// TODO change all IF_xxx by CASE_xxx when used with a comma!
#if defined(PCBSKY9X)
#define IF_PCBSKY9X(x) x,
#define IS_PCBSKY9X true
#define CASE_PCBSKY9X(x) x,
#else
#define IF_PCBSKY9X(x)
#define IS_PCBSKY9X false
#define CASE_PCBSKY9X(x)
#endif
#if defined(PCBTARANIS)
+3 -3
View File
@@ -215,7 +215,7 @@
#ifdef GVARS
#define TR_CFN_ADJUST_GVAR "Ustaw \0 "
#else
#define TR_CFN_ADJUST_GVAR "[AdjustGV]\0"
#define TR_CFN_ADJUST_GVAR "[UstawZG]\0"
#endif
#ifdef DEBUG
@@ -364,9 +364,9 @@
#define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26"
#define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW
#elif defined(CPUARM)
#define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW
#define TR_VSWITCHES TR_9X_3POS_SWITCHES "GAZ""SK""SW""LOL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW
#else
#define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW
#define TR_VSWITCHES TR_9X_3POS_SWITCHES "GAZ""SK""SW""LOT""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW
#endif
#if defined(HELI)