mirror of
https://github.com/opentx/opentx.git
synced 2025-07-25 09:15:38 +03:00
[all] Spanish language added
[all] Groups / Indentation added in Radio Settings [all] Rework on GVARS
This commit is contained in:
parent
93eafc667a
commit
e4f45398df
16 changed files with 862 additions and 251 deletions
10
src/Makefile
10
src/Makefile
|
@ -159,7 +159,7 @@ DSM2 = NO
|
|||
IRPROTOS = NO
|
||||
|
||||
# TRANSLATIONS
|
||||
# Values = cz, de, en, fr, it, se
|
||||
# Values = cz, de, en, fr, it, se, es
|
||||
TRANSLATIONS = EN
|
||||
|
||||
# TTS
|
||||
|
@ -560,7 +560,7 @@ ifeq ($(PCB), STD)
|
|||
# STD PCB, so ...
|
||||
OPT = s
|
||||
EXTRAINCDIRS += stock
|
||||
CPPDEFS += -DPCBSTD -DVARIANT=$(shell echo ${VARIANT} | bc)
|
||||
CPPDEFS += -DPCBSTD -DM64 -DVARIANT=$(shell echo ${VARIANT} | bc)
|
||||
BOARDSRC = board_stock.cpp
|
||||
EEPROMSRC = eeprom_avr.cpp
|
||||
PULSESSRC = pulses_avr.cpp
|
||||
|
@ -754,7 +754,7 @@ arm-stamp:
|
|||
@echo "#define SVN_VERS \"open9x-r$(SVNREV)\"" >> stamp-open9x-arm.txt
|
||||
@cat stamp-open9x-arm.txt
|
||||
|
||||
font.lbm: font_6x1.xbm
|
||||
font.lbm: font_6x1.xbm translations/font_se.xbm translations/font_de.xbm translations/font_it.xbm translations/font_cz.xbm translations/font_fr.xbm translations/font_es.xbm
|
||||
@echo
|
||||
@echo "Convert font from xbm to lbm:"
|
||||
$(IMG2LBM) $< $@ char
|
||||
|
@ -763,8 +763,9 @@ font.lbm: font_6x1.xbm
|
|||
$(IMG2LBM) translations/font_it.xbm translations/font_it.lbm char
|
||||
$(IMG2LBM) translations/font_cz.xbm translations/font_cz.lbm char
|
||||
$(IMG2LBM) translations/font_fr.xbm translations/font_fr.lbm char
|
||||
$(IMG2LBM) translations/font_es.xbm translations/font_es.lbm char
|
||||
|
||||
font_dblsize.lbm: font_dblsize.xbm
|
||||
font_dblsize.lbm: font_dblsize.xbm translations/font_dblsize_se.xbm translations/font_dblsize_de.xbm translations/font_dblsize_it.xbm translations/font_dblsize_fr.xbm translations/font_dblsize_es.xbm
|
||||
@echo
|
||||
@echo "Convert font from xbm to lbm:"
|
||||
$(IMG2LBM) $< $@ dblsize
|
||||
|
@ -772,6 +773,7 @@ font_dblsize.lbm: font_dblsize.xbm
|
|||
$(IMG2LBM) translations/font_dblsize_de.xbm translations/font_dblsize_de.lbm dblsize
|
||||
$(IMG2LBM) translations/font_dblsize_it.xbm translations/font_dblsize_it.lbm dblsize
|
||||
$(IMG2LBM) translations/font_dblsize_fr.xbm translations/font_dblsize_fr.lbm dblsize
|
||||
$(IMG2LBM) translations/font_dblsize_es.xbm translations/font_dblsize_es.lbm dblsize
|
||||
|
||||
sticks.lbm: sticks_4x1.xbm
|
||||
@echo
|
||||
|
|
|
@ -92,30 +92,35 @@ void displaySlider(uint8_t x, uint8_t y, uint8_t value, uint8_t attr)
|
|||
enum menuGeneralSetupItems {
|
||||
IF_RTCLOCK(ITEM_SETUP_DATE)
|
||||
IF_RTCLOCK(ITEM_SETUP_TIME)
|
||||
ITEM_SETUP_SOUND_LABEL,
|
||||
ITEM_SETUP_BEEPER_MODE,
|
||||
ITEM_SETUP_BEEPER_LENGTH,
|
||||
IF_AUDIO(ITEM_SETUP_SPEAKER_PITCH)
|
||||
IF_VOICE(ITEM_SETUP_SPEAKER_VOLUME)
|
||||
IF_HAPTIC(ITEM_SETUP_HAPTIC_LABEL)
|
||||
IF_HAPTIC(ITEM_SETUP_HAPTIC_MODE)
|
||||
IF_HAPTIC(ITEM_SETUP_HAPTIC_LENGTH)
|
||||
IF_HAPTIC(ITEM_SETUP_HAPTIC_STRENGTH)
|
||||
IF_PCBSKY9X(ITEM_SETUP_BRIGHTNESS)
|
||||
ITEM_SETUP_CONTRAST,
|
||||
ITEM_SETUP_ALARMS_LABEL,
|
||||
ITEM_SETUP_BATTERY_WARNING,
|
||||
IF_PCBSKY9X(ITEM_SETUP_CAPACITY_WARNING)
|
||||
IF_PCBSKY9X(ITEM_SETUP_TEMPERATURE_WARNING)
|
||||
ITEM_SETUP_INACTIVITY_ALARM,
|
||||
ITEM_SETUP_MEMORY_WARNING,
|
||||
ITEM_SETUP_ALARM_WARNING,
|
||||
IF_ROTARY_ENCODERS(ITEM_SETUP_RE_NAVIGATION)
|
||||
ITEM_SETUP_FILTER_ADC,
|
||||
ITEM_SETUP_THROTTLE_REVERSED,
|
||||
ITEM_SETUP_BEEP_LABEL,
|
||||
ITEM_SETUP_MINUTE_BEEP,
|
||||
ITEM_SETUP_COUNTDOWN_BEEP,
|
||||
ITEM_SETUP_BACKLIGHT_LABEL,
|
||||
ITEM_SETUP_FLASH_BEEP,
|
||||
ITEM_SETUP_BACKLIGHT_MODE,
|
||||
ITEM_SETUP_BACKLIGHT_DELAY,
|
||||
IF_SPLASH(ITEM_SETUP_DISABLE_SPLASH)
|
||||
ITEM_SETUP_MEMORY_WARNING,
|
||||
ITEM_SETUP_ALARM_WARNING,
|
||||
IF_FRSKY(ITEM_SETUP_TIMEZONE)
|
||||
IF_FRSKY(ITEM_SETUP_GPSFORMAT)
|
||||
ITEM_SETUP_RX_CHANNEL_ORD,
|
||||
|
@ -133,7 +138,7 @@ void menuGeneralSetup(uint8_t event)
|
|||
}
|
||||
#endif
|
||||
|
||||
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) 0, 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) 0, 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, IF_ROTARY_ENCODERS(0) 0, 0, 0, 0, 0, 0, 0, IF_SPLASH(0) 0, 0, IF_FRSKY(0) IF_FRSKY(0) 0, (uint8_t)-1, 1});
|
||||
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) (uint8_t)-1, 0, 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC((uint8_t)-1) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) 0, (uint8_t)-1, 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, 0, (uint8_t)-1, 0, 0, (uint8_t)-1, 0, 0, 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) 0, (uint8_t)-1, 1});
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
|
||||
|
@ -206,15 +211,19 @@ void menuGeneralSetup(uint8_t event)
|
|||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_SETUP_SOUND_LABEL:
|
||||
lcd_putsLeft(y, STR_SOUND_LABEL);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BEEPER_MODE:
|
||||
g_eeGeneral.beeperMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_BEEPERMODE, STR_VBEEPMODE, g_eeGeneral.beeperMode, -2, 1, attr, event);
|
||||
g_eeGeneral.beeperMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_MODE, STR_VBEEPMODE, g_eeGeneral.beeperMode, -2, 1, attr, event);
|
||||
#if defined(FRSKY)
|
||||
if (attr && checkIncDec_Ret) FRSKY_setModelAlarms();
|
||||
#endif
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BEEPER_LENGTH:
|
||||
SLIDER(y, g_eeGeneral.beeperLength, -2, 2, STR_BEEPERLEN, STR_VBEEPLEN, event, attr);
|
||||
SLIDER(y, g_eeGeneral.beeperLength, -2, 2, STR_LENGTH, STR_VBEEPLEN, event, attr);
|
||||
break;
|
||||
|
||||
#if defined(AUDIO)
|
||||
|
@ -253,12 +262,16 @@ void menuGeneralSetup(uint8_t event)
|
|||
#endif
|
||||
|
||||
#if defined(HAPTIC)
|
||||
case ITEM_SETUP_HAPTIC_LABEL:
|
||||
lcd_putsLeft(y, STR_HAPTIC_LABEL);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_HAPTIC_MODE:
|
||||
g_eeGeneral.hapticMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_HAPTICMODE, STR_VBEEPMODE, g_eeGeneral.hapticMode, -2, 1, attr, event);
|
||||
g_eeGeneral.hapticMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_MODE, STR_VBEEPMODE, g_eeGeneral.hapticMode, -2, 1, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_HAPTIC_LENGTH:
|
||||
SLIDER(y, g_eeGeneral.hapticLength, -2, 2, STR_HAPTICLENGTH, STR_VBEEPLEN, event, attr);
|
||||
SLIDER(y, g_eeGeneral.hapticLength, -2, 2, STR_LENGTH, STR_VBEEPLEN, event, attr);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_HAPTIC_STRENGTH:
|
||||
|
@ -292,12 +305,30 @@ void menuGeneralSetup(uint8_t event)
|
|||
}
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_ALARMS_LABEL:
|
||||
lcd_putsLeft(y, STR_ALARMS_LABEL);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BATTERY_WARNING:
|
||||
lcd_putsLeft( y,STR_BATTERYWARNING);
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.vBatWarn, attr|LEFT);
|
||||
if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatWarn, 40, 120); //4-12V
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_MEMORY_WARNING:
|
||||
{
|
||||
uint8_t b = 1-g_eeGeneral.disableMemoryWarning;
|
||||
g_eeGeneral.disableMemoryWarning = 1 - onoffMenuItem( b, RADIO_SETUP_2ND_COLUMN, y, STR_MEMORYWARNING, attr, event ) ;
|
||||
break;
|
||||
}
|
||||
|
||||
case ITEM_SETUP_ALARM_WARNING:
|
||||
{
|
||||
uint8_t b = 1-g_eeGeneral.disableAlarmWarning;
|
||||
g_eeGeneral.disableAlarmWarning = 1 - onoffMenuItem( b, RADIO_SETUP_2ND_COLUMN, y, STR_ALARMWARNING, attr, event ) ;
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
case ITEM_SETUP_CAPACITY_WARNING:
|
||||
lcd_putsLeft(y, STR_CAPAWARNING);
|
||||
|
@ -335,6 +366,10 @@ void menuGeneralSetup(uint8_t event)
|
|||
g_eeGeneral.filterInput = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_FILTERADC, STR_VFILTERADC, g_eeGeneral.filterInput, 0, 2, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BEEP_LABEL:
|
||||
lcd_putsLeft(y, STR_BEEP_LABEL);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_THROTTLE_REVERSED:
|
||||
g_eeGeneral.throttleReversed = onoffMenuItem( g_eeGeneral.throttleReversed, RADIO_SETUP_2ND_COLUMN, y, STR_THROTTLEREVERSE, attr, event ) ;
|
||||
break;
|
||||
|
@ -347,12 +382,16 @@ void menuGeneralSetup(uint8_t event)
|
|||
g_eeGeneral.preBeep = onoffMenuItem( g_eeGeneral.preBeep, RADIO_SETUP_2ND_COLUMN, y, STR_BEEPCOUNTDOWN, attr, event ) ;
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BACKLIGHT_LABEL:
|
||||
lcd_putsLeft(y, STR_BACKLIGHT_LABEL);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_FLASH_BEEP:
|
||||
g_eeGeneral.flashBeep = onoffMenuItem( g_eeGeneral.flashBeep, RADIO_SETUP_2ND_COLUMN, y, STR_FLASHONBEEP, attr, event ) ;
|
||||
g_eeGeneral.flashBeep = onoffMenuItem( g_eeGeneral.flashBeep, RADIO_SETUP_2ND_COLUMN, y, STR_ALARM, attr, event ) ;
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BACKLIGHT_MODE:
|
||||
g_eeGeneral.backlightMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_BLMODE, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event);
|
||||
g_eeGeneral.backlightMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_MODE, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BACKLIGHT_DELAY:
|
||||
|
@ -371,20 +410,6 @@ void menuGeneralSetup(uint8_t event)
|
|||
}
|
||||
#endif
|
||||
|
||||
case ITEM_SETUP_MEMORY_WARNING:
|
||||
{
|
||||
uint8_t b = 1-g_eeGeneral.disableMemoryWarning;
|
||||
g_eeGeneral.disableMemoryWarning = 1 - onoffMenuItem( b, RADIO_SETUP_2ND_COLUMN, y, STR_MEMORYWARNING, attr, event ) ;
|
||||
break;
|
||||
}
|
||||
|
||||
case ITEM_SETUP_ALARM_WARNING:
|
||||
{
|
||||
uint8_t b = 1-g_eeGeneral.disableAlarmWarning;
|
||||
g_eeGeneral.disableAlarmWarning = 1 - onoffMenuItem( b, RADIO_SETUP_2ND_COLUMN, y, STR_ALARMWARNING, attr, event ) ;
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(FRSKY)
|
||||
case ITEM_SETUP_TIMEZONE:
|
||||
lcd_putsLeft(y, STR_TIMEZONE);
|
||||
|
@ -405,7 +430,7 @@ void menuGeneralSetup(uint8_t event)
|
|||
break;
|
||||
|
||||
case ITEM_SETUP_STICK_MODE_LABELS:
|
||||
lcd_putsLeft(y, STR_MODE);
|
||||
lcd_putsLeft(y, NO_INDENT(STR_MODE));
|
||||
for (uint8_t i=0; i<4; i++) lcd_img((6+4*i)*FW, y, sticks, i, 0);
|
||||
break;
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ void lcd_putsnAtt(xcoord_t x,uint8_t y,const pm_char * s,uint8_t len,uint8_t mod
|
|||
if (mode&DBLSIZE) x += FW-1;
|
||||
}
|
||||
else {
|
||||
x += (c*FW);
|
||||
x += (c*FW/2);
|
||||
}
|
||||
s++;
|
||||
len--;
|
||||
|
|
|
@ -396,13 +396,13 @@ void menuMainView(uint8_t event)
|
|||
s_gvar_timer--;
|
||||
s_warning = PSTR("Global Variable");
|
||||
displayBox();
|
||||
#if defined(PCBSKY9X)
|
||||
lcd_putsnAtt(16, 5*FH, g_model.gvars[s_gvar_last].name, sizeof(g_model.gvars[s_gvar_last].name), ZCHAR);
|
||||
lcd_putsAtt(16+7*FW, 5*FH, PSTR("[\004]"), BOLD);
|
||||
lcd_outdezAtt(16+7*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last), BOLD);
|
||||
#else
|
||||
#if defined(M64)
|
||||
lcd_putsAtt(16+4*FW, 5*FH, PSTR("[\004]"), BOLD);
|
||||
lcd_outdezAtt(16+4*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last), BOLD);
|
||||
lcd_outdezAtt(16+4*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last, s_perout_flight_phase), BOLD);
|
||||
#else
|
||||
lcd_putsnAtt(16, 5*FH, g_model.gvarsNames[s_gvar_last], sizeof(gvar_name_t), ZCHAR);
|
||||
lcd_putsAtt(16+7*FW, 5*FH, PSTR("[\004]"), BOLD);
|
||||
lcd_outdezAtt(16+7*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last, s_perout_flight_phase), BOLD);
|
||||
#endif
|
||||
s_warning = NULL;
|
||||
}
|
||||
|
|
|
@ -618,7 +618,7 @@ int8_t gvarMenuItem(uint8_t x, uint8_t y, int8_t value, int8_t min, int8_t max,
|
|||
bool invers = attr&INVERS;
|
||||
if (invers && event == EVT_KEY_LONG(KEY_MENU)) {
|
||||
s_editMode = !s_editMode;
|
||||
value = ((value >= 126 || value <= -126) ? GVAR(value, min, max) : 126);
|
||||
value = ((value >= 126 || value <= -126) ? GET_GVAR(value, min, max, s_perout_flight_phase) : 126);
|
||||
eeDirty(EE_MODEL);
|
||||
}
|
||||
if (value >= 126 || value <= -126) {
|
||||
|
|
|
@ -757,7 +757,7 @@ void menuModelSetup(uint8_t event)
|
|||
break;
|
||||
|
||||
case ITEM_MODEL_PROTOCOL:
|
||||
lcd_putsLeft(y, STR_PROTO);
|
||||
lcd_putsLeft(y, NO_INDENT(STR_PROTO));
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol,
|
||||
(attr && m_posHorz==0 ? (editMode>0 ? BLINK|INVERS : INVERS):0));
|
||||
if (protocol <= PROTO_PPMSIM) {
|
||||
|
@ -856,7 +856,7 @@ static uint8_t s_currIdx;
|
|||
#if defined(TRANSLATIONS_FR) || defined(TRANSLATIONS_CZ) || defined(TRANSLATIONS_SE) || defined(TRANSLATIONS_DE)
|
||||
#define MIXES_2ND_COLUMN (13*FW)
|
||||
#else
|
||||
#define MIXES_2ND_COLUMN (10*FW)
|
||||
#define MIXES_2ND_COLUMN (11*FW)
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
|
@ -914,29 +914,71 @@ PhasesType editPhases(uint8_t x, uint8_t y, uint8_t event, PhasesType value, uin
|
|||
return value;
|
||||
}
|
||||
|
||||
enum menuModelPhaseItems {
|
||||
ITEM_MODEL_PHASE_NAME,
|
||||
ITEM_MODEL_PHASE_SWITCH,
|
||||
ITEM_MODEL_PHASE_TRIMS,
|
||||
IF_ROTARY_ENCODERS(ITEM_MODEL_PHASE_ROTARY_ENCODERS)
|
||||
ITEM_MODEL_PHASE_FADE_IN,
|
||||
ITEM_MODEL_PHASE_FADE_OUT,
|
||||
#if defined(GVARS) && !defined(M64)
|
||||
ITEM_MODEL_PHASE_GVARS_LABEL,
|
||||
ITEM_MODEL_PHASE_GV1,
|
||||
ITEM_MODEL_PHASE_GV2,
|
||||
ITEM_MODEL_PHASE_GV3,
|
||||
ITEM_MODEL_PHASE_GV4,
|
||||
ITEM_MODEL_PHASE_GV5,
|
||||
#endif
|
||||
ITEM_MODEL_PHASE_MAX
|
||||
};
|
||||
|
||||
void menuModelPhaseOne(uint8_t event)
|
||||
{
|
||||
PhaseData *phase = phaseaddress(s_currIdx);
|
||||
putsFlightPhase(13*FW, 0, s_currIdx+1, (getFlightPhase()==s_currIdx ? BOLD : 0));
|
||||
|
||||
#define MAX_TRIM_LINE (3+NUM_ROTARY_ENCODERS)
|
||||
#if defined(GVARS) && !defined(M64)
|
||||
static bool editingName = false;
|
||||
if (editingName && s_editMode <= 0) editingName = false;
|
||||
if (!editingName && s_editMode > 0 && m_posHorz == 0) editingName = true;
|
||||
|
||||
SUBMENU(STR_MENUFLIGHTPHASE, (s_currIdx==0 ? 3 : 5), {ZCHAR|(sizeof(phase->name)-1), 0, MAX_TRIM_LINE, 0/*, 0*/});
|
||||
static const pm_uint8_t mstate_tab_phase1[] PROGMEM = {ZCHAR|(sizeof(phase->name)-1), 0, 0, (uint8_t)-1, 2, 2, 2, 2, 2};
|
||||
static const pm_uint8_t mstate_tab_others[] PROGMEM = {ZCHAR|(sizeof(phase->name)-1), 0, 3, IF_ROTARY_ENCODERS(NUM_ROTARY_ENCODERS-1) 0, 0, (uint8_t)-1, 2, 2, 2, 2, 2};
|
||||
|
||||
if (!check(event, 0, NULL, 0, (s_currIdx == 0) ? mstate_tab_phase1 : mstate_tab_others, DIM(mstate_tab_others)-1, ITEM_MODEL_PHASE_MAX - 1 - (s_currIdx==0 ? 3 : 0))) return;
|
||||
|
||||
TITLE(STR_MENUFLIGHTPHASE);
|
||||
|
||||
#define PHASE_ONE_FIRST_LINE (1*FH)
|
||||
#else
|
||||
SUBMENU(STR_MENUFLIGHTPHASE, 3 + (s_currIdx==0 ? 0 : 2 + (bool)NUM_ROTARY_ENCODERS), {ZCHAR|(sizeof(phase->name)-1), 0, 3, IF_ROTARY_ENCODERS(NUM_ROTARY_ENCODERS-1) 0/*, 0*/});
|
||||
#define PHASE_ONE_FIRST_LINE (2*FH)
|
||||
#endif
|
||||
|
||||
int8_t sub = m_posVert;
|
||||
int8_t editMode = s_editMode;
|
||||
|
||||
for (uint8_t i=0, k=0, y=2*FH; i<5; i++, k++, y+=FH) {
|
||||
if (s_currIdx == 0 && i==1) i = 3;
|
||||
#if defined(GVARS) && !defined(M64)
|
||||
if (s_currIdx == 0 && sub>=ITEM_MODEL_PHASE_SWITCH) sub += ITEM_MODEL_PHASE_FADE_IN-ITEM_MODEL_PHASE_SWITCH;
|
||||
|
||||
for (uint8_t k=0; k<7; k++) {
|
||||
uint8_t y = (k+1) * FH;
|
||||
int8_t i = k + s_pgOfs;
|
||||
if (s_currIdx == 0 && i>=ITEM_MODEL_PHASE_SWITCH) i += ITEM_MODEL_PHASE_FADE_IN-ITEM_MODEL_PHASE_SWITCH;
|
||||
uint8_t attr = (sub==i ? (editMode>0 ? BLINK|INVERS : INVERS) : 0);
|
||||
#else
|
||||
for (uint8_t i=0, k=0, y=PHASE_ONE_FIRST_LINE; i<ITEM_MODEL_PHASE_MAX; i++, k++, y+=FH) {
|
||||
if (s_currIdx == 0 && i==ITEM_MODEL_PHASE_SWITCH) i = ITEM_MODEL_PHASE_FADE_IN;
|
||||
uint8_t attr = (sub==k ? (editMode>0 ? BLINK|INVERS : INVERS) : 0);
|
||||
#endif
|
||||
switch(i) {
|
||||
case 0:
|
||||
case ITEM_MODEL_PHASE_NAME:
|
||||
editName(MIXES_2ND_COLUMN, y, phase->name, sizeof(phase->name), event, attr, m_posHorz);
|
||||
break;
|
||||
case 1:
|
||||
case ITEM_MODEL_PHASE_SWITCH:
|
||||
phase->swtch = switchMenuItem(MIXES_2ND_COLUMN, y, phase->swtch, attr, event);
|
||||
break;
|
||||
case 2:
|
||||
case ITEM_MODEL_PHASE_TRIMS:
|
||||
lcd_putsLeft(y, STR_TRIMS);
|
||||
for (uint8_t t=0; t<NUM_STICKS; t++) {
|
||||
putsTrimMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, (attr && m_posHorz==t) ? ((editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
|
@ -950,10 +992,14 @@ void menuModelPhaseOne(uint8_t event)
|
|||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case ITEM_MODEL_PHASE_ROTARY_ENCODERS:
|
||||
lcd_putsLeft(y, PSTR("R.Encs"));
|
||||
for (uint8_t t=0; t<NUM_ROTARY_ENCODERS; t++) {
|
||||
putsRotaryEncoderMode(MIXES_2ND_COLUMN+((4+t)*FW)+2, y, s_currIdx, t, (attr && m_posHorz==4+t) ? ((editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
if (attr && m_posHorz==4+t && ((editMode>0) || p1valdiff)) {
|
||||
putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, (attr && m_posHorz==t) ? ((editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) {
|
||||
#if defined(EXTRA_ROTARY_ENCODERS)
|
||||
int16_t v;
|
||||
if(t < (NUM_ROTARY_ENCODERS - NUM_ROTARY_ENCODERS_EXTRA))
|
||||
|
@ -978,14 +1024,60 @@ void menuModelPhaseOne(uint8_t event)
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case 3:
|
||||
#endif
|
||||
|
||||
case ITEM_MODEL_PHASE_FADE_IN:
|
||||
phase->fadeIn = editDelay(y, event, attr, STR_FADEIN, phase->fadeIn);
|
||||
break;
|
||||
case 4:
|
||||
case ITEM_MODEL_PHASE_FADE_OUT:
|
||||
phase->fadeOut = editDelay(y, event, attr, STR_FADEOUT, phase->fadeOut);
|
||||
break;
|
||||
|
||||
#if defined(GVARS) && !defined(M64)
|
||||
|
||||
case ITEM_MODEL_PHASE_GVARS_LABEL:
|
||||
lcd_putsLeft(y, PSTR("Global Variables"));
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
uint8_t idx = i-ITEM_MODEL_PHASE_GV1;
|
||||
|
||||
if (editingName)
|
||||
editName(4*FW, y, g_model.gvarsNames[idx], sizeof(gvar_name_t), event, attr, m_posHorz);
|
||||
else
|
||||
lcd_putsnAtt(4*FW, y, g_model.gvarsNames[idx], sizeof(gvar_name_t), ZCHAR|(m_posHorz==0 ? attr : 0));
|
||||
|
||||
lcd_putsLeft(y, PSTR(" "));
|
||||
putsStrIdx(INDENT_WIDTH, y, STR_GV, idx+1);
|
||||
|
||||
int16_t v = phase->gvars[idx];
|
||||
if (v > GVAR_MAX) {
|
||||
uint8_t p = v - GVAR_MAX - 1;
|
||||
if (p >= s_currIdx) p++;
|
||||
putsFlightPhase(MIXES_2ND_COLUMN, y, p+1, !editingName && m_posHorz==1 ? attr : 0);
|
||||
}
|
||||
else {
|
||||
lcd_putsAtt(MIXES_2ND_COLUMN, y, PSTR("Own"), !editingName && m_posHorz==1 ? attr : 0);
|
||||
}
|
||||
if (attr && !editingName && s_currIdx>0 && m_posHorz==1 && ((editMode>0) || p1valdiff)) {
|
||||
if (v < GVAR_MAX) v = GVAR_MAX;
|
||||
v = checkIncDec(event, v, GVAR_MAX, GVAR_MAX+MAX_PHASES-1, EE_MODEL);
|
||||
if (checkIncDec_Ret) {
|
||||
if (v == GVAR_MAX) v = 0;
|
||||
phase->gvars[idx] = v;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t p = getGVarFlightPhase(s_currIdx, idx);
|
||||
lcd_outdezAtt(21*FW, y, GVAR_VALUE(idx, p), !editingName && m_posHorz==2 ? attr : 0);
|
||||
if (attr && !editingName && m_posHorz==2 && ((editMode>0) || p1valdiff))
|
||||
CHECK_INCDEC_MODELVAR(event, GVAR_VALUE(idx, p), -125, +125);
|
||||
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1634,7 +1726,7 @@ void menuModelMixOne(uint8_t event)
|
|||
break;
|
||||
#endif
|
||||
case MIX_FIELD_SOURCE:
|
||||
lcd_putsLeft(y, STR_SOURCE);
|
||||
lcd_putsLeft(y, NO_INDENT(STR_SOURCE));
|
||||
putsMixerSource(MIXES_2ND_COLUMN, y, md2->srcRaw, attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR(event, md2->srcRaw, 1, NUM_XCHNMIX);
|
||||
break;
|
||||
|
@ -1643,8 +1735,8 @@ void menuModelMixOne(uint8_t event)
|
|||
md2->weight = gvarMenuItem(MIXES_2ND_COLUMN, y, md2->weight, -125, 125, attr|LEFT, event);
|
||||
break;
|
||||
case MIX_FIELD_OFFSET:
|
||||
lcd_putsLeft(y, STR_OFFSET);
|
||||
md2->sOffset = gvarMenuItem(MIXES_2ND_COLUMN, y, md2->sOffset, -125, 125, attr|LEFT, event);
|
||||
lcd_putsLeft(y, NO_INDENT(STR_OFFSET));
|
||||
md2->offset = gvarMenuItem(MIXES_2ND_COLUMN, y, md2->offset, -125, 125, attr|LEFT, event);
|
||||
break;
|
||||
case MIX_FIELD_TRIM:
|
||||
{
|
||||
|
@ -2227,45 +2319,22 @@ void menuModelLimits(uint8_t event)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(GVARS) && defined(PCBSKY9X)
|
||||
void menuModelRegisterOne(uint8_t event)
|
||||
{
|
||||
gvar_t *reg = &g_model.gvars[s_curveChan];
|
||||
|
||||
putsStrIdx(11*FW, 0, STR_GV, s_curveChan+1);
|
||||
|
||||
// TODO Translation
|
||||
SUBMENU(PSTR("GLOBAL VAR"), 2, {ZCHAR|(sizeof(reg->name)-1), 0});
|
||||
|
||||
int8_t sub = m_posVert;
|
||||
|
||||
for (uint8_t i=0, k=0, y=2*FH; i<2; i++, k++, y+=FH) {
|
||||
uint8_t attr = (sub==k ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0);
|
||||
switch(i) {
|
||||
case 0:
|
||||
editName(MIXES_2ND_COLUMN, y, reg->name, sizeof(reg->name), event, attr, m_posHorz);
|
||||
break;
|
||||
case 1:
|
||||
lcd_putsLeft(y, PSTR("Value"));
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN, y, reg->value, attr|LEFT);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, reg->value, -125, 125);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CURVES)
|
||||
|
||||
#if defined(GVARS)
|
||||
#define CURVE_SELECTED() (sub >= 0 && sub < MAX_CURVES)
|
||||
#define GVAR_SELECTED() (sub >= MAX_CURVES)
|
||||
#else
|
||||
#define CURVE_SELECTED() (sub >= 0)
|
||||
#endif
|
||||
|
||||
void menuModelCurvesAll(uint8_t event)
|
||||
{
|
||||
#if defined(GVARS) && defined(M64)
|
||||
SIMPLE_MENU(STR_MENUCURVES, menuTabModel, e_CurvesAll, 1+MAX_CURVES+MAX_GVARS);
|
||||
#else
|
||||
SIMPLE_MENU(STR_MENUCURVES, menuTabModel, e_CurvesAll, 1+MAX_CURVES);
|
||||
#endif
|
||||
|
||||
int8_t sub = m_posVert - 1;
|
||||
|
||||
|
@ -2283,12 +2352,6 @@ void menuModelCurvesAll(uint8_t event)
|
|||
s_curveChan = sub;
|
||||
pushMenu(menuModelCurveOne);
|
||||
}
|
||||
#if defined(GVARS) && defined(PCBSKY9X)
|
||||
else if (sub >= MAX_CURVES) {
|
||||
s_curveChan = sub-MAX_CURVES;
|
||||
pushMenu(menuModelRegisterOne);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2296,25 +2359,17 @@ void menuModelCurvesAll(uint8_t event)
|
|||
uint8_t y = FH + i*FH;
|
||||
uint8_t k = i + s_pgOfs;
|
||||
uint8_t attr = (sub == k ? INVERS : 0);
|
||||
#if defined(GVARS)
|
||||
#if defined(GVARS) && defined(M64)
|
||||
if (k < MAX_CURVES) {
|
||||
putsStrIdx(0, y, STR_CV, k+1, attr);
|
||||
}
|
||||
else {
|
||||
#if defined(PCBSKY9X)
|
||||
putsStrIdx(0, y, STR_GV, k-MAX_CURVES+1, attr);
|
||||
if (sub >= MAX_CURVES) {
|
||||
lcd_outdezAtt(10*FW, y, GVAR_VALUE(k-MAX_CURVES));
|
||||
lcd_putsnAtt(12*FW, y, g_model.gvars[k-MAX_CURVES].name, sizeof(g_model.gvars[k-MAX_CURVES].name), ZCHAR);
|
||||
}
|
||||
#else
|
||||
putsStrIdx(0, y, STR_GV, k-MAX_CURVES+1);
|
||||
if (sub >= MAX_CURVES) {
|
||||
if (GVAR_SELECTED()) {
|
||||
if (attr && s_editMode>0) attr |= BLINK;
|
||||
lcd_outdezAtt(10*FW, y, GVAR_VALUE(k-MAX_CURVES), attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.gvars[k-MAX_CURVES], -125, 125);
|
||||
lcd_outdezAtt(10*FW, y, GVAR_VALUE(k-MAX_CURVES, -1), attr);
|
||||
if (attr) g_model.gvars[k-MAX_CURVES] = checkIncDec(event, g_model.gvars[k-MAX_CURVES], -1000, 1000, EE_MODEL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
putsStrIdx(0, y, STR_CV, k+1, attr);
|
||||
|
@ -2892,7 +2947,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
|
||||
case ITEM_TELEMETRY_A1_RANGE:
|
||||
case ITEM_TELEMETRY_A2_RANGE:
|
||||
lcd_puts(4, y, STR_RANGE);
|
||||
lcd_putsLeft(y, STR_RANGE);
|
||||
putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, ((attr && m_posHorz==0) ? blink : 0)|NO_UNIT|LEFT);
|
||||
lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, (attr && m_posHorz==1 ? blink : 0));
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
|
@ -2918,7 +2973,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
|
||||
case ITEM_TELEMETRY_A1_OFFSET:
|
||||
case ITEM_TELEMETRY_A2_OFFSET:
|
||||
lcd_puts(4, y, STR_OFFSET);
|
||||
lcd_putsLeft(y, STR_OFFSET);
|
||||
putsTelemetryChannel(TELEM_COL2, y, dest, 0, LEFT|attr);
|
||||
if (attr) channel.offset = checkIncDec(event, channel.offset, -256, 256, EE_MODEL);
|
||||
break;
|
||||
|
@ -2929,7 +2984,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
case ITEM_TELEMETRY_A2_ALARM2:
|
||||
{
|
||||
uint8_t j = ((k==ITEM_TELEMETRY_A1_ALARM1 || k==ITEM_TELEMETRY_A2_ALARM1) ? 0 : 1);
|
||||
lcd_puts(4, y, STR_ALARM);
|
||||
lcd_putsLeft(y, STR_ALARM);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ALARM_LEVEL(ch, j), (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_putsiAtt(TELEM_COL2+4*FW, y, STR_VALARMFN, ALARM_GREATER(ch, j), (attr && m_posHorz==1) ? blink : 0);
|
||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[j], (attr && m_posHorz==2 ? blink : 0) | LEFT);
|
||||
|
@ -2963,7 +3018,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
case ITEM_TELEMETRY_RSSI_ALARM1:
|
||||
case ITEM_TELEMETRY_RSSI_ALARM2: {
|
||||
uint8_t j = k-ITEM_TELEMETRY_RSSI_ALARM1;
|
||||
lcd_puts(4, y, STR_ALARM);
|
||||
lcd_putsLeft(y, STR_ALARM);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+j+g_model.frsky.rssiAlarms[j].level)%4), (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_putc(TELEM_COL2+4*FW, y, '<');
|
||||
lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(j), LEFT|((attr && m_posHorz==1) ? blink : 0), 3);
|
||||
|
@ -2987,26 +3042,26 @@ void menuModelTelemetry(uint8_t event)
|
|||
break;
|
||||
|
||||
case ITEM_TELEMETRY_USR_PROTO:
|
||||
lcd_puts(4, y, STR_PROTO);
|
||||
lcd_putsLeft(y, STR_PROTO);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VTELPROTO, g_model.frsky.usrProto, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.usrProto, 0, 2);
|
||||
break;
|
||||
|
||||
case ITEM_TELEMETRY_USR_BLADES:
|
||||
lcd_puts(4, y, STR_BLADES);
|
||||
lcd_putsLeft(y, STR_BLADES);
|
||||
lcd_outdezAtt(TELEM_COL2+FWNUM, y, 2+g_model.frsky.blades, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.blades, 0, 3);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_TELEMETRY_USR_VOLTAGE_SOURCE:
|
||||
lcd_puts(4, y, STR_VOLTAGE);
|
||||
lcd_putsLeft(y, STR_VOLTAGE);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VOLTSRC, g_model.frsky.voltsSource+1, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.voltsSource, 0, 3);
|
||||
break;
|
||||
|
||||
case ITEM_TELEMETRY_USR_CURRENT_SOURCE:
|
||||
lcd_puts(4, y, STR_CURRENT);
|
||||
lcd_putsLeft(y, STR_CURRENT);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VOLTSRC, g_model.frsky.currentSource, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.currentSource, 0, 3);
|
||||
break;
|
||||
|
@ -3017,13 +3072,13 @@ void menuModelTelemetry(uint8_t event)
|
|||
break;
|
||||
|
||||
case ITEM_TELEMETRY_VARIO_SOURCE:
|
||||
lcd_puts(4, y, STR_SOURCE);
|
||||
lcd_putsLeft(y, STR_SOURCE);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VARIOSRC, g_model.frsky.varioSource, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioSource, VARIO_SOURCE_FIRST, VARIO_SOURCE_LAST);
|
||||
break;
|
||||
|
||||
case ITEM_TELEMETRY_VARIO_SPEED:
|
||||
lcd_puts(4, y, STR_LIMIT);
|
||||
lcd_putsLeft(y, STR_LIMIT);
|
||||
if (!g_model.frsky.varioSpeedDownMin)
|
||||
lcd_putsAtt(TELEM_COL2, y, STR_OFF, ((attr && m_posHorz==0) ? blink : 0));
|
||||
else
|
||||
|
@ -3102,7 +3157,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
if (IS_BARS_SCREEN(screenIndex)) {
|
||||
FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex];
|
||||
uint8_t barSource = bar.source;
|
||||
lcd_putsiAtt(4, y, STR_VTELEMCHNS, barSource, (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_putsiAtt(INDENT_WIDTH, y, STR_VTELEMCHNS, barSource, (attr && m_posHorz==0) ? blink : 0);
|
||||
if (barSource) {
|
||||
putsTelemetryChannel(56-3*FW, y, barSource-1, convertBarValue(barSource, bar.barMin), (attr && m_posHorz==1 ? blink : 0) | LEFT);
|
||||
putsTelemetryChannel(14*FW-3, y, barSource-1, convertBarValue(barSource, 31-bar.barMax), (attr && m_posHorz==2 ? blink : 0) | LEFT);
|
||||
|
@ -3127,7 +3182,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
else {
|
||||
for (uint8_t c=0; c<2; c++) {
|
||||
uint8_t & value = g_model.frsky.screens[screenIndex].lines[lineIndex].sources[c];
|
||||
lcd_putsiAtt(c==0?4:TELEM_COL2, y, STR_VTELEMCHNS, value, (attr && m_posHorz==c) ? blink : 0);
|
||||
lcd_putsiAtt(c==0?INDENT_WIDTH:TELEM_COL2, y, STR_VTELEMCHNS, value, (attr && m_posHorz==c) ? blink : 0);
|
||||
if (attr && m_posHorz==c && (s_editMode>0 || p1valdiff)) {
|
||||
CHECK_INCDEC_MODELVAR(event, value, 0, g_model.frsky.usrProto ? ((lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX) : TELEM_NOUSR_MAX);
|
||||
}
|
||||
|
|
|
@ -302,7 +302,7 @@ PACK(typedef struct t_MixData {
|
|||
uint8_t speedUp;
|
||||
uint8_t speedDown;
|
||||
uint8_t srcRaw;
|
||||
int8_t sOffset;
|
||||
int8_t offset;
|
||||
char name[LEN_EXPOMIX_NAME];
|
||||
}) MixData;
|
||||
#else
|
||||
|
@ -325,7 +325,7 @@ PACK(typedef struct t_MixData {
|
|||
uint8_t speedUp:4;
|
||||
uint8_t speedDown:4;
|
||||
int8_t curveParam;
|
||||
int8_t sOffset;
|
||||
int8_t offset;
|
||||
}) MixData;
|
||||
#endif
|
||||
|
||||
|
@ -616,41 +616,37 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data
|
|||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
#endif
|
||||
|
||||
#if defined(PCBSTD)
|
||||
#if defined(M64)
|
||||
#define TRIM_ARRAY int8_t trim[4]; int8_t trim_ext:8
|
||||
#else
|
||||
#define TRIM_ARRAY int16_t trim[4]
|
||||
#endif
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
PACK(typedef struct {
|
||||
int8_t value;
|
||||
char name[6];
|
||||
}) gvar_t;
|
||||
#define GVAR_VALUE(x) g_model.gvars[x].value
|
||||
#else
|
||||
typedef int8_t gvar_t;
|
||||
#define GVAR_VALUE(x) g_model.gvars[x]
|
||||
typedef int16_t gvar_t;
|
||||
|
||||
#if !defined(M64)
|
||||
typedef char gvar_name_t[6];
|
||||
#define GVAR_MAX 1024
|
||||
#endif
|
||||
|
||||
#if defined(PCBSTD)
|
||||
#define PHASE_GVARS_DATA
|
||||
#if defined(GVARS)
|
||||
#if defined(M64) && defined(GVARS)
|
||||
#define MAX_GVARS 5
|
||||
#define MODEL_GVARS_DATA gvar_t gvars[MAX_GVARS]
|
||||
#define PHASE_GVARS_DATA
|
||||
#define GVAR_VALUE(x, p) g_model.gvars[x]
|
||||
#elif defined(M64)
|
||||
#define MAX_GVARS 0
|
||||
#define MODEL_GVARS_DATA
|
||||
#define PHASE_GVARS_DATA
|
||||
#elif defined(GVARS)
|
||||
#define MAX_GVARS 5
|
||||
#define MODEL_GVARS_DATA gvar_name_t gvarsNames[MAX_GVARS]
|
||||
#define PHASE_GVARS_DATA gvar_t gvars[MAX_GVARS]
|
||||
#define GVAR_VALUE(x, p) g_model.phaseData[p].gvars[x]
|
||||
#else
|
||||
#define MAX_GVARS 0
|
||||
#define MODEL_GVARS_DATA
|
||||
#endif
|
||||
#else
|
||||
#define PHASE_GVARS_DATA
|
||||
#if defined(GVARS)
|
||||
#define MAX_GVARS 5
|
||||
#define MODEL_GVARS_DATA gvar_t gvars[MAX_GVARS]
|
||||
#else
|
||||
#define MAX_GVARS 0
|
||||
#define MODEL_GVARS_DATA gvar_t gvars[5]
|
||||
#endif
|
||||
#define PHASE_GVARS_DATA gvar_t gvars[5]
|
||||
#endif
|
||||
|
||||
PACK(typedef struct t_PhaseData {
|
||||
|
@ -752,7 +748,7 @@ enum Dsm2Variants {
|
|||
|
||||
#if defined(MAVLINK)
|
||||
#define TELEMETRY_DATA MavlinkData mavlink
|
||||
#elif defined(FRSKY) || !defined(PCBSTD)
|
||||
#elif defined(FRSKY) || !defined(M64)
|
||||
#define TELEMETRY_DATA FrSkyData frsky
|
||||
#else
|
||||
#define TELEMETRY_DATA
|
||||
|
|
113
src/open9x.cpp
113
src/open9x.cpp
|
@ -77,7 +77,7 @@ const pm_uchar splashdata[] PROGMEM = { 'S','P','S',0,
|
|||
const pm_uchar * splash_lbm = splashdata+4;
|
||||
#endif
|
||||
|
||||
#if defined(PCBGRUVIN9X) || defined(PCBSKY9X) || defined(M128) || defined(EXTSTD)
|
||||
#if !defined(M64) || defined(EXTSTD)
|
||||
const pm_uchar asterisk_lbm[] PROGMEM = {
|
||||
#include "asterisk.lbm"
|
||||
};
|
||||
|
@ -205,7 +205,7 @@ CustomSwData *cswaddress(uint8_t idx)
|
|||
return &g_model.customSw[idx];
|
||||
}
|
||||
|
||||
#if defined(PCBSTD) && !defined(M128)
|
||||
#if defined(M64)
|
||||
void memclear(void *ptr, uint8_t size)
|
||||
{
|
||||
memset(ptr, 0, size);
|
||||
|
@ -317,6 +317,7 @@ int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 10
|
|||
}
|
||||
|
||||
#if defined(CURVES)
|
||||
// TODO use an enum here and replace CURVE_BASE
|
||||
int16_t applyCurve(int16_t x, int8_t idx)
|
||||
{
|
||||
/* already tried to have only one return at the end */
|
||||
|
@ -447,9 +448,9 @@ void applyExpos(int16_t *anas)
|
|||
if (ed.curveMode == MODE_CURVE)
|
||||
v = applyCurve(v, curveParam);
|
||||
else
|
||||
v = expo(v, GVAR(curveParam, -100, 100));
|
||||
v = expo(v, GET_GVAR(curveParam, -100, 100, s_perout_flight_phase));
|
||||
}
|
||||
v = ((int32_t)v * GVAR(ed.weight, 0, 100)) / 100;
|
||||
v = ((int32_t)v * GET_GVAR(ed.weight, 0, 100, s_perout_flight_phase)) / 100;
|
||||
anas[cur_chn] = v;
|
||||
}
|
||||
}
|
||||
|
@ -829,11 +830,12 @@ int8_t getMovedSwitch()
|
|||
}
|
||||
|
||||
#ifdef FLIGHT_PHASES
|
||||
// TODO int8_t?
|
||||
uint8_t getFlightPhase()
|
||||
{
|
||||
for (uint8_t i=1; i<MAX_PHASES; i++) {
|
||||
PhaseData *phase = &g_model.phaseData[i];
|
||||
if (phase->swtch && getSwitch(phase->swtch, 0)) {
|
||||
if (phase->swtch && getSwitch(phase->swtch, 0)) { // TODO phase->swtch needed?
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
@ -844,7 +846,7 @@ uint8_t getFlightPhase()
|
|||
int16_t getRawTrimValue(uint8_t phase, uint8_t idx)
|
||||
{
|
||||
PhaseData *p = phaseaddress(phase);
|
||||
#if defined(PCBSTD)
|
||||
#if defined(M64)
|
||||
return (((int16_t)p->trim[idx]) << 2) + ((p->trim_ext >> (2*idx)) & 0x03);
|
||||
#else
|
||||
return p->trim[idx];
|
||||
|
@ -859,7 +861,7 @@ int16_t getTrimValue(uint8_t phase, uint8_t idx)
|
|||
void setTrimValue(uint8_t phase, uint8_t idx, int16_t trim)
|
||||
{
|
||||
PhaseData *p = phaseaddress(phase);
|
||||
#if defined(PCBSTD)
|
||||
#if defined(M64)
|
||||
p->trim[idx] = (int8_t)(trim >> 2);
|
||||
p->trim_ext = (p->trim_ext & ~(0x03 << (2*idx))) + (((trim & 0x03) << (2*idx)));
|
||||
#else
|
||||
|
@ -931,22 +933,59 @@ void incRotaryEncoder(uint8_t idx, int8_t inc)
|
|||
#endif
|
||||
|
||||
#if defined(GVARS)
|
||||
int8_t GVAR(int8_t x, int8_t min, int8_t max)
|
||||
{
|
||||
return (x >= 126 || x <= -126) ? limit(min, GVAR_VALUE((uint8_t)x - 126), max) : x;
|
||||
}
|
||||
|
||||
uint8_t s_gvar_timer = 0;
|
||||
uint8_t s_gvar_last = 0;
|
||||
void setGVarValue(uint8_t x, int8_t value)
|
||||
|
||||
#if defined(M64)
|
||||
int16_t getGVarValue(int8_t x, int16_t min, int16_t max)
|
||||
{
|
||||
if (GVAR_VALUE(x) != value) {
|
||||
GVAR_VALUE(x) = value;
|
||||
return (x >= 126 || x <= -126) ? limit(min, GVAR_VALUE((uint8_t)x - 126, -1), max) : x;
|
||||
}
|
||||
|
||||
void setGVarValue(uint8_t idx, int8_t value)
|
||||
{
|
||||
if (GVAR_VALUE(idx, -1) != value) {
|
||||
GVAR_VALUE(idx, -1) = value;
|
||||
eeDirty(EE_MODEL);
|
||||
s_gvar_last = x;
|
||||
s_gvar_last = idx;
|
||||
s_gvar_timer = GVAR_DISPLAY_TIME;
|
||||
}
|
||||
}
|
||||
#else
|
||||
uint8_t getGVarFlightPhase(uint8_t phase, uint8_t idx)
|
||||
{
|
||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
||||
if (phase == 0) return 0;
|
||||
int16_t trim = GVAR_VALUE(idx, phase); // TODO phase at the end everywhere to be consistent!
|
||||
if (trim <= GVAR_MAX) return phase;
|
||||
uint8_t result = trim-GVAR_MAX-1;
|
||||
if (result >= phase) result++;
|
||||
phase = result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int16_t getGVarValue(int8_t x, int16_t min, int16_t max, int8_t phase)
|
||||
{
|
||||
if (x >= -125 && x <= 125)
|
||||
return x;
|
||||
|
||||
uint8_t idx = (uint8_t)x - 126;
|
||||
return limit(min, GVAR_VALUE(idx, getGVarFlightPhase(phase, idx)), max);
|
||||
}
|
||||
|
||||
void setGVarValue(uint8_t idx, int8_t value, int8_t phase)
|
||||
{
|
||||
phase = getGVarFlightPhase(phase, idx);
|
||||
if (GVAR_VALUE(idx, phase) != value) {
|
||||
GVAR_VALUE(idx, phase) = value;
|
||||
eeDirty(EE_MODEL);
|
||||
s_gvar_last = idx;
|
||||
s_gvar_timer = GVAR_DISPLAY_TIME;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(FRSKY) || defined(PCBSKY9X)
|
||||
|
@ -1246,7 +1285,7 @@ void message(const pm_char *title, const pm_char *t, const char *last MESSAGE_SO
|
|||
#if defined(PCBX9D)
|
||||
lcd_img(DISPLAY_W-29, 0, asterisk_lbm, 0, 0);
|
||||
#endif
|
||||
#if defined(PCBGRUVIN9X) || defined(PCBSKY9X) || defined(M128) || defined(EXTSTD)
|
||||
#if !defined(M64) || defined(EXTSTD)
|
||||
lcd_img(2, 0, asterisk_lbm, 0, 0);
|
||||
#else
|
||||
lcd_putsAtt(0, 0, PSTR("(!)"), DBLSIZE);
|
||||
|
@ -1270,7 +1309,7 @@ void message(const pm_char *title, const pm_char *t, const char *last MESSAGE_SO
|
|||
}
|
||||
|
||||
#if defined(GVARS)
|
||||
int8_t *trimPtr[NUM_STICKS] = { NULL, NULL, NULL, NULL };
|
||||
int8_t trimGvar[NUM_STICKS] = { -1, -1, -1, -1 };
|
||||
#endif
|
||||
|
||||
#if defined(PCBSTD)
|
||||
|
@ -1289,21 +1328,29 @@ void checkTrims()
|
|||
#endif
|
||||
// LH_DWN LH_UP LV_DWN LV_UP RV_DWN RV_UP RH_DWN RH_UP
|
||||
uint8_t idx = CONVERT_MODE(1+k/2) - 1;
|
||||
uint8_t phase = getTrimFlightPhase(s_perout_flight_phase, idx);
|
||||
|
||||
#if defined(GVARS)
|
||||
#define TRIM_REUSED() trimPtr[idx]
|
||||
int16_t before;
|
||||
#define TRIM_REUSED() trimGvar[idx] >= 0
|
||||
uint8_t phase;
|
||||
int16_t before; // TODO declarations outside #ifdef
|
||||
bool thro;
|
||||
if (TRIM_REUSED()) {
|
||||
before = *trimPtr[idx];
|
||||
#if defined(M64)
|
||||
phase = 0;
|
||||
#else
|
||||
phase = getGVarFlightPhase(s_perout_flight_phase, trimGvar[idx]);
|
||||
#endif
|
||||
before = GVAR_VALUE(trimGvar[idx], phase);
|
||||
thro = false;
|
||||
}
|
||||
else {
|
||||
phase = getTrimFlightPhase(s_perout_flight_phase, idx);
|
||||
before = getRawTrimValue(phase, idx);
|
||||
thro = (idx==THR_STICK && g_model.thrTrim);
|
||||
}
|
||||
#else
|
||||
#define TRIM_REUSED() 0
|
||||
uint8_t phase = getTrimFlightPhase(s_perout_flight_phase, idx);
|
||||
int16_t before = getRawTrimValue(phase, idx);
|
||||
bool thro = (idx==THR_STICK && g_model.thrTrim);
|
||||
#endif
|
||||
|
@ -1335,9 +1382,9 @@ void checkTrims()
|
|||
|
||||
#if defined(GVARS)
|
||||
if (TRIM_REUSED()) {
|
||||
*trimPtr[idx] = after;
|
||||
GVAR_VALUE(trimGvar[idx], phase) = after;
|
||||
eeDirty(EE_MODEL);
|
||||
s_gvar_last = (trimPtr[idx] - &GVAR_VALUE(0)) / sizeof(g_model.gvars[0]);
|
||||
s_gvar_last = trimGvar[idx];
|
||||
s_gvar_timer = GVAR_DISPLAY_TIME;
|
||||
}
|
||||
else {
|
||||
|
@ -1956,7 +2003,7 @@ void evalFunctions()
|
|||
|
||||
#if defined(GVARS)
|
||||
for (uint8_t i=0; i<4; i++)
|
||||
trimPtr[i] = NULL;
|
||||
trimGvar[i] = -1;
|
||||
#endif
|
||||
|
||||
for (uint8_t i=0; i<NUM_FSW; i++) {
|
||||
|
@ -2120,18 +2167,18 @@ void evalFunctions()
|
|||
#if defined(GVARS)
|
||||
else if (sd->func >= FUNC_ADJUST_GV1) {
|
||||
if (FSW_PARAM(sd) >= MIXSRC_TrimRud-1 && FSW_PARAM(sd) <= MIXSRC_TrimAil-1) {
|
||||
trimPtr[FSW_PARAM(sd)-MIXSRC_TrimRud+1] = &GVAR_VALUE(sd->func-FUNC_ADJUST_GV1);
|
||||
trimGvar[FSW_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1;
|
||||
}
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
else if (FSW_PARAM(sd) >= MIXSRC_REa-1 && FSW_PARAM(sd) < MIXSRC_TrimRud-1) {
|
||||
int8_t scroll = rePreviousValues[FSW_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[FSW_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY);
|
||||
if (scroll) {
|
||||
setGVarValue(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1) + scroll);
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1, s_perout_flight_phase) + scroll, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
setGVarValue(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(FSW_PARAM(sd)), (int16_t)1250) / 10);
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(FSW_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -2362,7 +2409,7 @@ void perOut(uint8_t tick10ms)
|
|||
|
||||
//========== OFFSET ===============
|
||||
if (apply_offset) {
|
||||
int8_t offset = GVAR(md->sOffset, -125, 125);
|
||||
int8_t offset = GET_GVAR(md->offset, -125, 125, s_perout_flight_phase);
|
||||
if (offset) v += calc100toRESX(offset);
|
||||
}
|
||||
|
||||
|
@ -2379,7 +2426,7 @@ void perOut(uint8_t tick10ms)
|
|||
v += trims[mix_trim];
|
||||
}
|
||||
|
||||
int8_t weight = GVAR(md->weight, -125, 125);
|
||||
int16_t weight = GET_GVAR(md->weight, -500, 500, s_perout_flight_phase);
|
||||
|
||||
//========== SPEED ===============
|
||||
if (s_perout_mode == e_perout_mode_normal && (md->speedUp || md->speedDown)) // there are delay values
|
||||
|
@ -2419,7 +2466,7 @@ void perOut(uint8_t tick10ms)
|
|||
|
||||
//========== DIFFERENTIAL =========
|
||||
if (md->curveMode == MODE_DIFFERENTIAL) {
|
||||
int8_t curveParam = GVAR(md->curveParam, -100, 100);
|
||||
int8_t curveParam = GET_GVAR(md->curveParam, -100, 100, s_perout_flight_phase);
|
||||
if (curveParam>0 && dv<0)
|
||||
dv = (dv * (100-curveParam)) / 100;
|
||||
else if (curveParam<0 && dv>0)
|
||||
|
@ -2974,8 +3021,8 @@ ISR(TIMER5_COMPA_vect, ISR_NOBLOCK) // mixer interrupt
|
|||
lastTMR = tmr10ms;
|
||||
|
||||
if (s_current_protocol < PROTO_NONE) {
|
||||
checkTrims();
|
||||
doMixerCalculations(tmr10ms, tick10ms);
|
||||
checkTrims();
|
||||
}
|
||||
|
||||
heartbeat |= HEART_TIMER10ms;
|
||||
|
@ -3476,10 +3523,10 @@ void mixerTask(void * pdata)
|
|||
lastTMR = tmr10ms;
|
||||
|
||||
if (s_current_protocol < PROTO_NONE) {
|
||||
if (tick10ms) checkTrims();
|
||||
CoEnterMutexSection(mixerMutex);
|
||||
doMixerCalculations(tmr10ms, tick10ms);
|
||||
CoLeaveMutexSection(mixerMutex);
|
||||
if (tick10ms) checkTrims();
|
||||
}
|
||||
|
||||
heartbeat |= HEART_TIMER10ms;
|
||||
|
|
37
src/open9x.h
37
src/open9x.h
|
@ -312,7 +312,7 @@ extern uint8_t s_bind_allowed;
|
|||
# define INP_E_TELEM_RX 1
|
||||
# define OUT_E_TELEM_TX 0
|
||||
|
||||
# define INP_D_HAPTIC 7
|
||||
# define OUT_D_HAPTIC 7
|
||||
# define INP_D_SPARE4 6
|
||||
# define INP_D_ROT_ENC_2_PUSH 5
|
||||
# define INP_D_ROT_ENC_1_PUSH 4
|
||||
|
@ -388,7 +388,7 @@ extern uint8_t s_bind_allowed;
|
|||
|
||||
#define OUT_G_SIM_CTL 4 //1 : phone-jack=ppm_in
|
||||
#define INP_G_ID1 3
|
||||
#define INP_G_HAPTIC 2
|
||||
#define OUT_G_HAPTIC 2
|
||||
#define INP_G_RF_POW 1
|
||||
#define INP_G_RuddDR 0
|
||||
|
||||
|
@ -679,6 +679,8 @@ extern uint8_t s_perout_mode;
|
|||
// Fiddle to force compiler to use a pointer
|
||||
#define FORCE_INDIRECT(ptr) __asm__ __volatile__ ("" : "=e" (ptr) : "0" (ptr))
|
||||
|
||||
extern uint8_t s_perout_flight_phase;
|
||||
|
||||
void perOut(uint8_t tick10ms);
|
||||
void perMain();
|
||||
NOINLINE void per10ms();
|
||||
|
@ -700,8 +702,6 @@ extern int16_t getRawTrimValue(uint8_t phase, uint8_t idx);
|
|||
extern int16_t getTrimValue(uint8_t phase, uint8_t idx);
|
||||
extern void setTrimValue(uint8_t phase, uint8_t idx, int16_t trim);
|
||||
|
||||
extern uint8_t s_perout_flight_phase;
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
int16_t getRotaryEncoder(uint8_t idx);
|
||||
void incRotaryEncoder(uint8_t idx, int8_t inc);
|
||||
|
@ -717,12 +717,23 @@ inline bool navigationRotaryEncoder(uint8_t event)
|
|||
#endif
|
||||
|
||||
#if defined(GVARS)
|
||||
int8_t GVAR(int8_t x, int8_t min, int8_t max);
|
||||
#if defined(M64)
|
||||
int16_t getGVarValue(int8_t x, int16_t min, int16_t max);
|
||||
void setGVarValue(uint8_t x, int8_t value);
|
||||
#define GET_GVAR(x, min, max, p) getGVarValue(x, min, max)
|
||||
#define SET_GVAR(idx, val, p) setGVarValue(idx, val)
|
||||
#else
|
||||
uint8_t getGVarFlightPhase(uint8_t phase, uint8_t idx);
|
||||
int16_t getGVarValue(int8_t x, int16_t min, int16_t max, int8_t phase);
|
||||
void setGVarValue(uint8_t x, int8_t value, int8_t phase);
|
||||
#define GET_GVAR(x, min, max, p) getGVarValue(x, min, max, p)
|
||||
#define SET_GVAR(idx, val, p) setGVarValue(idx, val, p)
|
||||
#endif
|
||||
#define GVAR_DISPLAY_TIME 100 /*1 second*/;
|
||||
extern uint8_t s_gvar_timer;
|
||||
extern uint8_t s_gvar_last;
|
||||
#else
|
||||
#define GVAR(x, min, max) (x)
|
||||
#define GET_GVAR(x, ...) (x)
|
||||
#endif
|
||||
|
||||
extern uint16_t s_timeCumTot;
|
||||
|
@ -757,8 +768,6 @@ extern uint8_t s_traceWr;
|
|||
extern int8_t s_traceCnt;
|
||||
#endif
|
||||
|
||||
extern int8_t *s_trimPtr[NUM_STICKS];
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
static inline uint16_t getTmr2MHz() { return TC1->TC_CHANNEL[0].TC_CV; }
|
||||
#else
|
||||
|
@ -771,13 +780,13 @@ uint16_t stack_free(uint8_t tid);
|
|||
uint16_t stack_free();
|
||||
#endif
|
||||
|
||||
#if defined(PCBSTD) && !defined(M128)
|
||||
#if defined(M64)
|
||||
void memclear(void *ptr, uint8_t size);
|
||||
#else
|
||||
#define memclear(p, s) memset(p, 0, s)
|
||||
#endif
|
||||
|
||||
#ifdef SPLASH
|
||||
#if defined(SPLASH)
|
||||
void doSplash();
|
||||
#endif
|
||||
|
||||
|
@ -844,11 +853,11 @@ void read_9_adc(void ) ;
|
|||
#if defined(PCBSKY9X)
|
||||
#define HAPTIC_OFF hapticOff()
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#define HAPTIC_ON PORTD &= ~(1 << INP_D_HAPTIC)
|
||||
#define HAPTIC_OFF PORTD |= (1 << INP_D_HAPTIC)
|
||||
#define HAPTIC_ON PORTD &= ~(1 << OUT_D_HAPTIC)
|
||||
#define HAPTIC_OFF PORTD |= (1 << OUT_D_HAPTIC)
|
||||
#else
|
||||
#define HAPTIC_ON PORTG |= (1 << INP_G_HAPTIC)
|
||||
#define HAPTIC_OFF PORTG &= ~(1 << INP_G_HAPTIC)
|
||||
#define HAPTIC_ON PORTG |= (1 << OUT_G_HAPTIC)
|
||||
#define HAPTIC_OFF PORTG &= ~(1 << OUT_G_HAPTIC)
|
||||
#endif
|
||||
#else
|
||||
#define HAPTIC_ON
|
||||
|
|
|
@ -161,34 +161,34 @@ const pm_char STR_ALARM[] PROGMEM = TR_ALARM;
|
|||
const pm_char STR_USRDATA[] PROGMEM = TR_USRDATA;
|
||||
const pm_char STR_BLADES[] PROGMEM = TR_BLADES;
|
||||
const pm_char STR_SCREEN[] PROGMEM = TR_SCREEN;
|
||||
const pm_char STR_BEEPERMODE[] PROGMEM = TR_BEEPERMODE;
|
||||
const pm_char STR_BEEPERLEN[] PROGMEM = TR_BEEPERLEN;
|
||||
const pm_char STR_SOUND_LABEL[] PROGMEM = TR_SOUND_LABEL;
|
||||
const pm_char STR_LENGTH[] PROGMEM = TR_LENGTH;
|
||||
#if defined(AUDIO)
|
||||
const pm_char STR_SPKRPITCH[] PROGMEM = TR_SPKRPITCH;
|
||||
#endif
|
||||
#if defined(HAPTIC)
|
||||
const pm_char STR_HAPTICMODE[] PROGMEM = TR_HAPTICMODE;
|
||||
const pm_char STR_HAPTIC_LABEL[] PROGMEM = TR_HAPTIC_LABEL;
|
||||
const pm_char STR_HAPTICSTRENGTH[] PROGMEM = TR_HAPTICSTRENGTH;
|
||||
const pm_char STR_HAPTICLENGTH[] PROGMEM = TR_HAPTICLENGTH;
|
||||
#endif
|
||||
const pm_char STR_CONTRAST[] PROGMEM = TR_CONTRAST;
|
||||
const pm_char STR_ALARMS_LABEL[] PROGMEM = TR_ALARMS_LABEL;
|
||||
const pm_char STR_BATTERYWARNING[] PROGMEM = TR_BATTERYWARNING;
|
||||
const pm_char STR_INACTIVITYALARM[] PROGMEM = TR_INACTIVITYALARM;
|
||||
const pm_char STR_MEMORYWARNING[] PROGMEM = TR_MEMORYWARNING;
|
||||
const pm_char STR_ALARMWARNING[] PROGMEM = TR_ALARMWARNING;
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
const pm_char STR_RENAVIG[] PROGMEM = TR_RENAVIG;
|
||||
#endif
|
||||
const pm_char STR_FILTERADC[] PROGMEM = TR_FILTERADC;
|
||||
const pm_char STR_THROTTLEREVERSE[] PROGMEM = TR_THROTTLEREVERSE;
|
||||
const pm_char STR_BEEP_LABEL[] PROGMEM = TR_BEEP_LABEL;
|
||||
const pm_char STR_MINUTEBEEP[] PROGMEM = TR_MINUTEBEEP;
|
||||
const pm_char STR_BEEPCOUNTDOWN[] PROGMEM = TR_BEEPCOUNTDOWN;
|
||||
const pm_char STR_FLASHONBEEP[] PROGMEM = TR_FLASHONBEEP;
|
||||
const pm_char STR_BLMODE[] PROGMEM = TR_BLMODE;
|
||||
const pm_char STR_BACKLIGHT_LABEL[] PROGMEM = TR_BACKLIGHT_LABEL;
|
||||
const pm_char STR_BLDELAY[] PROGMEM = TR_BLDELAY;
|
||||
const pm_char STR_SPLASHSCREEN[] PROGMEM = TR_SPLASHSCREEN;
|
||||
const pm_char STR_THROTTLEWARNING[] PROGMEM = TR_THROTTLEWARNING;
|
||||
const pm_char STR_SWITCHWARNING[] PROGMEM = TR_SWITCHWARNING;
|
||||
const pm_char STR_MEMORYWARNING[] PROGMEM = TR_MEMORYWARNING;
|
||||
const pm_char STR_ALARMWARNING[] PROGMEM = TR_ALARMWARNING;
|
||||
#ifdef FRSKY
|
||||
const pm_char STR_TIMEZONE[] PROGMEM = TR_TIMEZONE;
|
||||
const pm_char STR_GPSCOORD[] PROGMEM = TR_GPSCOORD;
|
||||
|
@ -383,6 +383,8 @@ const pm_uchar font[] PROGMEM = {
|
|||
#include "font_cz.lbm"
|
||||
#elif defined(TRANSLATIONS_FR)
|
||||
#include "font_fr.lbm"
|
||||
#elif defined(TRANSLATIONS_ES)
|
||||
#include "font_es.lbm"
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -396,5 +398,7 @@ const pm_uchar font_dblsize[] PROGMEM = {
|
|||
#include "font_dblsize_it.lbm"
|
||||
#elif defined(TRANSLATIONS_FR)
|
||||
#include "font_dblsize_fr.lbm"
|
||||
#elif defined(TRANSLATIONS_ES)
|
||||
#include "font_dblsize_es.lbm"
|
||||
#endif
|
||||
};
|
||||
|
|
|
@ -49,6 +49,9 @@
|
|||
#elif defined(TRANSLATIONS_CZ)
|
||||
#include "translations/cz.h"
|
||||
#define LEN_SPECIAL_CHARS 0
|
||||
#elif defined(TRANSLATIONS_ES)
|
||||
#include "translations/es.h"
|
||||
#define LEN_SPECIAL_CHARS 0
|
||||
#else
|
||||
#include "translations/en.h"
|
||||
#define LEN_SPECIAL_CHARS 0
|
||||
|
@ -204,6 +207,7 @@ extern const pm_char STR_OPEN9X[];
|
|||
#endif
|
||||
|
||||
// The 0-terminated-strings
|
||||
#define NO_INDENT(x) (x)+LEN_INDENT
|
||||
|
||||
extern const pm_char STR_POPUPS[];
|
||||
#define STR_EXIT (STR_POPUPS + OFS_EXIT)
|
||||
|
@ -269,28 +273,28 @@ extern const pm_char STR_ALARM[];
|
|||
extern const pm_char STR_USRDATA[];
|
||||
extern const pm_char STR_BLADES[];
|
||||
extern const pm_char STR_SCREEN[];
|
||||
extern const pm_char STR_BEEPERMODE[];
|
||||
extern const pm_char STR_BEEPERLEN[];
|
||||
extern const pm_char STR_SOUND_LABEL[];
|
||||
extern const pm_char STR_LENGTH[];
|
||||
extern const pm_char STR_SPKRPITCH[];
|
||||
extern const pm_char STR_HAPTICMODE[];
|
||||
extern const pm_char STR_HAPTIC_LABEL[];
|
||||
extern const pm_char STR_HAPTICSTRENGTH[];
|
||||
extern const pm_char STR_HAPTICLENGTH[];
|
||||
extern const pm_char STR_CONTRAST[];
|
||||
extern const pm_char STR_ALARMS_LABEL[];
|
||||
extern const pm_char STR_BATTERYWARNING[];
|
||||
extern const pm_char STR_INACTIVITYALARM[];
|
||||
extern const pm_char STR_MEMORYWARNING[];
|
||||
extern const pm_char STR_ALARMWARNING[];
|
||||
extern const pm_char STR_RENAVIG[];
|
||||
extern const pm_char STR_FILTERADC[];
|
||||
extern const pm_char STR_THROTTLEREVERSE[];
|
||||
extern const pm_char STR_BEEP_LABEL[];
|
||||
extern const pm_char STR_MINUTEBEEP[];
|
||||
extern const pm_char STR_BEEPCOUNTDOWN[];
|
||||
extern const pm_char STR_FLASHONBEEP[];
|
||||
extern const pm_char STR_BLMODE[];
|
||||
extern const pm_char STR_BACKLIGHT_LABEL[];
|
||||
extern const pm_char STR_BLDELAY[];
|
||||
extern const pm_char STR_SPLASHSCREEN[];
|
||||
extern const pm_char STR_THROTTLEWARNING[];
|
||||
extern const pm_char STR_SWITCHWARNING[];
|
||||
extern const pm_char STR_MEMORYWARNING[];
|
||||
extern const pm_char STR_ALARMWARNING[];
|
||||
extern const pm_char STR_TIMEZONE[];
|
||||
extern const pm_char STR_GPSCOORD[];
|
||||
extern const pm_char STR_VARIO[];
|
||||
|
|
|
@ -229,7 +229,11 @@
|
|||
#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX "
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#define TR_POPUPS "[MENU]\004[EXIT]"
|
||||
#define INDENT "\001"
|
||||
#define LEN_INDENT 1
|
||||
#define INDENT_WIDTH (FW/2)
|
||||
|
||||
#define TR_POPUPS "[MENU]\010[EXIT]"
|
||||
#define OFS_EXIT 7
|
||||
#define TR_MENUWHENDONE "[MENU] WHEN DONE"
|
||||
#define TR_FREE "free"
|
||||
|
@ -245,7 +249,7 @@
|
|||
#define TR_TTRACE "T-Trace"
|
||||
#define TR_TTRIM "T-Trim"
|
||||
#define TR_BEEPCTR "Beep Ctr"
|
||||
#define TR_PROTO "Proto"
|
||||
#define TR_PROTO INDENT"Proto"
|
||||
#define TR_PPMFRAME "PPM frame"
|
||||
#define TR_MS "ms"
|
||||
#define TR_SWITCH "Switch"
|
||||
|
@ -253,7 +257,7 @@
|
|||
#define TR_FADEIN "Fade In"
|
||||
#define TR_FADEOUT "Fade Out"
|
||||
#define TR_DEFAULT "(default)"
|
||||
#define TR_CHECKTRIMS "\003Check\005Trims"
|
||||
#define TR_CHECKTRIMS "\006Check\012Trims"
|
||||
#define OFS_CHECKTRIMS (9*FW)
|
||||
#define TR_SWASHTYPE "Swash Type"
|
||||
#define TR_COLLECTIVE "Collective"
|
||||
|
@ -261,17 +265,17 @@
|
|||
#define TR_ELEDIRECTION "ELE Direction"
|
||||
#define TR_AILDIRECTION "AIL Direction"
|
||||
#define TR_COLDIRECTION "COL Direction"
|
||||
#define TR_MODE "Mode"
|
||||
#define TR_MODE INDENT"Mode"
|
||||
#define TR_NOFREEEXPO "No free expo!"
|
||||
#define TR_NOFREEMIXER "No free mixer!"
|
||||
#define TR_INSERTMIX "INSERT MIX "
|
||||
#define TR_EDITMIX "EDIT MIX "
|
||||
#define TR_SOURCE "Source"
|
||||
#define TR_SOURCE INDENT"Source"
|
||||
#define TR_WEIGHT "Weight"
|
||||
#define TR_EXPO "Expo"
|
||||
#define TR_SIDE "Side"
|
||||
#define TR_DIFFERENTIAL "Differ"
|
||||
#define TR_OFFSET "Offset"
|
||||
#define TR_OFFSET INDENT"Offset"
|
||||
#define TR_TRIM "Trim"
|
||||
#define TR_DREX "DRex"
|
||||
#define TR_CURVE "Curve"
|
||||
|
@ -286,47 +290,42 @@
|
|||
#define TR_MIXER "MIXER"
|
||||
#define TR_CV "CV"
|
||||
#define TR_GV "GV"
|
||||
#define TR_ACHANNEL "A\002channel"
|
||||
#define TR_RANGE "Range"
|
||||
#define TR_ACHANNEL "A\004channel"
|
||||
#define TR_RANGE INDENT"Range"
|
||||
#define TR_BAR "Bar"
|
||||
#define TR_ALARM "Alarm"
|
||||
#define TR_ALARM INDENT"Alarm"
|
||||
#define TR_USRDATA "UsrData"
|
||||
#define TR_BLADES "Blades"
|
||||
#define TR_BLADES INDENT"Blades"
|
||||
#define TR_SCREEN "Screen "
|
||||
#ifdef AUDIO
|
||||
#define TR_BEEPERMODE "Speaker Mode"
|
||||
#define TR_BEEPERLEN "Speaker Length"
|
||||
#define TR_SPKRPITCH "Speaker Pitch"
|
||||
#else
|
||||
#define TR_BEEPERMODE "Beeper Mode"
|
||||
#define TR_BEEPERLEN "Beeper Length"
|
||||
#endif
|
||||
#define TR_HAPTICMODE "Haptic Mode"
|
||||
#define TR_HAPTICSTRENGTH "Haptic Strength"
|
||||
#define TR_HAPTICLENGTH "Haptic Length"
|
||||
#define TR_SOUND_LABEL "Sound"
|
||||
#define TR_LENGTH INDENT"Length"
|
||||
#define TR_SPKRPITCH INDENT"Pitch"
|
||||
#define TR_HAPTIC_LABEL "Haptic"
|
||||
#define TR_HAPTICSTRENGTH INDENT"Strength"
|
||||
#define TR_CONTRAST "Contrast"
|
||||
#define TR_BATTERYWARNING "Battery Warning"
|
||||
#define TR_INACTIVITYALARM "Inactivity alrm"
|
||||
#define TR_ALARMS_LABEL "Alarms"
|
||||
#define TR_BATTERYWARNING INDENT"Battery Low"
|
||||
#define TR_INACTIVITYALARM INDENT"Inactivity"
|
||||
#define TR_MEMORYWARNING INDENT"Memory Low"
|
||||
#define TR_ALARMWARNING INDENT"Sound Off"
|
||||
#define TR_RENAVIG "Navig RotEnc"
|
||||
#define TR_FILTERADC "Filter ADC"
|
||||
#define TR_THROTTLEREVERSE "Thr reverse"
|
||||
#define TR_MINUTEBEEP "Minute beep"
|
||||
#define TR_BEEPCOUNTDOWN "Beep countdown"
|
||||
#define TR_FLASHONBEEP "Flash on beep"
|
||||
#define TR_BLMODE "Backlight mode"
|
||||
#define TR_BLDELAY "Backlight delay"
|
||||
#define TR_BEEP_LABEL "Timer events"
|
||||
#define TR_MINUTEBEEP INDENT"Minute "
|
||||
#define TR_BEEPCOUNTDOWN INDENT"Countdown"
|
||||
#define TR_BACKLIGHT_LABEL "Backlight"
|
||||
#define TR_BLDELAY INDENT"Delay"
|
||||
#define TR_SPLASHSCREEN "Splash screen"
|
||||
#define TR_THROTTLEWARNING "T-Warning"
|
||||
#define TR_SWITCHWARNING "S-Warning"
|
||||
#define TR_MEMORYWARNING "Memory Warning"
|
||||
#define TR_ALARMWARNING "Alarm Warning"
|
||||
#define TR_TIMEZONE "Time Zone"
|
||||
#define TR_RXCHANNELORD "Rx Channel Ord"
|
||||
#define TR_SLAVE "Slave"
|
||||
#define TR_MODESRC "mode\003% src"
|
||||
#define TR_MODESRC "mode\006% src"
|
||||
#define TR_MULTIPLIER "Multiplier"
|
||||
#define TR_CAL "Cal"
|
||||
#define TR_EEPROMV "EEpr:\004-"
|
||||
#define TR_EEPROMV "EEpr:\010-"
|
||||
#define TR_VTRIM "Trim- +"
|
||||
#define TR_BG "BG:"
|
||||
#define TR_MENUTOSTART "[MENU] TO START"
|
||||
|
@ -337,31 +336,31 @@
|
|||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA "NO DATA"
|
||||
#define TR_TM1TM2 "TM1\015TM2"
|
||||
#define TR_THRTHP "THR\015TH%"
|
||||
#define TR_TM1TM2 "TM1\032TM2"
|
||||
#define TR_THRTHP "THR\032TH%"
|
||||
#define TR_TOT "TOT"
|
||||
#define TR_TMR1LATMAXUS "Tmr1Lat max\003us"
|
||||
#define TR_TMR1LATMAXUS "Tmr1Lat max\006us"
|
||||
#define STR_US (STR_TMR1LATMAXUS+12)
|
||||
#define TR_TMR1LATMINUS "Tmr1Lat min\003us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\003us"
|
||||
#define TR_TMR1LATMINUS "Tmr1Lat min\006us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\006us"
|
||||
#if defined(PCBSKY9X)
|
||||
#define TR_TMAINMAXMS "Tmain max\004ms"
|
||||
#define TR_TMAINMAXMS "Tmain max\010ms"
|
||||
#else
|
||||
#define TR_TMAINMAXMS "Tmain max\005ms"
|
||||
#define TR_TMAINMAXMS "Tmain max\012ms"
|
||||
#endif
|
||||
#define TR_T10MSUS "T10ms\007us"
|
||||
#define TR_FREESTACKMINB "Free Stack\004b"
|
||||
#define TR_T10MSUS "T10ms\016us"
|
||||
#define TR_FREESTACKMINB "Free Stack\010b"
|
||||
#define TR_MENUTORESET "[MENU] to reset"
|
||||
#define TR_PPM "PPM"
|
||||
#define TR_CH "CH"
|
||||
#define TR_MODEL "MODEL"
|
||||
#define TR_FP "FP"
|
||||
#define TR_EEPROMLOWMEM "EEPROM low mem"
|
||||
#define TR_ALERT "\007ALERT"
|
||||
#define TR_ALERT "\016ALERT"
|
||||
#define TR_PRESSANYKEYTOSKIP "Press any key to skip"
|
||||
#define TR_THROTTLENOTIDLE "Throttle not idle"
|
||||
#define TR_ALARMSDISABLED "Alarms Disabled"
|
||||
#define TR_PRESSANYKEY "\004Press any Key"
|
||||
#define TR_PRESSANYKEY "\010Press any Key"
|
||||
#define TR_BADEEPROMDATA "Bad EEprom Data"
|
||||
#define TR_EEPROMFORMATTING "Formatting EEPROM"
|
||||
#define TR_EEPROMOVERFLOW "EEPROM overflow"
|
||||
|
@ -397,7 +396,7 @@
|
|||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Back"
|
||||
#define TR_LIMIT "Limit"
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitude"
|
||||
#define TR_LONGITUDE "Longitude"
|
||||
|
@ -406,8 +405,8 @@
|
|||
#define TR_SHUTDOWN "SHUTTING DOWN"
|
||||
#define TR_BATT_CALIB "Battery Calib"
|
||||
#define TR_CURRENT_CALIB "Current Calib"
|
||||
#define TR_VOLTAGE "Voltage"
|
||||
#define TR_CURRENT "Current"
|
||||
#define TR_VOLTAGE INDENT"Voltage"
|
||||
#define TR_CURRENT INDENT"Current"
|
||||
#define TR_SELECT_MODEL "Select Model"
|
||||
#define TR_CREATE_MODEL "Create Model"
|
||||
#define TR_BACKUP_MODEL "Backup Model"
|
||||
|
@ -422,14 +421,14 @@
|
|||
#define TR_ALARMSWARN "ALARMS"
|
||||
#define TR_SWITCHWARN "SWITCH"
|
||||
#define TR_INVERT_THR "Invert Thr?"
|
||||
#define TR_SPEAKER_VOLUME "Speaker Volume"
|
||||
#define TR_SPEAKER_VOLUME INDENT"Volume"
|
||||
#define TR_LCD "LCD"
|
||||
#define TR_BRIGHTNESS "Brightness"
|
||||
#define TR_CPU_TEMP "CPU Temp.\007>"
|
||||
#define TR_CPU_CURRENT "Current\011>"
|
||||
#define TR_CPU_TEMP "CPU Temp.\016>"
|
||||
#define TR_CPU_CURRENT "Current\022>"
|
||||
#define TR_CPU_MAH "Consumpt."
|
||||
#define TR_COPROC "CoProc."
|
||||
#define TR_COPROC_TEMP "MB Temp. \007>"
|
||||
#define TR_COPROC_TEMP "MB Temp. \016>"
|
||||
#define TR_CAPAWARNING "Capacity Warning"
|
||||
#define TR_TEMPWARNING "Temp Warning"
|
||||
#define TR_FUNC "Func"
|
||||
|
|
458
src/translations/es.h
Normal file
458
src/translations/es.h
Normal file
|
@ -0,0 +1,458 @@
|
|||
// NON ZERO TERMINATED STRINGS
|
||||
#define LEN_OFFON "\003"
|
||||
#define TR_OFFON "OFF""ON\0"
|
||||
|
||||
#define LEN_MMMINV "\003"
|
||||
#define TR_MMMINV "---""INV"
|
||||
|
||||
#define LEN_NCHANNELS "\004"
|
||||
#define TR_NCHANNELS "\0014CH\0016CH\0018CH10CH12CH14CH16CH"
|
||||
|
||||
#define LEN_VBEEPMODE "\005"
|
||||
#define TR_VBEEPMODE "Mudo ""Alarm""NoKey""Todo "
|
||||
|
||||
#define LEN_VBEEPLEN "\005"
|
||||
#define TR_VBEEPLEN "0====""=0===""==0==""===0=""====0"
|
||||
|
||||
#define LEN_VRENAVIG "\003"
|
||||
#define TR_VRENAVIG "No REaREb"
|
||||
|
||||
#define LEN_VFILTERADC "\004"
|
||||
#define TR_VFILTERADC "SIMP""OSMP""FILT"
|
||||
|
||||
#define LEN_VBLMODE "\004"
|
||||
#define TR_VBLMODE "OFF ""Keys""Stks""Dos ""ON\0"
|
||||
|
||||
#define LEN_TRNMODE "\003"
|
||||
#define TR_TRNMODE "off"" +="" :="
|
||||
|
||||
#define LEN_TRNCHN "\003"
|
||||
#define TR_TRNCHN "ch1ch2ch3ch4"
|
||||
|
||||
#define LEN_DATETIME "\005"
|
||||
#define TR_DATETIME "DATA:""HORA:"
|
||||
|
||||
#define LEN_VLCD "\006"
|
||||
#define TR_VLCD "NormalOptrex"
|
||||
|
||||
#define LEN_VTRIMINC "\006"
|
||||
#define TR_VTRIMINC "Expo ""ExFino""Fino ""Medio ""Grueso"
|
||||
|
||||
#define LEN_RETA123 "\001"
|
||||
#if defined(PCBGRUVIN9X)
|
||||
#if defined(EXTRA_ROTARY_ENCODERS)
|
||||
#define TR_RETA123 "RETA123abcd"
|
||||
#else //EXTRA_ROTARY_ENCODERS
|
||||
#define TR_RETA123 "RETA123ab"
|
||||
#endif //EXTRA_ROTARY_ENCODERS
|
||||
#else
|
||||
#define TR_RETA123 "RETA123"
|
||||
#endif
|
||||
|
||||
#define LEN_VPROTOS "\006"
|
||||
#ifdef PXX
|
||||
#define TR_PXX "PXX\0 "
|
||||
#else
|
||||
#define TR_PXX "[PXX]\0"
|
||||
#endif
|
||||
#ifdef DSM2
|
||||
#define TR_DSM2 "DSM2\0 "
|
||||
#else
|
||||
#define TR_DSM2 "[DSM2]"
|
||||
#endif
|
||||
#ifdef IRPROTOS
|
||||
#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0"
|
||||
#else
|
||||
#define TR_IRPROTOS
|
||||
#endif
|
||||
#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS
|
||||
|
||||
#define LEN_POSNEG "\003"
|
||||
#define TR_POSNEG "POS""NEG"
|
||||
|
||||
#define LEN_VCURVEFUNC "\003"
|
||||
#define TR_VCURVEFUNC "---""x>0""x<0""|x|""f>0""f<0""|f|"
|
||||
|
||||
#define LEN_VMLTPX "\010"
|
||||
#define TR_VMLTPX "Agregar ""Multipl.""Cambiar "
|
||||
|
||||
#define LEN_VMLTPX2 "\002"
|
||||
#define TR_VMLTPX2 "+=""*="":="
|
||||
|
||||
#define LEN_VMIXTRIMS "\003"
|
||||
#define TR_VMIXTRIMS "OFF""ON\0""Dir""Ele""Ace""Ale"
|
||||
|
||||
#define LEN_VCSWFUNC "\010"
|
||||
#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""v<ofs\0 ""|v|>ofs\0""|v|<ofs\0""AND\0 ""OR\0 ""XOR\0 ""v1==v2\0 ""v1!=v2\0 ""v1>v2\0 ""v1<v2\0 ""v1>=v2\0 ""v1<=v2\0 ""d>=ofs\0 ""|d|>=ofs"
|
||||
|
||||
#define LEN_VFSWFUNC "\015"
|
||||
#if defined(VARIO)
|
||||
#define TR_VVARIO "Vario "
|
||||
#else
|
||||
#define TR_VVARIO "[Vario] "
|
||||
#endif
|
||||
#if defined(AUDIO)
|
||||
#define TR_SOUND "Oir Sonido\0 "
|
||||
#else
|
||||
#define TR_SOUND "Beep\0 "
|
||||
#endif
|
||||
#if defined(HAPTIC)
|
||||
#define TR_HAPTIC "Vibrar\0 "
|
||||
#else
|
||||
#define TR_HAPTIC "[Vibrar]\0 "
|
||||
#endif
|
||||
#if defined(VOICE)
|
||||
#define TR_PLAY_TRACK "Oir Pista \0 "
|
||||
#define TR_PLAY_VALUE "Oir Valor \0 "
|
||||
#else
|
||||
#define TR_PLAY_TRACK "[Oir Pista] \0"
|
||||
#define TR_PLAY_VALUE "[Oir Valor] \0"
|
||||
#endif
|
||||
#if defined(PCBSKY9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SDCARD Logo\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logo]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volumen\0 "
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SDCARD Logo "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logo]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define TR_TEST "Test\0"
|
||||
#else
|
||||
#define TR_TEST
|
||||
#endif
|
||||
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz \0 ""Ajuste Rapido" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Panel Luz\0 " TR_TEST
|
||||
|
||||
#define LEN_VFSWRESET "\006"
|
||||
#define TR_VFSWRESET "Reloj1""Reloj2""Todo ""Telem."
|
||||
|
||||
#define LEN_FUNCSOUNDS "\006"
|
||||
#define TR_FUNCSOUNDS "Pito1 ""Pito2 ""Pito3 ""Avis1 ""Avis2 ""Pio ""Ring ""SciFi ""Robot ""Gorjeo""Tada ""Crickt""Sirena""Alarma""Ratata""Tictac"
|
||||
|
||||
#define LEN_VTELEMCHNS "\004"
|
||||
#define TR_VTELEMCHNS "---\0""Tmr1""Tmr2""Tx\0 ""Rx\0 ""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VVel""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cur+""Acc\0""Hora"
|
||||
|
||||
#ifdef IMPERIAL_UNITS
|
||||
#define LENGTH_UNIT "ft\0"
|
||||
#define SPEED_UNIT "kts"
|
||||
#else
|
||||
#define LENGTH_UNIT "m\0 "
|
||||
#define SPEED_UNIT "kmh"
|
||||
#endif
|
||||
|
||||
#define LEN_VTELEMUNIT "\003"
|
||||
#define TR_VTELEMUNIT "v\0 ""A\0 ""m/s""-\0 " SPEED_UNIT LENGTH_UNIT "@\0 ""%\0 ""mA\0""mAh""W\0 "
|
||||
#define STR_V (STR_VTELEMUNIT+1)
|
||||
#define STR_A (STR_VTELEMUNIT+4)
|
||||
|
||||
#define LEN_VALARM "\003"
|
||||
#define TR_VALARM "---""Ama""Nar""Roj"
|
||||
|
||||
#define LEN_VALARMFN "\001"
|
||||
#define TR_VALARMFN "<>"
|
||||
|
||||
#define LEN_VTELPROTO "\007"
|
||||
#define TR_VTELPROTO "Nada\0 ""Hub\0 ""WSHHigh""Halcyon"
|
||||
|
||||
#define LEN_VOLTSRC "\003"
|
||||
#define TR_VOLTSRC "---""A1\0""A2\0""FAS""Cel"
|
||||
|
||||
#define LEN_VARIOSRC "\004"
|
||||
#define TR_VARIOSRC "Data""A1\0 ""A2\0"
|
||||
|
||||
#define LEN_VSCREEN "\004"
|
||||
#define TR_VSCREEN "Nums""Bars"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "HMS NMEA"
|
||||
|
||||
#define LEN2_VTEMPLATES 13
|
||||
#define LEN_VTEMPLATES "\015"
|
||||
#define TR_VTEMPLATES "Elim Mezcla\0\0""Simple 4-CH \0""Anular Motor\0""V-Tail \0""Elevon\\Delta\0""eCCPM \0""Heli Setup \0""Servo Test \0"
|
||||
|
||||
#define LEN_VSWASHTYPE "\004"
|
||||
#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0"
|
||||
|
||||
#define LEN_VKEYS "\005"
|
||||
#define TR_VKEYS " Menu""Salir""Abajo""Arrib""Drcha"" Izqda"
|
||||
|
||||
#define LEN_VRENCODERS "\003"
|
||||
#define TR_VRENCODERS "REa""REb"
|
||||
|
||||
#define LEN_VSWITCHES "\003"
|
||||
#if defined(PCBSKY9X)
|
||||
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"" ON"
|
||||
#else
|
||||
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"" ON"
|
||||
#endif
|
||||
|
||||
#define LEN_VSRCRAW "\004"
|
||||
#if defined(PCBSKY9X)
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW "REa "
|
||||
#elif defined(PCBGRUVIN9X) && defined(EXTRA_ROTARY_ENCODERS)
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd "
|
||||
#elif defined(PCBGRUVIN9X) && !defined(EXTRA_ROTARY_ENCODERS)
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb "
|
||||
#else
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW
|
||||
#endif
|
||||
#if defined(HELI)
|
||||
#define TR_CYC_VSRCRAW "CYC1""CYC2""CYC3"
|
||||
#else
|
||||
#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]"
|
||||
#endif
|
||||
#define TR_VSRCRAW "Dir ""Ele ""Acel""Ail ""P1 ""P2 ""P3 " TR_ROTARY_ENCODERS_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" "MAX ""3POS" TR_CYC_VSRCRAW
|
||||
|
||||
#define LEN_VTMRMODES "\003"
|
||||
#define TR_VTMRMODES "OFF""ABS""THs""TH%""THt"
|
||||
|
||||
#define LEN_DSM2MODE "\007"
|
||||
#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX "
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#define INDENT "\001"
|
||||
#define LEN_INDENT 1
|
||||
#define INDENT_WIDTH (FW/2)
|
||||
|
||||
#define TR_POPUPS "[MENU]\010[SALIR]"
|
||||
#define OFS_EXIT 7
|
||||
#define TR_MENUWHENDONE "[MENU]AL FINAL"
|
||||
#define TR_FREE "Libre"
|
||||
#define TR_DELETEMODEL "BORRA MODELO"
|
||||
#define TR_COPYINGMODEL "Copiando modelo."
|
||||
#define TR_MOVINGMODEL "Mover modelo..."
|
||||
#define TR_LOADINGMODEL "Cargar modelo..."
|
||||
#define TR_NAME "Nombre"
|
||||
#define TR_TIMER "Reloj"
|
||||
#define TR_ELIMITS "F.Limites"
|
||||
#define TR_ETRIMS "F.Ajustes"
|
||||
#define TR_TRIMINC "Modo Ajte"
|
||||
#define TR_TTRACE "T-Rastro"
|
||||
#define TR_TTRIM "T-Ajuste"
|
||||
#define TR_BEEPCTR "Pitido en"
|
||||
#define TR_PROTO INDENT"Protocolo"
|
||||
#define TR_PPMFRAME "Medida PPM"
|
||||
#define TR_MS "ms"
|
||||
#define TR_SWITCH "Llave"
|
||||
#define TR_TRIMS "Ajustes"
|
||||
#define TR_FADEIN "Aparecer"
|
||||
#define TR_FADEOUT "Ocultar"
|
||||
#define TR_DEFAULT "(p/defecto)"
|
||||
#define TR_CHECKTRIMS "\006Check\012Ajtes"
|
||||
#define OFS_CHECKTRIMS (9*FW)
|
||||
#define TR_SWASHTYPE "Ciclico Tipo"
|
||||
#define TR_COLLECTIVE "Colectivo"
|
||||
#define TR_SWASHRING "Anillo Cvo"
|
||||
#define TR_ELEDIRECTION "ELE Direccion"
|
||||
#define TR_AILDIRECTION "ALE Direccion"
|
||||
#define TR_COLDIRECTION "COL Direccion"
|
||||
#define TR_MODE "Modo"
|
||||
#define TR_NOFREEEXPO "No free expo!"
|
||||
#define TR_NOFREEMIXER "No free mixer!"
|
||||
#define TR_INSERTMIX "INSERT MIX "
|
||||
#define TR_EDITMIX "EDIT MIX "
|
||||
#define TR_SOURCE INDENT"Fuente"
|
||||
#define TR_WEIGHT "Cantidad"
|
||||
#define TR_EXPO "Expo"
|
||||
#define TR_SIDE "Lado"
|
||||
#define TR_DIFFERENTIAL "Diferir"
|
||||
#define TR_OFFSET INDENT"Offset"
|
||||
#define TR_TRIM "Ajte"
|
||||
#define TR_DREX "DRex"
|
||||
#define TR_CURVE "Curva"
|
||||
#define TR_FPHASE "Fase"
|
||||
#define TR_MIXWARNING "Aviso"
|
||||
#define TR_OFF "OFF"
|
||||
#define TR_MULTPX "Multipl"
|
||||
#define TR_DELAYDOWN "Delay Dn"
|
||||
#define TR_DELAYUP "Delay Up"
|
||||
#define TR_SLOWDOWN "Slow Dn"
|
||||
#define TR_SLOWUP "Slow Up"
|
||||
#define TR_MIXER "MEZCLA"
|
||||
#define TR_CV "CV"
|
||||
#define TR_GV "GV"
|
||||
#define TR_ACHANNEL "A\004Canal"
|
||||
#define TR_RANGE INDENT"Range"
|
||||
#define TR_BAR "Bar"
|
||||
#define TR_ALARM INDENT"Alarma"
|
||||
#define TR_USRDATA "UsrData"
|
||||
#define TR_BLADES INDENT"Palas"
|
||||
#define TR_SCREEN "Screen "
|
||||
#ifdef AUDIO
|
||||
#define TR_BEEPERMODE "Modo Altavoz"
|
||||
#define TR_BEEPERLEN "Talla Altavoz"
|
||||
#define TR_SPKRPITCH "Speaker Pitch"
|
||||
#else
|
||||
#define TR_BEEPERMODE "Modo Pitido"
|
||||
#define TR_BEEPERLEN "Talla Pitido"
|
||||
#endif
|
||||
#define TR_HAPTICMODE "Haptic Modo"
|
||||
#define TR_HAPTICSTRENGTH "Haptic Strength"
|
||||
#define TR_HAPTICLENGTH "Haptic Length"
|
||||
#define TR_CONTRAST "Contraste"
|
||||
#define TR_BATTERYWARNING "Aviso Bateria"
|
||||
#define TR_INACTIVITYALARM "Alarma Reposo"
|
||||
#define TR_RENAVIG "Navig RotEnc"
|
||||
#define TR_FILTERADC "Filtro ADC"
|
||||
#define TR_THROTTLEREVERSE "Inversion Acel."
|
||||
#define TR_MINUTEBEEP "Pitido/minuto"
|
||||
#define TR_BEEPCOUNTDOWN "Pitido ctaatras"
|
||||
#define TR_FLASHONBEEP "Flash al pitido"
|
||||
#define TR_BLMODE "Modo P.Luminoso"
|
||||
#define TR_BLDELAY "Tiempo de Luz"
|
||||
#define TR_SPLASHSCREEN "Pantalla Inicio"
|
||||
#define TR_THROTTLEWARNING "Aviso Acelerdor"
|
||||
#define TR_SWITCHWARNING "Aviso de Llaves"
|
||||
#define TR_MEMORYWARNING "Aviso Memoria"
|
||||
#define TR_ALARMWARNING "Aviso de alarma"
|
||||
#define TR_TIMEZONE "Zona Horaria"
|
||||
#define TR_RXCHANNELORD "Rx Ord Canal"
|
||||
#define TR_SLAVE "Esclavo"
|
||||
#define TR_MODESRC "modo\006% src"
|
||||
#define TR_MULTIPLIER "Multiplicar"
|
||||
#define TR_CAL "Cal"
|
||||
#define TR_EEPROMV "EEpr:\010-"
|
||||
#define TR_VTRIM "Ajte- +"
|
||||
#define TR_BG "BG:"
|
||||
#define TR_MENUTOSTART "[MENU] INICIAR"
|
||||
#define TR_SETMIDPOINT "AJUSTAR CENTROS"
|
||||
#define TR_MOVESTICKSPOTS "MOVER STICK/POT"
|
||||
#define TR_RXBATT "Rx Batt:"
|
||||
#define TR_TXnRX "Tx:\0Rx:"
|
||||
#define OFS_RX 4
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_NODATA "si"
|
||||
#define TR_TM1TM2 "TM1\032TM2"
|
||||
#define TR_THRTHP "THR\032TH%"
|
||||
#define TR_TOT "TOT"
|
||||
#define TR_TMR1LATMAXUS "Tmr1Lat max\006us"
|
||||
#define STR_US (STR_TMR1LATMAXUS+12)
|
||||
#define TR_TMR1LATMINUS "Tmr1Lat min\006us"
|
||||
#define TR_TMR1JITTERUS "Tmr1 Jitter\006us"
|
||||
#if defined(PCBSKY9X)
|
||||
#define TR_TMAINMAXMS "Tmain max\010ms"
|
||||
#else
|
||||
#define TR_TMAINMAXMS "Tmain max\012ms"
|
||||
#endif
|
||||
#define TR_T10MSUS "T10ms\016us"
|
||||
#define TR_FREESTACKMINB "Pila libre\010b"
|
||||
#define TR_MENUTORESET "[MENU] Reinicia"
|
||||
#define TR_PPM "PPM"
|
||||
#define TR_CH "CH"
|
||||
#define TR_MODEL "MODELO"
|
||||
#define TR_FP "FP"
|
||||
#define TR_EEPROMLOWMEM "EEPROM Baja mem"
|
||||
#define TR_ALERT "\016ALERTA"
|
||||
#define TR_PRESSANYKEYTOSKIP "Pulsa tecla x omitir"
|
||||
#define TR_THROTTLENOTIDLE "Acelerador activado"
|
||||
#define TR_ALARMSDISABLED "Alarmas Desact."
|
||||
#define TR_PRESSANYKEY "\010Pulse una tecla"
|
||||
#define TR_BADEEPROMDATA "Datos EEprom mal"
|
||||
#define TR_EEPROMFORMATTING "Formateo EEPROM"
|
||||
#define TR_EEPROMOVERFLOW "Desborde EEPROM"
|
||||
#define TR_MENURADIOSETUP "AJUSTAR RADIO"
|
||||
#define TR_MENUDATEANDTIME "FECHA Y HORA"
|
||||
#define TR_MENUTRAINER "APRENDIZAJE"
|
||||
#define TR_MENUVERSION "VERSION"
|
||||
#define TR_MENUDIAG "DIAGNOST."
|
||||
#define TR_MENUANA "ANALOGICOS"
|
||||
#define TR_MENUCALIBRATION "CALIBRACION"
|
||||
#define TR_TRIMS2OFFSETS "Trims => Offsets"
|
||||
#define TR_MENUMODELSEL "MODELSEL"
|
||||
#define TR_MENUSETUP "AJUSTE"
|
||||
#define TR_MENUFLIGHTPHASE "FASE DE VUELO"
|
||||
#define TR_MENUFLIGHTPHASES "FASES DE VUELO"
|
||||
#define TR_MENUHELISETUP "AJUSTE HELI"
|
||||
#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_LIMITS_SYMETRICAL) // The right menu titles for the gurus ...
|
||||
#define TR_MENUDREXPO "STICKS"
|
||||
#define TR_MENULIMITS "SALIDAS"
|
||||
#else
|
||||
#define TR_MENUDREXPO "DR/EXPO"
|
||||
#define TR_MENULIMITS "LIMITES"
|
||||
#endif
|
||||
#define TR_MENUCURVES "CURVAS"
|
||||
#define TR_MENUCURVE "CURVA"
|
||||
#define TR_MENUCUSTOMSWITCH "AJUSTES PROPIOS"
|
||||
#define TR_MENUCUSTOMSWITCHES "AJUSTE PROPIO"
|
||||
#define TR_MENUFUNCSWITCHES "AJUSTAR FUNCIONES"
|
||||
#define TR_MENUTELEMETRY "TELEMETRIA"
|
||||
#define TR_MENUTEMPLATES "PLANTILLAS"
|
||||
#define TR_MENUSTAT "REGISTRO"
|
||||
#define TR_MENUDEBUG "DEPURAR"
|
||||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Atras"
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitud"
|
||||
#define TR_LONGITUDE "Longitud"
|
||||
#define TR_GPSCOORD "Gps Coords"
|
||||
#define TR_VARIO "Vario"
|
||||
#define TR_SHUTDOWN "APAGANDO"
|
||||
#define TR_BATT_CALIB "Bateria Calib"
|
||||
#define TR_CURRENT_CALIB "Actual Calib"
|
||||
#define TR_VOLTAGE "Voltaje"
|
||||
#define TR_CURRENT "Actual"
|
||||
#define TR_SELECT_MODEL "Selec Modelo"
|
||||
#define TR_CREATE_MODEL "Crear Modelo"
|
||||
#define TR_BACKUP_MODEL "Salvar Model"
|
||||
#define TR_DELETE_MODEL "Borrar Model"
|
||||
#define TR_RESTORE_MODEL "Recupr.Model"
|
||||
#define TR_SDCARD_ERROR "SDCARD Error"
|
||||
#define TR_NO_SDCARD "No SDCARD"
|
||||
#define TR_INCOMPATIBLE "Inconpatible"
|
||||
#define TR_WARNING "AVISO"
|
||||
#define TR_EEPROMWARN "EEPROM"
|
||||
#define TR_THROTTLEWARN "ACELERAD"
|
||||
#define TR_ALARMSWARN "ALARMAS"
|
||||
#define TR_SWITCHWARN "LLAVE"
|
||||
#define TR_INVERT_THR "Invert acel?"
|
||||
#define TR_SPEAKER_VOLUME "Volume Altavoz"
|
||||
#define TR_LCD "LCD"
|
||||
#define TR_BRIGHTNESS "Brillo"
|
||||
#define TR_CPU_TEMP "CPU Temp.\016>"
|
||||
#define TR_CPU_CURRENT "Actual\022>"
|
||||
#define TR_CPU_MAH "Consum."
|
||||
#define TR_COPROC "CoProc."
|
||||
#define TR_COPROC_TEMP "MB Temp. \016>"
|
||||
#define TR_CAPAWARNING "Aviso Capacidad"
|
||||
#define TR_TEMPWARNING "Aviso Temperat."
|
||||
#define TR_FUNC "Funcion"
|
||||
#define TR_V1 "V1"
|
||||
#define TR_V2 "V2"
|
||||
#define TR_DURATION "Duracion"
|
||||
#define TR_DELAY "Retardo"
|
||||
#define TR_SD_CARD "SD Card"
|
||||
#define TR_SDHC_CARD "SD-HC Card"
|
||||
#define TR_NO_SOUNDS_ON_SD "No Sonido en SD"
|
||||
#define TR_NO_MODELS_ON_SD "No Modelos en SD"
|
||||
#define TR_PLAY_FILE "Play"
|
||||
#define TR_DELETE_FILE "Borrar"
|
||||
#define TR_COPY_FILE "Copiar"
|
||||
#define TR_RENAME_FILE "Renomb"
|
||||
#define TR_REMOVED "borrado"
|
||||
#define TR_SD_INFO "Infos"
|
||||
#define TR_SD_FORMAT "Formateo"
|
||||
#define TR_NA "N/A"
|
||||
#define TR_HARDWARE "HARDWARE"
|
||||
#define TR_FORMATTING "Formatting..."
|
||||
#define TR_TEMP_CALIB "Temp. Calib"
|
||||
#define TR_TIME "Time"
|
||||
#define TR_BAUDRATE "BT Baudrate"
|
||||
#define TR_SD_INFO_TITLE "SD INFO"
|
||||
#define TR_SD_TYPE "Type:"
|
||||
#define TR_SD_SPEED "Speed:"
|
||||
#define TR_SD_SECTORS "Sectors:"
|
||||
#define TR_SD_SIZE "Size:"
|
||||
#define TR_CURVE_TYPE "Type"
|
7
src/translations/font_dblsize_es.xbm
Normal file
7
src/translations/font_dblsize_es.xbm
Normal file
|
@ -0,0 +1,7 @@
|
|||
#define font_dblsize_es_width 20
|
||||
#define font_dblsize_es_height 16
|
||||
static unsigned char font_dblsize_es_bits[] = {
|
||||
0x00, 0x00, 0x00, 0x8c, 0x61, 0x0c, 0xd6, 0xb0, 0x06, 0x63, 0x18, 0x03,
|
||||
0x00, 0x00, 0x00, 0x03, 0xcf, 0x03, 0x07, 0xef, 0x07, 0x0f, 0x7f, 0x0e,
|
||||
0x1f, 0x3f, 0x0c, 0x3b, 0x0f, 0x0c, 0x73, 0x0f, 0x0c, 0xe3, 0x0f, 0x0c,
|
||||
0xc3, 0x0f, 0x0c, 0x83, 0x0f, 0x0c, 0x03, 0x0f, 0x0c, 0x00, 0x00, 0x00 };
|
|
@ -1 +1 @@
|
|||
0x7c,0x13,0x12,0x13,0x7c,0x20,0x55,0x54,0x55,0x78,0x3c,0x43,0x42,0x43,0x3c,0x38,0x45,0x44,0x45,0x38,0x3e,0x41,0x40,0x41,0x3e,0x3c,0x41,0x40,0x21,0x7c,0x7e,0x01,0x49,0x56,0x20,
|
||||
0x7c,0x13,0x12,0x13,0x7c,0x20,0x55,0x54,0x55,0x78,0x3c,0x43,0x42,0x43,0x3c,0x38,0x45,0x44,0x45,0x38,0x3e,0x41,0x40,0x41,0x3e,0x3c,0x41,0x40,0x21,0x7c,0x7e,0x01,0x49,0x56,0x20,
|
||||
|
|
5
src/translations/font_es.xbm
Normal file
5
src/translations/font_es.xbm
Normal file
|
@ -0,0 +1,5 @@
|
|||
#define font_es_width 10
|
||||
#define font_es_height 8
|
||||
static unsigned char font_es_bits[] = {
|
||||
0x94, 0x02, 0x4a, 0x01, 0x11, 0x00, 0xb3, 0x01, 0x75, 0x02, 0x39, 0x02,
|
||||
0x31, 0x02, 0x00, 0x00 };
|
Loading…
Add table
Add a link
Reference in a new issue