1
0
Fork 0
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:
bsongis 2012-10-23 17:21:02 +00:00
parent 93eafc667a
commit e4f45398df
16 changed files with 862 additions and 251 deletions

View file

@ -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

View file

@ -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;

View file

@ -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--;

View file

@ -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;
}

View file

@ -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) {

View file

@ -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);
}

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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
};

View file

@ -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[];

View file

@ -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
View 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"

View 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 };

View file

@ -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,

View 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 };