Set all custom failsafe channels at once (#5834)

* added setCustomFailsafe()

* failsafe setup: set all custom channels with ENTER long press

implements #5820

* added “outputs -> failsafe” menu item on horus

* change “Trims >> Subtrims” to “Trims => Subtrims”

* use translated string for “Outputs => Failsafe”

* fixed entered TR_TRIMS2OFFSETS and TR_OUTPUTS2FAILSAFE

When using ZCHARs in Horus texts, there are some artefacts when highlighted.

* added “outputs -> failsafe” menu item on taranis 212x64 LCD

* added “outputs -> failsafe” menu item on taranis 128x64 LCD

* fixed indentation
This commit is contained in:
Raphael Coeffic
2018-04-24 08:13:09 +02:00
committed by Bertrand Songis
parent 4f8f00c4e2
commit 2ad0db2d80
19 changed files with 235 additions and 89 deletions
+1 -11
View File
@@ -379,17 +379,7 @@ void evalFunctions()
case FUNC_SET_FAILSAFE:
{
unsigned int moduleIndex = CFN_PARAM(cfn);
if (moduleIndex < NUM_MODULES) {
for (int ch=0; ch<MAX_OUTPUT_CHANNELS; ch++) {
if (ch < g_model.moduleData[moduleIndex].channelsStart || ch >= NUM_CHANNELS(moduleIndex) + g_model.moduleData[moduleIndex].channelsStart) {
g_model.moduleData[moduleIndex].failsafeChannels[ch] = 0;
}
else if (g_model.moduleData[moduleIndex].failsafeChannels[ch] < FAILSAFE_CHANNEL_HOLD) {
g_model.moduleData[moduleIndex].failsafeChannels[ch] = channelOutputs[ch];
}
}
}
setCustomFailsafe(CFN_PARAM(cfn));
}
#if defined(DANGEROUS_MODULE_FUNCTIONS)
+45 -24
View File
@@ -1200,9 +1200,18 @@ void menuModelSetup(event_t event)
}
} else if (menuHorizontalPosition == 1) {
s_editMode = 0;
if (moduleData.failsafeMode == FAILSAFE_CUSTOM && event == EVT_KEY_FIRST(KEY_ENTER)) {
g_moduleIdx = moduleIdx;
pushMenu(menuModelFailsafe);
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) {
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
setCustomFailsafe(moduleIdx);
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(moduleIdx);
}
else if (event == EVT_KEY_BREAK(KEY_ENTER)) {
g_moduleIdx = moduleIdx;
pushMenu(menuModelFailsafe);
}
}
} else {
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN, 8);
@@ -1476,7 +1485,6 @@ void menuModelSetup(event_t event)
#if defined(CPUARM)
void menuModelFailsafe(event_t event)
{
uint8_t ch = 8 * (menuVerticalPosition / 8);
const uint8_t channelStart = g_model.moduleData[g_moduleIdx].channelsStart;
const int lim = (g_model.extendedLimits ? (512 * LIMIT_EXT_PERCENT / 100) : 512) * 2;
uint8_t wbar = LCD_W - FW * 4 - FWNUM * 4;
@@ -1487,37 +1495,44 @@ void menuModelFailsafe(event_t event)
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
event = 0;
if (s_editMode) {
g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition] = channelOutputs[menuVerticalPosition+channelStart];
storageDirty(EE_MODEL);
AUDIO_WARNING1();
s_editMode = 0;
SEND_FAILSAFE_NOW(g_moduleIdx);
if (menuVerticalPosition < NUM_CHANNELS(g_moduleIdx)) {
if (s_editMode) {
g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition] = channelOutputs[menuVerticalPosition+channelStart];
s_editMode = 0;
}
else {
int16_t & failsafe = g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition];
if (failsafe < FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_HOLD;
else if (failsafe == FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_NOPULSE;
else
failsafe = 0;
}
}
else {
int16_t & failsafe = g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition];
if (failsafe < FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_HOLD;
else if (failsafe == FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_NOPULSE;
else
failsafe = 0;
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(g_moduleIdx);
// "Outputs => Failsafe" menu item
setCustomFailsafe(g_moduleIdx);
}
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(g_moduleIdx);
}
SIMPLE_SUBMENU_NOTITLE(NUM_CHANNELS(g_moduleIdx));
SIMPLE_SUBMENU_NOTITLE(NUM_CHANNELS(g_moduleIdx) + 1);
lcdDrawTextAlignedCenter(0, FAILSAFESET);
lcdInvertLine(0);
const coord_t x = 1;
coord_t y = FH + 1;
uint8_t line = (menuVerticalPosition >= NUM_CHANNELS(g_moduleIdx) ? 2 : 0);
uint8_t ch = (menuVerticalPosition >= 8 ? 8 : 0) + line;
// Channels
for (uint8_t line=0; line<8; line++) {
const coord_t y = 9+line*7;
for (; line < 8; line++) {
const int32_t channelValue = channelOutputs[ch+channelStart];
int32_t failsafeValue = g_model.moduleData[g_moduleIdx].failsafeChannels[ch];
@@ -1571,9 +1586,15 @@ void menuModelFailsafe(event_t event)
lcdDrawSolidHorizontalLine(xFailsafe, y+3, lenFailsafe);
lcdDrawSolidHorizontalLine(xFailsafe, y+4, lenFailsafe);
y += FH - 1;
if (++ch >= NUM_CHANNELS(g_moduleIdx))
break;
}
if (menuVerticalPosition >= NUM_CHANNELS(g_moduleIdx)) {
// Outputs => Failsafe
lcdDrawText(CENTER_OFS, LCD_H - (FH + 1), STR_OUTPUTS2FAILSAFE, INVERS);
}
}
#endif
+49 -23
View File
@@ -1079,9 +1079,18 @@ void menuModelSetup(event_t event)
}
else if (menuHorizontalPosition == 1) {
s_editMode = 0;
if (moduleData.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_FIRST(KEY_ENTER)) {
g_moduleIdx = moduleIdx;
pushMenu(menuModelFailsafe);
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) {
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
setCustomFailsafe(moduleIdx);
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(moduleIdx);
}
else if (event == EVT_KEY_BREAK(KEY_ENTER)) {
g_moduleIdx = moduleIdx;
pushMenu(menuModelFailsafe);
}
}
}
else {
@@ -1219,7 +1228,6 @@ void menuModelFailsafe(event_t event)
const coord_t barH = (LCD_H - FH) / 8 - 1;
const int lim = (g_model.extendedLimits ? (512 * LIMIT_EXT_PERCENT / 100) : 512) * 2;
const uint8_t channelStart = g_model.moduleData[g_moduleIdx].channelsStart;
uint8_t ch = 0;
uint8_t cols = 1;
uint8_t colW = LCD_W;
@@ -1231,35 +1239,45 @@ void menuModelFailsafe(event_t event)
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
event = 0;
if (s_editMode) {
g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition] = channelOutputs[menuVerticalPosition+channelStart];
storageDirty(EE_MODEL);
AUDIO_WARNING1();
s_editMode = 0;
SEND_FAILSAFE_NOW(g_moduleIdx);
if (menuVerticalPosition < NUM_CHANNELS(g_moduleIdx)) {
if (s_editMode) {
g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition] = channelOutputs[menuVerticalPosition+channelStart];
s_editMode = 0;
}
else {
int16_t & failsafe = g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition];
if (failsafe < FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_HOLD;
else if (failsafe == FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_NOPULSE;
else
failsafe = 0;
}
}
else {
int16_t & failsafe = g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition];
if (failsafe < FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_HOLD;
else if (failsafe == FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_NOPULSE;
else
failsafe = 0;
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(g_moduleIdx);
// "Outputs => Failsafe" menu item
setCustomFailsafe(g_moduleIdx);
}
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(g_moduleIdx);
}
SIMPLE_SUBMENU_NOTITLE(NUM_CHANNELS(g_moduleIdx));
SIMPLE_SUBMENU_NOTITLE(NUM_CHANNELS(g_moduleIdx)+1);
SET_SCROLLBAR_X(0);
if (NUM_CHANNELS(g_moduleIdx) > 8) {
cols = 2;
colW = LCD_W / cols - 1;
// Column separator
lcdDrawSolidVerticalLine(colW, FH, LCD_H - FH);
if (menuVerticalPosition >= NUM_CHANNELS(g_moduleIdx)) {
lcdDrawSolidVerticalLine(colW, FH, LCD_H - (FH*2 + FH/2 + 2));
}
else {
lcdDrawSolidVerticalLine(colW, FH, LCD_H - FH);
}
}
lcdDrawTextAlignedCenter(0, FAILSAFESET);
@@ -1269,7 +1287,10 @@ void menuModelFailsafe(event_t event)
for (uint8_t col = 0; col < cols; col++) {
coord_t y = FH + 1;
for (uint8_t line = 0; line < 8; line++) {
uint8_t line = (menuVerticalPosition >= NUM_CHANNELS(g_moduleIdx) ? 2 : 0);
uint8_t ch = line + col*8;
for (; line < 8; line++) {
const int32_t channelValue = channelOutputs[ch+channelStart];
int32_t failsafeValue = g_model.moduleData[g_moduleIdx].failsafeChannels[8*col+line];
uint8_t lenLabel = ZLEN(g_model.limitData[ch+channelStart].name);
@@ -1347,4 +1368,9 @@ void menuModelFailsafe(event_t event)
x += colW + 2;
} // columns
if (menuVerticalPosition >= NUM_CHANNELS(g_moduleIdx)) {
// Outputs => Failsafe
lcdDrawText(CENTER_OFS, LCD_H - (FH + 1), STR_OUTPUTS2FAILSAFE, INVERS);
}
}
+41 -23
View File
@@ -999,9 +999,18 @@ bool menuModelSetup(event_t event)
}
else if (menuHorizontalPosition==1) {
s_editMode = 0;
if (moduleData.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_FIRST(KEY_ENTER)) {
g_moduleIdx = moduleIdx;
pushMenu(menuModelFailsafe);
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) {
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
setCustomFailsafe(moduleIdx);
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(moduleIdx);
}
else if (event == EVT_KEY_BREAK(KEY_ENTER)) {
g_moduleIdx = moduleIdx;
pushMenu(menuModelFailsafe);
}
}
}
else {
@@ -1144,34 +1153,39 @@ bool menuModelFailsafe(event_t event)
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
event = 0;
if (s_editMode) {
g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition] = channelOutputs[menuVerticalPosition+channelStart];
storageDirty(EE_MODEL);
AUDIO_WARNING1();
s_editMode = 0;
SEND_FAILSAFE_NOW(g_moduleIdx);
if (menuVerticalPosition < NUM_CHANNELS(g_moduleIdx)) {
if (s_editMode) {
g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition] = channelOutputs[menuVerticalPosition+channelStart];
s_editMode = 0;
}
else {
int16_t & failsafe = g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition];
if (failsafe < FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_HOLD;
else if (failsafe == FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_NOPULSE;
else
failsafe = 0;
}
}
else {
int16_t & failsafe = g_model.moduleData[g_moduleIdx].failsafeChannels[menuVerticalPosition];
if (failsafe < FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_HOLD;
else if (failsafe == FAILSAFE_CHANNEL_HOLD)
failsafe = FAILSAFE_CHANNEL_NOPULSE;
else
failsafe = 0;
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(g_moduleIdx);
// "Outputs => Failsafe" menu item
setCustomFailsafe(g_moduleIdx);
}
storageDirty(EE_MODEL);
AUDIO_WARNING1();
SEND_FAILSAFE_NOW(g_moduleIdx);
}
SIMPLE_SUBMENU_WITH_OPTIONS("FAILSAFE", ICON_STATS_ANALOGS, NUM_CHANNELS(g_moduleIdx), OPTION_MENU_NO_SCROLLBAR);
SIMPLE_SUBMENU_WITH_OPTIONS("FAILSAFE", ICON_STATS_ANALOGS, NUM_CHANNELS(g_moduleIdx)+1, OPTION_MENU_NO_SCROLLBAR);
drawStringWithIndex(50, 3+FH, "Module", g_moduleIdx+1, MENU_TITLE_COLOR);
for (uint8_t col=0; col < cols; col++) {
for (uint8_t line=0; line < 8; line++) {
coord_t x = col*(LCD_W/2);
const coord_t y = MENU_CONTENT_TOP - FH + line*(FH+4);
const coord_t y = MENU_CONTENT_TOP - FH + line*(FH+2);
const int32_t channelValue = channelOutputs[ch+channelStart];
int32_t failsafeValue = g_model.moduleData[g_moduleIdx].failsafeChannels[8*col+line];
@@ -1230,9 +1244,13 @@ bool menuModelFailsafe(event_t event)
lcdDrawSolidFilledRect(xChannel, y+4, lenChannel, 5, TEXT_COLOR);
lcdDrawSolidFilledRect(xFailsafe, y+9, lenFailsafe, 5, ALARM_COLOR);
if (++ch >= NUM_CHANNELS(g_moduleIdx))
break;
if (++ch >= NUM_CHANNELS(g_moduleIdx)) {
// draw that menu at the bottom center
flags = CENTERED | (menuVerticalPosition == ch ? INVERS : 0);
lcdDrawSizedText(LCD_W/2, MENU_CONTENT_TOP - FH + 8*(FH+2), STR_OUTPUTS2FAILSAFE, 20, flags);
break;
}
}
}
+14
View File
@@ -264,3 +264,17 @@ void setupPulses(uint8_t port)
}
}
}
void setCustomFailsafe(uint8_t moduleIndex)
{
if (moduleIndex < NUM_MODULES) {
for (int ch=0; ch<MAX_OUTPUT_CHANNELS; ch++) {
if (ch < g_model.moduleData[moduleIndex].channelsStart || ch >= NUM_CHANNELS(moduleIndex) + g_model.moduleData[moduleIndex].channelsStart) {
g_model.moduleData[moduleIndex].failsafeChannels[ch] = 0;
}
else if (g_model.moduleData[moduleIndex].failsafeChannels[ch] < FAILSAFE_CHANNEL_HOLD) {
g_model.moduleData[moduleIndex].failsafeChannels[ch] = channelOutputs[ch];
}
}
}
}
+4
View File
@@ -181,6 +181,10 @@ inline void SEND_FAILSAFE_1S()
}
}
// Assign failsafe values using the current channel outputs
// for channels not set previously to HOLD or NOPULSE
void setCustomFailsafe(uint8_t moduleIndex);
#define LEN_R9M_MODES "\007"
#define TR_R9M_MODES "FCC\0 ""LBT(EU)"
#define LEN_R9M_FCC_POWER_VALUES "\006"
+1
View File
@@ -315,6 +315,7 @@ const pm_char STR_THROTTLENOTIDLE[] PROGMEM = TR_THROTTLENOTIDLE;
const pm_char STR_ALARMSDISABLED[] PROGMEM = TR_ALARMSDISABLED;
const pm_char STR_PRESSANYKEY[] PROGMEM = TR_PRESSANYKEY;
const pm_char STR_TRIMS2OFFSETS[] PROGMEM = TR_TRIMS2OFFSETS;
const pm_char STR_OUTPUTS2FAILSAFE[] PROGMEM = TR_OUTPUTS2FAILSAFE;
const pm_char STR_MENURADIOSETUP[] PROGMEM = TR_MENURADIOSETUP;
#if defined(EEPROM)
+1
View File
@@ -573,6 +573,7 @@ extern const pm_char STR_BAD_RADIO_DATA[];
extern const pm_char STR_STORAGE_FORMAT[];
extern const pm_char STR_EEPROMOVERFLOW[];
extern const pm_char STR_TRIMS2OFFSETS[];
extern const pm_char STR_OUTPUTS2FAILSAFE[];
extern const pm_char STR_MENURADIOSETUP[];
extern const pm_char STR_MENUDATEANDTIME[];
extern const pm_char STR_MENUTRAINER[];
+6 -1
View File
@@ -806,10 +806,15 @@
#define TR_MENU_RADIO_ANALOGS "ANALOGY"
#define TR_MENUCALIBRATION "KALIBRACE"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "\006Trimy => Subtrimy"
#define TR_TRIMS2OFFSETS "Trimy => Subtrimy"
#else
#define TR_TRIMS2OFFSETS "\006Trimy => Subtrimy"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL "MODEL"
#define TR_MENUSETUP "NASTAVENÍ"
#define TR_MENUFLIGHTMODE "LETOVÝ REŽIM"
+5
View File
@@ -825,6 +825,11 @@
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("MODELLE", "MODELL WÄHLEN")
#define TR_MENUSETUP TR("MODELL-EINSTELLUNG", "MODELL-EINSTELLUNGEN")
#define TR_MENUFLIGHTMODE "FLUGPHASE"
+6 -1
View File
@@ -815,10 +815,15 @@
#define TR_MENU_RADIO_ANALOGS TR("ANALOGS", "ANALOGS TEST")
#define TR_MENUCALIBRATION "CALIBRATION"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims >> Subtrims"
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("MODELSEL", "MODEL SELECTION")
#define TR_MENUSETUP TR("SETUP", "MODEL SETUP")
#define TR_MENUFLIGHTMODES "FLIGHT MODES"
+10 -1
View File
@@ -796,7 +796,16 @@
#define TR_MENU_RADIO_SWITCHES TR("INTERUPTS", "TEST INTERUP.")
#define TR_MENU_RADIO_ANALOGS TR("ANAS", "ENTRADAS ANALOG")
#define TR_MENUCALIBRATION "CALIBRACION"
#define TR_TRIMS2OFFSETS "\006Trims => Offsets"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Offsets"
#else
#define TR_TRIMS2OFFSETS "\006Trims => Offsets"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("MODELSEL", "SELECCION MODELO")
#define TR_MENUSETUP TR("CONF.", "CONF.MODELO")
#define TR_MENUFLIGHTMODE "MODO VUELO"
+10 -1
View File
@@ -792,7 +792,16 @@
#define TR_MENU_RADIO_SWITCHES TR("SWITCHES","SWITCH TEST")
#define TR_MENU_RADIO_ANALOGS TR("ANAS","ANALOG INPUTS")
#define TR_MENUCALIBRATION "CALIBRATION"
#define TR_TRIMS2OFFSETS "\006Trims => Offsets"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("MODELSEL","MODEL SELECTION")
#define TR_MENUSETUP TR("SETUP","MODEL SETUP")
#define TR_MENUFLIGHTMODE "FLIGHT MODE"
+10 -1
View File
@@ -825,7 +825,16 @@
#define TR_MENU_RADIO_SWITCHES TR("INTERS", "TEST INTERRUPTEURS")
#define TR_MENU_RADIO_ANALOGS TR("ANAS", "ENTREES ANALOGIQUES")
#define TR_MENUCALIBRATION "CALIBRATION"
#define TR_TRIMS2OFFSETS "\005Trims => Subtrims"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL "MODELES"
#define TR_MENUSETUP TR("CONF. MODELE", "CONFIGURATION")
#define TR_MENUFLIGHTMODE "PHASE DE VOL"
+6 -1
View File
@@ -816,10 +816,15 @@
#define TR_MENU_RADIO_ANALOGS "ANAS"
#define TR_MENUCALIBRATION "CALIBRAZIONE"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims >> Subtrims"
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
#define TR_TRIMS2OFFSETS "\006Trim => Offset "
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL "MODELLI"
#define TR_MENUSETUP "CONFIGURA"
#define TR_MENUFLIGHTMODE "FASE DI VOLO"
+5
View File
@@ -811,6 +811,11 @@
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("MODELLEN", "MODEL KIEZEN")
#define TR_MENUSETUP TR("MODEL-INSTELLING", "MODEL-INSTELLINGEN")
#define TR_MENUFLIGHTMODES "VLIEGFASES"
+6 -1
View File
@@ -818,10 +818,15 @@
#define TR_MENU_RADIO_ANALOGS TR("WE-ANA","WEJŚCIA ANALOG.")
#define TR_MENUCALIBRATION "KALIBRACJA"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trymery >> Subtrimy"
#define TR_TRIMS2OFFSETS "Trymery => Subtrimy"
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("WYB.MODEL","WYBÓR MODELU")
#define TR_MENUSETUP TR("USTAW","USTAW MODELU")
#define TR_MENUFLIGHTMODE "FAZA LOTU"
+10 -1
View File
@@ -799,7 +799,16 @@
#define TR_MENU_RADIO_SWITCHES "DIAGNOST"
#define TR_MENU_RADIO_ANALOGS "ANALOGICOS"
#define TR_MENUCALIBRATION "CALIBRAGEM"
#define TR_TRIMS2OFFSETS "\006Trims => Offsets"
#if defined(COLORLCD)
#define TR_TRIMS2OFFSETS "Trims => Subtrims"
#else
#define TR_TRIMS2OFFSETS "\006Trims => Subtrims"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL "MODELOS"
#define TR_MENUSETUP "SETUP"
#define TR_MENUFLIGHTMODE "MODO DE VOO"
+5
View File
@@ -829,6 +829,11 @@
#else
#define TR_TRIMS2OFFSETS "\006[Spara Trimvärden]"
#endif
#if defined(COLORLCD)
#define TR_OUTPUTS2FAILSAFE "Outputs => Failsafe"
#else
#define TR_OUTPUTS2FAILSAFE "\006Outputs => Failsafe"
#endif
#define TR_MENUMODELSEL TR("MODELL","VÄLJ MODELL")
#define TR_MENUSETUP TR("VÄRDEN","MODELLINSTÄLLNINGAR")
#define TR_MENUFLIGHTMODE "FLYGLÄGE"