diff --git a/src/gtests.cpp b/src/gtests.cpp index 2913bf003..ca95e16b7 100644 --- a/src/gtests.cpp +++ b/src/gtests.cpp @@ -302,7 +302,7 @@ TEST(getSwitch, nullSW) TEST(Phases, nullFadeOut_posFadeIn) { MODEL_RESET(); - g_model.phaseData[1].swtch = SWSRC_ID1); + g_model.phaseData[1].swtch = SWSRC_ID1; g_model.phaseData[1].fadeIn = 15; perMain(); simuSetSwitch(3, 0); @@ -320,13 +320,13 @@ TEST(Mixer, Cascaded3Channels) g_model.mixData[1].srcRaw = MIXSRC_CH3; g_model.mixData[1].weight = 100; g_model.mixData[2].destCh = 2; - g_model.mixData[2].srcRaw = MIXSRC_ID1; + g_model.mixData[2].srcRaw = MIXSRC_THR; g_model.mixData[2].weight = 100; - simuSetSwitch(3, 0); + simuSetSwitch(0, 1); perOut(e_perout_mode_normal, 0); - EXPECT_EQ(chans[0], 102400); - EXPECT_EQ(chans[1], 102400); - EXPECT_EQ(chans[2], 102400); + EXPECT_EQ(chans[0], 1024*256); + EXPECT_EQ(chans[1], 1024*256); + EXPECT_EQ(chans[2], 1024*256); } TEST(Mixer, CascadedOrderedChannels) @@ -334,15 +334,15 @@ TEST(Mixer, CascadedOrderedChannels) MODEL_RESET(); MIXER_RESET(); g_model.mixData[0].destCh = 0; - g_model.mixData[0].srcRaw = MIXSRC_ID1; + g_model.mixData[0].srcRaw = MIXSRC_THR; g_model.mixData[0].weight = 100; g_model.mixData[1].destCh = 1; g_model.mixData[1].srcRaw = MIXSRC_CH1; g_model.mixData[1].weight = 100; - simuSetSwitch(3, 0); + simuSetSwitch(0, 1); perOut(e_perout_mode_normal, 0); - EXPECT_EQ(chans[0], 102400); - EXPECT_EQ(chans[1], 102400); + EXPECT_EQ(chans[0], 1024*256); + EXPECT_EQ(chans[1], 1024*256); } TEST(Mixer, Cascaded5Channels) @@ -362,23 +362,23 @@ TEST(Mixer, Cascaded5Channels) g_model.mixData[3].srcRaw = MIXSRC_CH5; g_model.mixData[3].weight = 100; g_model.mixData[4].destCh = 4; - g_model.mixData[4].srcRaw = MIXSRC_ID1; + g_model.mixData[4].srcRaw = MIXSRC_THR; g_model.mixData[4].weight = 100; for (uint8_t i=0; i<10; i++) { - simuSetSwitch(3, 0); + simuSetSwitch(0, 1); doMixerCalculations(); - EXPECT_EQ(chans[0], 102400); - EXPECT_EQ(chans[1], 102400); - EXPECT_EQ(chans[2], 102400); - EXPECT_EQ(chans[3], 102400); - EXPECT_EQ(chans[4], 102400); - simuSetSwitch(3, -1); + EXPECT_EQ(chans[0], 1024*256); + EXPECT_EQ(chans[1], 1024*256); + EXPECT_EQ(chans[2], 1024*256); + EXPECT_EQ(chans[3], 1024*256); + EXPECT_EQ(chans[4], 1024*256); + simuSetSwitch(0, 0); doMixerCalculations(); - EXPECT_EQ(chans[0], -102400); - EXPECT_EQ(chans[1], -102400); - EXPECT_EQ(chans[2], -102400); - EXPECT_EQ(chans[3], -102400); - EXPECT_EQ(chans[4], -102400); + EXPECT_EQ(chans[0], -1024*256); + EXPECT_EQ(chans[1], -1024*256); + EXPECT_EQ(chans[2], -1024*256); + EXPECT_EQ(chans[3], -1024*256); + EXPECT_EQ(chans[4], -1024*256); } } @@ -428,24 +428,10 @@ TEST(Mixer, RecursiveAddChannel) g_model.mixData[2].srcRaw = MIXSRC_Rud; g_model.mixData[2].weight = 100; perOut(e_perout_mode_normal, 0); - EXPECT_EQ(chans[0], 102400/2); + EXPECT_EQ(chans[0], 1024*256/2); EXPECT_EQ(chans[1], 0); } -TEST(Expo, AllValues) -{ - // TODO whole range - for (uint16_t x=0; x<20; x++) { - for (uint16_t k=0; k<20; k++) { - // TODO compare with the correct function instead of this one - // uint16_t ref = ((unsigned long)x*x*x/0x10000*k/(RESXul*RESXul/0x10000) + (RESKul-k)*x+RESKul/2)/RESKul; - double ref = exp(log((float)x)*(float)k/10); - printf("x=%d k=%d ref=%f res=%d\n", x, k, ref, expou(x, k)); - // EXPECT_EQ(expou(x, k), ref); - } - } -} - int main(int argc, char **argv) { StartEepromThread(NULL); diff --git a/src/lcd.cpp b/src/lcd.cpp index b9c8d093f..6062cd282 100644 --- a/src/lcd.cpp +++ b/src/lcd.cpp @@ -742,7 +742,7 @@ void putsTime(xcoord_t x, uint8_t y, putstime_t tme, LcdFlags att, LcdFlags att2 char separator = ':'; if (tme >= 3600 && (~att & DBLSIZE)) { qr = div(qr.quot, 60); - separator = 'h'; + separator = CHR_HOUR; } #else #define separator ':' @@ -853,7 +853,7 @@ void putsSwitches(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att) #if ROTARY_ENCODERS > 0 else if (idx >= SWSRC_FIRST_ROTENC_SWITCH) { idx -= SWSRC_FIRST_ROTENC_SWITCH; - char suffix = (idx & 1) ? 'l' : 's'; + char suffix = (idx & 1) ? CHR_LONG : CHR_SHORT; lcd_putcAtt(x+3*FW, y, suffix, att); return lcd_putsiAtt(x, y, STR_VRENCODERS, idx/2, att); } @@ -862,7 +862,7 @@ void putsSwitches(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att) #if !defined(CPUM64) else if (idx >= SWSRC_TRAINER_SHORT) { idx -= SWSRC_TRAINER_SHORT; - lcd_putcAtt(x+3*FW, y, (idx & 1) ? 'l' : 's', att); + lcd_putcAtt(x+3*FW, y, (idx & 1) ? CHR_LONG : CHR_SHORT, att); #if ROTARY_ENCODERS > 0 if (idx >= 2) { idx -= 2; @@ -878,8 +878,8 @@ void putsSwitches(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att) if (idx > SWSRC_ON) { idx -= SWSRC_ON; - char suffix = 'm'; - if (~att & SWCONDENSED) lcd_putcAtt(x+3*FW, y, suffix, att); + char suffix = CHR_TOGGLE; + if (idx != SWSRC_ON && (~att & SWCONDENSED)) lcd_putcAtt(x+3*FW, y, suffix, att); } lcd_putsiAtt(x, y, STR_VSWITCHES, idx-1, att); } diff --git a/src/menu_general.cpp b/src/menu_general.cpp index f941d70c8..f6998eba1 100644 --- a/src/menu_general.cpp +++ b/src/menu_general.cpp @@ -148,6 +148,7 @@ enum menuGeneralSetupItems { IF_FRSKY(ITEM_SETUP_TIMEZONE) IF_FRSKY(ITEM_SETUP_GPSFORMAT) IF_PXX(ITEM_SETUP_COUNTRYCODE) + IF_CPUARM(ITEM_SETUP_IMPERIAL) ITEM_SETUP_RX_CHANNEL_ORD, ITEM_SETUP_STICK_MODE_LABELS, ITEM_SETUP_STICK_MODE, @@ -166,7 +167,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BEEPER(0) 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) IF_PXX(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BEEPER(0) 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) IF_PXX(0) IF_CPUARM(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); uint8_t sub = m_posVert - 1; @@ -484,6 +485,12 @@ void menuGeneralSetup(uint8_t event) break; #endif +#if defined(CPUARM) + case ITEM_SETUP_IMPERIAL: + g_eeGeneral.imperial = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_UNITSSYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr, event); + break; +#endif + case ITEM_SETUP_RX_CHANNEL_ORD: lcd_putsLeft(y, STR_RXCHANNELORD); // RAET->AETR for (uint8_t i=1; i<=4; i++) diff --git a/src/menu_model.cpp b/src/menu_model.cpp index 6172a9578..148d8a4b7 100644 --- a/src/menu_model.cpp +++ b/src/menu_model.cpp @@ -58,12 +58,6 @@ enum EnumTabModel { IF_TEMPLATES(e_Templates) }; -#if LCD_W >= 212 -const char * STR_PHASES_HEADERS[] = { " Name ", " Switch ", " Trims ", " Fade In ", " Fade Out " }; -const char * STR_LIMITS_HEADERS[] = { " Name ", " Offset ", " Min ", " Max ", " Direction ", " PPM Center ", " Symetrical " }; -const char * STR_CSW_HEADERS[] = { " Function ", " V1 ", " V2 ", " AND Switch ", " Duration ", " Delay " }; -#endif - void menuModelSelect(uint8_t event); void menuModelSetup(uint8_t event); void menuModelHeli(uint8_t event); @@ -552,7 +546,7 @@ void menuModelSelect(uint8_t event) lcd_puts(27*FW-(LEN_FREE-4)*FW, 0, STR_FREE); if (event) reusableBuffer.models.eepromfree = EeFsGetFree(); lcd_outdezAtt(20*FW, 0, reusableBuffer.models.eepromfree, 0); - lcd_puts(21*FW, 0, "bytes"); // TODO translations + lcd_puts(21*FW, 0, STR_BYTES); #elif !defined(PCBSKY9X) lcd_puts(9*FW-(LEN_FREE-4)*FW, 0, STR_FREE); if (event) reusableBuffer.models.eepromfree = EeFsGetFree(); @@ -987,7 +981,7 @@ void menuModelSetup(uint8_t event) break; case ITEM_MODE_INTERNAL_MODULE_MODE: - lcd_putsLeft(y, PSTR("\001Mode")); + lcd_putsLeft(y, STR_MODE); lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""X16\0""D8\0 ""LR12"), 1+g_model.rfProtocol, m_posHorz==0 ? attr : 0); lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+5*FW+3, y, STR_CH, m_posHorz==1 ? attr : 0); lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | (m_posHorz==1 ? attr : 0)); @@ -1025,8 +1019,8 @@ void menuModelSetup(uint8_t event) checkModelIdUnique(g_eeGeneral.currModel); } - lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+3*FW, y, PSTR("[Bind]"), m_posHorz==1 ? attr : 0); - lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, PSTR("[Range]"), m_posHorz==2 ? attr : 0); + lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_MODULE_BIND, m_posHorz==1 ? attr : 0); + lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_MODULE_RANGE, m_posHorz==2 ? attr : 0); { uint8_t newFlag = 0; if (attr && m_posHorz>0 && s_editMode>0) { @@ -1044,8 +1038,8 @@ void menuModelSetup(uint8_t event) case ITEM_MODE_INTERNAL_MODULE_FAILSAFE: lcd_putsLeft(y, TR_FAILSAFE); - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\011""Hold\0 ""Custom\0 ""No pulses"), g_model.failsafeMode, m_posHorz==0 ? attr : 0); - if (g_model.failsafeMode == FAILSAFE_CUSTOM) lcd_putsAtt(MODEL_SETUP_2ND_COLUMN + 10*FW, y, PSTR("[Set]"), m_posHorz==1 ? attr : 0); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, g_model.failsafeMode, m_posHorz==0 ? attr : 0); + if (g_model.failsafeMode == FAILSAFE_CUSTOM) lcd_putsAtt(MODEL_SETUP_2ND_COLUMN + 10*FW, y, STR_SET, m_posHorz==1 ? attr : 0); if (attr) { if (g_model.failsafeMode != FAILSAFE_CUSTOM) m_posHorz = 0; diff --git a/src/myeeprom.h b/src/myeeprom.h index cfd5e44e2..67861d92c 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -144,7 +144,8 @@ enum BeeperMode { uint8_t optrexDisplay; \ uint8_t sticksGain; \ uint8_t rotarySteps; \ - uint8_t countryCode; + uint8_t countryCode; \ + uint8_t imperial; #elif defined(PXX) #define EXTRA_GENERAL_FIELDS uint8_t countryCode; #else @@ -531,7 +532,9 @@ PACK(typedef struct t_CustomFnData { // Function Switches data PACK(union { char name[LEN_CFN_NAME]; struct { - uint32_t val; + int16_t val; + int16_t ext1; + int16_t ext2; } composite; }) param; uint8_t mode:2; diff --git a/src/opentx.cpp b/src/opentx.cpp index 06d8316a5..d13230643 100644 --- a/src/opentx.cpp +++ b/src/opentx.cpp @@ -1382,29 +1382,30 @@ void setGVarValue(uint8_t idx, int16_t value, int8_t phase) #if defined(FRSKY) || defined(CPUARM) inline void convertUnit(getvalue_t & val, uint8_t & unit) { -#if defined(IMPERIAL_UNITS) - if (unit == UNIT_DEGREES) { - val += 18; - val *= 115; - val >>= 6; + if (IS_IMPERIAL_ENABLE()) { + if (unit == UNIT_DEGREES) { + val += 18; + val *= 115; + val >>= 6; + } + if (unit == UNIT_METERS) { + // m to ft *105/32 + val = val * 3 + (val >> 2) + (val >> 5); + } + if (unit == UNIT_FEET) { + unit = UNIT_METERS; + } + if (unit == UNIT_KTS) { + unit = UNIT_KMH; + } } - if (unit == UNIT_METERS) { - // m to ft *105/32 - val = val * 3 + (val >> 2) + (val >> 5); + else { + if (unit == UNIT_KTS) { + // kts to km/h + unit = UNIT_KMH; + val = (val * 46) / 25; + } } - if (unit == UNIT_FEET) { - unit = UNIT_METERS; - } - if (unit == UNIT_KTS) { - unit = UNIT_KMH; - } -#else - if (unit == UNIT_KTS) { - // kts to km/h - unit = UNIT_KMH; - val = (val * 46) / 25; - } -#endif } void putsTelemetryValue(xcoord_t x, uint8_t y, lcdint_t val, uint8_t unit, uint8_t att) @@ -2267,8 +2268,8 @@ PLAY_FUNCTION(playValue, uint8_t idx) #endif case MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT-1: case MIXSRC_FIRST_TELEM-1+TELEM_MAX_ALT-1: -#if defined(IMPERIAL_UNITS) - if (g_model.frsky.usrProto == USR_PROTO_WS_HOW_HIGH) +#if defined(WS_HOW_HIGH) + if (IS_IMPERIAL_ENABLE() && g_model.frsky.usrProto == USR_PROTO_WS_HOW_HIGH) PLAY_NUMBER(val, 1+UNIT_FEET, 0); else #endif @@ -2410,18 +2411,22 @@ void evalFunctions() active = !(activeFnSwitches & switch_mask); #if !defined(CPUARM) if (CFN_FUNC(sd) == FUNC_PLAY_BOTH && !active) { - momentary = 1; + momentary = true; } else #endif { - momentary = 0; + momentary = false; } } } + else if (swtch == SWSRC_ON) { + active = false; + momentary = false; + } else { active = (activeFnSwitches & switch_mask); - momentary = 0; + momentary = false; } #if !defined(CPUM64) if (short_long) { @@ -2437,11 +2442,19 @@ void evalFunctions() } #if !defined(CPUARM) else if (CFN_FUNC(sd) == FUNC_PLAY_BOTH) { - momentary = 1; + momentary = true; } #endif if (active || momentary) { + + if (active) + TRACE_DEBUG("ACTIVE "); + if (momentary) + TRACE_DEBUG("MOMENTARY "); + + TRACE_DEBUG("\n"); + if (CFN_ACTIVE(sd)) { if (CFN_FUNC(sd) < FUNC_TRAINER) { safetyCh[CFN_CH_NUMBER(sd)] = CFN_PARAM(sd); diff --git a/src/opentx.h b/src/opentx.h index c9810a770..6ee53bb1d 100644 --- a/src/opentx.h +++ b/src/opentx.h @@ -1382,5 +1382,13 @@ void varioWakeup(); #define IS_SOUND_OFF() (g_eeGeneral.beeperMode == e_mode_quiet) #endif +#if defined(CPUARM) + #define IS_IMPERIAL_ENABLE() (g_eeGeneral.imperial) +#elif defined(IMPERIAL) + #define IS_IMPERIAL_ENABLE() (1) +#else + #define IS_IMPERIAL_ENABLE() (0) +#endif + #endif diff --git a/src/translations.cpp b/src/translations.cpp index 8a7e45259..7ab44cd8b 100644 --- a/src/translations.cpp +++ b/src/translations.cpp @@ -70,7 +70,12 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(FUNCSOUNDS) ISTR(VTELEMCHNS) #if defined(FRSKY) || defined(CPUARM) + #if defined(CPUARM) + ISTR(VTELEMUNIT_IMP) + ISTR(VTELEMUNIT_NORM) + #else ISTR(VTELEMUNIT) + #endif ISTR(VALARM) ISTR(VALARMFN) ISTR(VTELPROTO) @@ -79,17 +84,17 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(VARIOSRC) ISTR(VSCREEN) #endif -#ifdef TEMPLATES +#if defined(TEMPLATES) ISTR(VTEMPLATES) #endif -#ifdef HELI +#if defined(HELI) ISTR(VSWASHTYPE) #endif ISTR(VKEYS) ISTR(VSWITCHES) ISTR(VSRCRAW) ISTR(VTMRMODES) -#if defined(PCBGRUVIN9X) || defined (CPUARM) +#if defined(PCBGRUVIN9X) || defined(CPUARM) ISTR(DATETIME) #endif #if defined(CPUARM) @@ -301,9 +306,10 @@ const pm_char STR_RXNUM[] PROGMEM = TR_RXNUM; const pm_char STR_SYNCMENU[] PROGMEM = TR_SYNCMENU; const pm_char STR_INTERNALRF[] PROGMEM = TR_INTERNALRF; const pm_char STR_EXTERNALRF[] PROGMEM = TR_EXTERNALRF; -const pm_char STR_FAILSAFE[] PROGMEM = TR_FAILSAFE; -const pm_char STR_FAILSAFESET[] PROGMEM = TR_FAILSAFESET; const pm_char STR_COUNTRYCODE[] PROGMEM = TR_COUNTRYCODE; +const pm_char STR_FAILSAFE[] PROGMEM = TR_FAILSAFE; +const pm_char STR_VFAILSAFE[] PROGMEM = "\011""Hold\0 ""Custom\0 ""No pulses"; // TODO non-zero terminated +const pm_char STR_FAILSAFESET[] PROGMEM = TR_FAILSAFESET; #endif const pm_char STR_INVERT_THR[] PROGMEM = TR_INVERT_THR; @@ -327,6 +333,8 @@ const pm_char STR_CURRENT[] PROGMEM = TR_CURRENT; #if defined(CPUARM) const pm_char STR_CURRENT_CALIB[] PROGMEM = TR_CURRENT_CALIB; +const pm_char STR_UNITSSYSTEM[] PROGMEM = "Units"; +const pm_char STR_VUNITSSYSTEM[] PROGMEM = TR("\006MetricImper.", "\010Metric\0 Imperial"); // TODO move it to non-zero terminated strings #endif #if defined(NAVIGATION_MENUS) @@ -412,10 +420,23 @@ const pm_char STR_DATE[] PROGMEM = TR_DATE; const pm_char STR_CHANNELS_MONITOR[] PROGMEM = TR_CHANNELS_MONITOR; #if LCD_W >= 212 -const pm_char STR_MODELNAME[] PROGMEM = TR_MODELNAME; -const pm_char STR_PHASENAME[] PROGMEM = TR_PHASENAME; -const pm_char STR_MIXNAME[] PROGMEM = TR_MIXNAME; -const pm_char STR_EXPONAME[] PROGMEM = TR_EXPONAME; + const pm_char STR_MODELNAME[] PROGMEM = TR_MODELNAME; + const pm_char STR_PHASENAME[] PROGMEM = TR_PHASENAME; + const pm_char STR_MIXNAME[] PROGMEM = TR_MIXNAME; + const pm_char STR_EXPONAME[] PROGMEM = TR_EXPONAME; +#endif + +#if LCD_W >= 212 + const char * STR_PHASES_HEADERS[] = { " Name ", " Switch ", " Trims ", " Fade In ", " Fade Out " }; + const char * STR_LIMITS_HEADERS[] = { " Name ", " Offset ", " Min ", " Max ", " Direction ", " PPM Center ", " Symetrical " }; + const char * STR_CSW_HEADERS[] = { " Function ", " V1 ", " V2 ", " AND Switch ", " Duration ", " Delay " }; +#endif + +#if defined(PCBTARANIS) +const pm_char STR_BYTES[] PROGMEM = "bytes"; +const pm_char STR_MODULE_BIND[] PROGMEM = "[Bind]"; +const pm_char STR_MODULE_RANGE[] PROGMEM = "[Range]"; +const pm_char STR_SET[] PROGMEM = "[Set]"; #endif const pm_uchar font_5x7[] PROGMEM = { diff --git a/src/translations.h b/src/translations.h index cddf9c9e9..116733c24 100644 --- a/src/translations.h +++ b/src/translations.h @@ -67,9 +67,9 @@ #define EOFS(x) ( OFS_##x + sizeof(TR_##x) ) #if LCD_W >= 212 -#define TR(x,y) y + #define TR(x,y) y #else -#define TR(x,y) x + #define TR(x,y) x #endif // The non-0-terminated-strings @@ -111,8 +111,14 @@ extern const pm_char STR_OPEN9X[]; #define OFS_FUNCSOUNDS (OFS_VFSWRESET + sizeof(TR_VFSWRESET)) #define OFS_VTELEMCHNS (OFS_FUNCSOUNDS + sizeof(TR_FUNCSOUNDS)) #if defined(FRSKY) || defined(CPUARM) - #define OFS_VTELEMUNIT (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS)) - #define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT)) + #if defined(CPUARM) + #define OFS_VTELEMUNIT_IMP (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS)) + #define OFS_VTELEMUNIT_NORM (OFS_VTELEMUNIT_IMP + sizeof(TR_VTELEMUNIT_IMP)) + #define OFS_VALARM (OFS_VTELEMUNIT_NORM + sizeof(TR_VTELEMUNIT_NORM)) + #else + #define OFS_VTELEMUNIT (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS)) + #define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT)) + #endif #define OFS_VALARMFN (OFS_VALARM + sizeof(TR_VALARM)) #define OFS_VTELPROTO (OFS_VALARMFN + sizeof(TR_VALARMFN)) #define OFS_GPSFORMAT (OFS_VTELPROTO + sizeof(TR_VTELPROTO)) @@ -180,7 +186,11 @@ extern const pm_char STR_OPEN9X[]; #define STR_VTELEMCHNS (STR_OPEN9X + OFS_VTELEMCHNS) #if defined(FRSKY) || defined(CPUARM) -#define STR_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT) + #if defined(CPUARM) + #define STR_VTELEMUNIT (STR_OPEN9X + (g_eeGeneral.imperial ? OFS_VTELEMUNIT_IMP : OFS_VTELEMUNIT_NORM)) + #else + #define STR_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT) + #endif #define STR_VALARM (STR_OPEN9X + OFS_VALARM) #define STR_VALARMFN (STR_OPEN9X + OFS_VALARMFN) #define STR_VTELPROTO (STR_OPEN9X + OFS_VTELPROTO) @@ -409,6 +419,7 @@ extern const pm_char STR_INTERNALRF[]; extern const pm_char STR_EXTERNALRF[]; extern const pm_char STR_FAILSAFE[]; extern const pm_char STR_FAILSAFESET[]; +extern const pm_char STR_VFAILSAFE[]; // TODO non-zero terminated extern const pm_char STR_COUNTRYCODE[]; #endif @@ -436,6 +447,8 @@ extern const pm_char STR_CURRENT[]; #if defined(CPUARM) extern const pm_char STR_CURRENT_CALIB[]; #define LEN_CALIB_FIELDS (PSIZE(TR_BATT_CALIB) > PSIZE(TR_CURRENT_CALIB) ? PSIZE(TR_BATT_CALIB) : PSIZE(TR_CURRENT_CALIB)) + extern const pm_char STR_UNITSSYSTEM[]; + extern const pm_char STR_VUNITSSYSTEM[]; #else #define LEN_CALIB_FIELDS PSIZE(TR_BATT_CALIB) #endif @@ -551,4 +564,23 @@ extern const pm_char STR_CHANNELS_MONITOR[]; #define STR_EXPONAME STR_NAME #endif +#if LCD_W >= 212 + extern const char * STR_PHASES_HEADERS[]; + extern const char * STR_LIMITS_HEADERS[]; + extern const char * STR_CSW_HEADERS[]; +#endif + +#if defined(PCBTARANIS) + extern const pm_char STR_BYTES[]; + extern const pm_char STR_MODULE_BIND[]; + extern const pm_char STR_MODULE_RANGE[]; + extern const pm_char STR_SET[]; +#endif + +// TODO move to translations files +#define CHR_SHORT 's' +#define CHR_LONG 'l' +#define CHR_TOGGLE 't' +#define CHR_HOUR 'h' + #endif diff --git a/src/translations/en.h b/src/translations/en.h index a19d03873..78199bda5 100644 --- a/src/translations/en.h +++ b/src/translations/en.h @@ -227,16 +227,23 @@ #define LEN_VTELEMCHNS "\004" #define TR_VTELEMCHNS "---\0""Batt""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""VSpd""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cur+""Acc\0""Time" -#ifdef IMPERIAL_UNITS - #define LENGTH_UNIT "ft\0" - #define SPEED_UNIT "kts" +#if defined(CPUARM) + #define LEN_VTELEMUNIT_NORM "\003" + #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_IMP "\003" + #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else - #define LENGTH_UNIT "m\0 " - #define SPEED_UNIT "kmh" + #if defined(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 " #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) @@ -299,9 +306,9 @@ #endif #if defined(PCBTARANIS) - #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_CUSTOMSW " ON" + #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_CUSTOMSW "One" #else - #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_CUSTOMSW " ON" + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_CUSTOMSW "One" #endif #if defined(PCBSKY9X) @@ -336,10 +343,10 @@ #define TR_ENTER "[MENU]" #endif -#define TR_POPUPS TR_ENTER"\010[EXIT]" +#define TR_POPUPS TR_ENTER "\010[EXIT]" #define OFS_EXIT sizeof(TR_ENTER) -#define TR_MENUWHENDONE CENTER"\006"TR_ENTER" WHEN DONE" +#define TR_MENUWHENDONE CENTER "\006" TR_ENTER " WHEN DONE" #define TR_FREE "free" #define TR_DELETEMODEL "DELETE MODEL" #define TR_COPYINGMODEL "Copying model..." @@ -366,7 +373,7 @@ #define TR_FADEIN "Fade In" #define TR_FADEOUT "Fade Out" #define TR_DEFAULT "(default)" -#define TR_CHECKTRIMS CENTER"\006Check\012Trims" +#define TR_CHECKTRIMS CENTER "\006Check\012Trims" #define OFS_CHECKTRIMS CENTER_OFS+(9*FW) #define TR_SWASHTYPE "Swash Type" #define TR_COLLECTIVE TR("Collective","Collective source") @@ -438,14 +445,14 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER"\006"TR_ENTER" TO START" -#define TR_SETMIDPOINT CENTER"\003SET STICKS MIDPOINT" -#define TR_MOVESTICKSPOTS CENTER"\006MOVE STICKS/POTS" +#define TR_MENUTOSTART CENTER "\006" TR_ENTER " TO START" +#define TR_SETMIDPOINT CENTER "\003SET STICKS MIDPOINT" +#define TR_MOVESTICKSPOTS CENTER "\006MOVE STICKS/POTS" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" -#define TR_NODATA CENTER"NO DATA" +#define TR_NODATA CENTER "NO DATA" #define TR_TM1TM2 "TM1\032TM2" #define TR_THRTHP "THR\032TH%" #define TR_TOT "TOT" @@ -462,7 +469,7 @@ #define TR_T10MSUS "T10ms\016us" #define TR_FREESTACKMINB "Free Stack\010b" -#define TR_MENUTORESET CENTER TR_ENTER" to reset" +#define TR_MENUTORESET CENTER TR_ENTER " to reset" #define TR_PPM "PPM" #define TR_CH "CH" #define TR_MODEL "MODEL" @@ -470,13 +477,13 @@ #define TR_MIX "MIX" #define TR_EEPROMLOWMEM "EEPROM low mem" #define TR_ALERT "\016ALERT" -#define TR_PRESSANYKEYTOSKIP CENTER"Press any key to skip" -#define TR_THROTTLENOTIDLE CENTER"Throttle not idle" -#define TR_ALARMSDISABLED CENTER"Alarms Disabled" -#define TR_PRESSANYKEY TR("\010Press any Key", CENTER"Press any Key") -#define TR_BADEEPROMDATA CENTER"Bad EEprom Data" -#define TR_EEPROMFORMATTING CENTER"Formatting EEPROM" -#define TR_EEPROMOVERFLOW CENTER"EEPROM overflow" +#define TR_PRESSANYKEYTOSKIP CENTER "Press any key to skip" +#define TR_THROTTLENOTIDLE CENTER "Throttle not idle" +#define TR_ALARMSDISABLED CENTER "Alarms Disabled" +#define TR_PRESSANYKEY TR("\010Press any Key", CENTER "Press any Key") +#define TR_BADEEPROMDATA CENTER "Bad EEprom Data" +#define TR_EEPROMFORMATTING CENTER "Formatting EEPROM" +#define TR_EEPROMOVERFLOW CENTER "EEPROM overflow" #define TR_MENURADIOSETUP "RADIO SETUP" #define TR_MENUDATEANDTIME "DATE AND TIME" #define TR_MENUTRAINER "TRAINER" diff --git a/src/translations/tts_en.cpp b/src/translations/tts_en.cpp index 60f80e68e..22347a8e5 100644 --- a/src/translations/tts_en.cpp +++ b/src/translations/tts_en.cpp @@ -93,7 +93,16 @@ PLAY_FUNCTION(playNumber, getvalue_t number, uint8_t unit, uint8_t att) number = -number; } - convertUnit(number, unit); + if (unit) { + unit--; + convertUnit(number, unit); + if (IS_IMPERIAL_ENABLE()) { + if (unit == UNIT_METERS) { + unit = UNIT_FEET; + } + } + unit++; + } int8_t mode = MODE(att); if (mode > 0) { diff --git a/src/view_telemetry.cpp b/src/view_telemetry.cpp index 2297ab469..0fadff8e0 100644 --- a/src/view_telemetry.cpp +++ b/src/view_telemetry.cpp @@ -203,11 +203,11 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, case TELEM_ALT-1: putsTelemetryValue(x, y, val/10, UNIT_METERS, att|PREC1); break; -#elif defined(IMPERIAL_UNITS) +#elif defined(WS_HOW_HIGH) case TELEM_ALT-1: case TELEM_MIN_ALT-1: case TELEM_MAX_ALT-1: - if (g_model.frsky.usrProto == USR_PROTO_WS_HOW_HIGH) { + if (IS_IMPERIAL_ENABLE() && g_model.frsky.usrProto == USR_PROTO_WS_HOW_HIGH) { putsTelemetryValue(x, y, val, UNIT_FEET, att); break; }