From 82b9ecc155d04687232446ec98139b29d1435b6b Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 30 Aug 2016 19:00:31 +0200 Subject: [PATCH] [Horus] Refactoring for the new fatal errors --- radio/src/definitions.h | 1 + radio/src/gui/common/colorlcd/widgets.cpp | 26 ++++++++ radio/src/gui/gui_common.h | 2 + radio/src/main_arm.cpp | 5 +- radio/src/opentx.cpp | 12 ++++ radio/src/targets/horus/backlight_driver.cpp | 66 ++++++++++++-------- radio/src/targets/horus/board.cpp | 26 +++----- radio/src/targets/horus/board.h | 10 +++ radio/src/targets/horus/hal.h | 34 +++++----- radio/src/targets/horus/pwr_driver.cpp | 12 +++- radio/src/targets/horus/sdio_sd.c | 7 --- radio/src/targets/simu/simpgmspace.cpp | 11 +--- radio/src/translations.cpp | 2 + radio/src/translations.h | 4 +- radio/src/translations/cz.h.txt | 2 + radio/src/translations/de.h.txt | 2 + radio/src/translations/en.h.txt | 2 + radio/src/translations/es.h.txt | 2 + radio/src/translations/fi.h.txt | 2 + radio/src/translations/fr.h.txt | 2 + radio/src/translations/it.h.txt | 2 + radio/src/translations/nl.h.txt | 2 + radio/src/translations/pl.h.txt | 2 + radio/src/translations/pt.h.txt | 2 + radio/src/translations/se.h.txt | 2 + 25 files changed, 165 insertions(+), 75 deletions(-) diff --git a/radio/src/definitions.h b/radio/src/definitions.h index 5ae96c16e..d18ebbd84 100644 --- a/radio/src/definitions.h +++ b/radio/src/definitions.h @@ -68,6 +68,7 @@ typedef __int24 int24_t; #endif #define NOINLINE __attribute__ ((noinline)) #define SIMU_SLEEP(x) +#define SIMU_SLEEP_NORET(x) #define CONVERT_PTR_UINT(x) ((uint32_t)(x)) #define CONVERT_UINT_PTR(x) ((uint32_t *)(x)) #endif diff --git a/radio/src/gui/common/colorlcd/widgets.cpp b/radio/src/gui/common/colorlcd/widgets.cpp index 33b528a29..3666eacf8 100644 --- a/radio/src/gui/common/colorlcd/widgets.cpp +++ b/radio/src/gui/common/colorlcd/widgets.cpp @@ -63,4 +63,30 @@ swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t e return value; } +void drawFatalErrorScreen(const char * message) +{ + lcdClear(); + lcdDrawText(LCD_W/2, LCD_H/2-20, message, DBLSIZE|CENTERED|TEXT_BGCOLOR); + lcdRefresh(); +} +void runFatalErrorScreen(const char * message) +{ + while (1) { + drawFatalErrorScreen(message); + uint8_t refresh = false; + while (1) { + uint32_t pwr_check = pwrCheck(); + if (pwr_check == e_power_off) { + boardOff(); + } + else if (pwr_check == e_power_press) { + refresh = true; + } + else if (pwr_check == e_power_on && refresh) { + break; + } + SIMU_SLEEP_NORET(1); + } + } +} \ No newline at end of file diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 08f6ccbaa..e9c052430 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -105,6 +105,8 @@ void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFla int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags flags, event_t event); uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags flags, event_t event); swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags flags, event_t event); +void drawFatalErrorScreen(const char * message); +void runFatalErrorScreen(const char * message); #endif #endif // _GUI_COMMON_H_ diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index 28807575e..ee32fcf9c 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -406,7 +406,9 @@ void perMain() doLoopCommonActions(); #if defined(NAVIGATION_STICKS) uint8_t sticks_evt = getSticksNavigationEvent(); - if (sticks_evt) evt = sticks_evt; + if (sticks_evt) { + evt = sticks_evt; + } #endif #if defined(RAMBACKUP) @@ -419,6 +421,7 @@ void perMain() #endif #if !defined(EEPROM) + // In case the SD card is removed during the session if (!SD_CARD_PRESENT()) { lcd->clear(); lcdDrawText(LCD_W/2, LCD_H/2-20, STR_NO_SDCARD, DBLSIZE|CENTERED|TEXT_BGCOLOR); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 2263c1f3d..bf8c9ca00 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2706,6 +2706,18 @@ int main() init_rotary_sw(); #endif +#if defined(PCBHORUS) + if (!IS_FIRMWARE_COMPATIBLE_WITH_BOARD()) { + runFatalErrorScreen(STR_WRONG_PCBREV); + } +#endif + +#if !defined(EEPROM) + if (!SD_CARD_PRESENT()) { + runFatalErrorScreen(STR_NO_SDCARD); + } +#endif + #if defined(CPUARM) tasksStart(); #else diff --git a/radio/src/targets/horus/backlight_driver.cpp b/radio/src/targets/horus/backlight_driver.cpp index 5b9a5e80e..be103c6a5 100644 --- a/radio/src/targets/horus/backlight_driver.cpp +++ b/radio/src/targets/horus/backlight_driver.cpp @@ -23,13 +23,24 @@ void backlightInit() { GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = BL_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(BL_GPIO, &GPIO_InitStructure); - GPIO_PinAFConfig(BL_GPIO, BL_GPIO_PinSource, BL_GPIO_AF); + if (IS_HORUS_PROD()) { + GPIO_InitStructure.GPIO_Pin = PROD_BL_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(BL_GPIO, &GPIO_InitStructure); + GPIO_PinAFConfig(BL_GPIO, PROD_BL_GPIO_PinSource, PROD_BL_GPIO_AF); + } + else { + GPIO_InitStructure.GPIO_Pin = BETA_BL_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(BL_GPIO, &GPIO_InitStructure); + GPIO_PinAFConfig(BL_GPIO, BETA_BL_GPIO_PinSource, BETA_BL_GPIO_AF); + } } void backlightEnable(uint8_t dutyCycle) @@ -51,31 +62,36 @@ void backlightEnable(uint8_t dutyCycle) TIM_TimeBaseStructure.TIM_Period = 100; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; - TIM_TimeBaseInit(BL_TIMER, &TIM_TimeBaseStructure); - - TIM_Cmd(BL_TIMER, DISABLE); + if (IS_HORUS_PROD()) { + TIM_TimeBaseInit(PROD_BL_TIMER, &TIM_TimeBaseStructure); + TIM_Cmd(PROD_BL_TIMER, DISABLE); + } + else { + TIM_TimeBaseInit(BETA_BL_TIMER, &TIM_TimeBaseStructure); + TIM_Cmd(BETA_BL_TIMER, DISABLE); + } /* PWM mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; -#if PCBREV >= 13 - TIM_OCInitStructure.TIM_Pulse = dutyCycle; -#else - TIM_OCInitStructure.TIM_Pulse = (100 - dutyCycle); -#endif + if (IS_HORUS_PROD()) + TIM_OCInitStructure.TIM_Pulse = dutyCycle; + else + TIM_OCInitStructure.TIM_Pulse = (100 - dutyCycle); + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set; -#if PCBREV >= 13 - TIM_OC4Init(BL_TIMER, &TIM_OCInitStructure); -#else - TIM_OC1Init(BL_TIMER, &TIM_OCInitStructure); -#endif - - TIM_Cmd(BL_TIMER, ENABLE); - TIM_CtrlPWMOutputs(BL_TIMER, ENABLE); + if (IS_HORUS_PROD()) { + TIM_OC4Init(PROD_BL_TIMER, &TIM_OCInitStructure); + TIM_Cmd(PROD_BL_TIMER, ENABLE); + TIM_CtrlPWMOutputs(PROD_BL_TIMER, ENABLE); + } + else { + TIM_OC1Init(BETA_BL_TIMER, &TIM_OCInitStructure); + TIM_Cmd(BETA_BL_TIMER, ENABLE); + TIM_CtrlPWMOutputs(BETA_BL_TIMER, ENABLE); + } } - - diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 9c8b4971f..ead735316 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -39,20 +39,6 @@ void watchdogInit(unsigned int duration) IWDG->KR = 0xCCCC; // start } -void getCPUUniqueID(char * s) -{ -#if defined(SIMU) - uint32_t cpu_uid[3] = {0x12345678, 0x55AA55AA, 0x87654321}; -#else - uint32_t * cpu_uid = (uint32_t *)0x1FFF7A10; -#endif - char * tmp = strAppendUnsigned(s, cpu_uid[0], 8, 16); - *tmp = ' '; - tmp = strAppendUnsigned(tmp+1, cpu_uid[1], 8, 16); - *tmp = ' '; - strAppendUnsigned(tmp+1, cpu_uid[2], 8, 16); -} - // Start TIMER7 at 2000000Hz void init2MhzTimer() { @@ -116,9 +102,11 @@ void boardInit() { #if !defined(SIMU) RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | + PCBREV_RCC_AHB1Periph | LED_RCC_AHB1Periph | LCD_RCC_AHB1Periph | BL_RCC_AHB1Periph | + SD_RCC_AHB1Periph | AUDIO_RCC_AHB1Periph | KEYS_RCC_AHB1Periph_GPIO | ADC_RCC_AHB1Periph | @@ -131,9 +119,9 @@ void boardInit() EXTMODULE_RCC_AHB1Periph | GPS_RCC_AHB1Periph, ENABLE); + RCC_APB1PeriphClockCmd(INTERRUPT_5MS_RCC_APB1Periph | TIMER_2MHz_RCC_APB1Periph | - BL_RCC_APB1Periph | AUDIO_RCC_APB1Periph | SERIAL_RCC_APB1Periph | TELEMETRY_RCC_APB1Periph | @@ -144,7 +132,6 @@ void boardInit() GPS_RCC_APB1Periph, ENABLE); RCC_APB2PeriphClockCmd(LCD_RCC_APB2Periph | - BL_RCC_APB2Periph | ADC_RCC_APB2Periph | HAPTIC_RCC_APB2Periph | INTMODULE_RCC_APB2Periph | @@ -152,6 +139,13 @@ void boardInit() ENABLE); pwrInit(); + + // must be called after pwrInit() because the PCBREV GPIO is initialized there + if (IS_HORUS_PROD()) + RCC_APB1PeriphClockCmd(PROD_BL_RCC_APB1Periph,ENABLE); + else + RCC_APB2PeriphClockCmd(BETA_BL_RCC_APB2Periph,ENABLE); + delaysInit(); // FrSky removed the volume chip in latest board, that's why it doesn't answer! diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 500a7e3e3..deaf67318 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -95,6 +95,16 @@ void delay_ms(uint32_t ms); } #endif +// PCBREV driver +#define IS_HORUS_PROD() GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) +#if defined(SIMU) + #define IS_FIRMWARE_COMPATIBLE_WITH_BOARD() true +#elif PCBREV >= 13 + #define IS_FIRMWARE_COMPATIBLE_WITH_BOARD() IS_HORUS_PROD() +#else + #define IS_FIRMWARE_COMPATIBLE_WITH_BOARD() (!IS_HORUS_PROD()) +#endif + // CPU Unique ID #define LEN_CPU_UID (3*8+2) void getCPUUniqueID(char * s); diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index d4119c4c1..a8d2b49b9 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -138,6 +138,11 @@ #define PWR_ON_GPIO_PIN GPIO_Pin_1 // PJ.01 #define PWR_SWITCH_GPIO_PIN GPIO_Pin_0 // PJ.00 +// PCBREV +#define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOI +#define PCBREV_GPIO GPIOI +#define PCBREV_GPIO_PIN GPIO_Pin_11 // PI.11 + // Led #define LED_RCC_AHB1Periph RCC_AHB1Periph_GPIOI #define LED_GPIO GPIOI @@ -201,21 +206,20 @@ // Backlight #define BL_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define BL_GPIO GPIOA -#if PCBREV >= 13 -#define BL_TIMER TIM5 -#define BL_GPIO_PIN GPIO_Pin_3 // PA.03 -#define BL_GPIO_PinSource GPIO_PinSource3 -#define BL_RCC_APB1Periph RCC_APB1Periph_TIM5 -#define BL_RCC_APB2Periph 0 -#define BL_GPIO_AF GPIO_AF_TIM5 -#else -#define BL_TIMER TIM8 -#define BL_GPIO_PIN GPIO_Pin_5 // PA.05 -#define BL_GPIO_PinSource GPIO_PinSource5 -#define BL_RCC_APB1Periph 0 -#define BL_RCC_APB2Periph RCC_APB2Periph_TIM8 -#define BL_GPIO_AF GPIO_AF_TIM8 -#endif +// Production board +#define PROD_BL_TIMER TIM5 +#define PROD_BL_GPIO_PIN GPIO_Pin_3 // PA.03 +#define PROD_BL_GPIO_PinSource GPIO_PinSource3 +#define PROD_BL_RCC_APB1Periph RCC_APB1Periph_TIM5 +#define PROD_BL_RCC_APB2Periph 0 +#define PROD_BL_GPIO_AF GPIO_AF_TIM5 +// Beta board +#define BETA_BL_TIMER TIM8 +#define BETA_BL_GPIO_PIN GPIO_Pin_5 // PA.05 +#define BETA_BL_GPIO_PinSource GPIO_PinSource5 +#define BETA_BL_RCC_APB1Periph 0 +#define BETA_BL_RCC_APB2Periph RCC_APB2Periph_TIM8 +#define BETA_BL_GPIO_AF GPIO_AF_TIM8 // SD #define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) diff --git a/radio/src/targets/horus/pwr_driver.cpp b/radio/src/targets/horus/pwr_driver.cpp index ac9cf5efa..99ea6af06 100644 --- a/radio/src/targets/horus/pwr_driver.cpp +++ b/radio/src/targets/horus/pwr_driver.cpp @@ -39,7 +39,6 @@ void pwrInit() GPIO_Init(AUDIO_SHUTDOWN_GPIO, &GPIO_InitStructure); // Init Module PWR - // TODO not here GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = INTMODULE_PWR_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; @@ -50,6 +49,17 @@ void pwrInit() GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(EXTMODULE_PWR_GPIO, &GPIO_InitStructure); + // Init PCBREV PIN + GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN); + GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); + + // Init SD-DETECT PIN + GPIO_ResetBits(SD_PRESENT_GPIO, SD_PRESENT_GPIO_PIN); + GPIO_InitStructure.GPIO_Pin = SD_PRESENT_GPIO_PIN; + GPIO_Init(SD_PRESENT_GPIO, &GPIO_InitStructure); + pwrOn(); } diff --git a/radio/src/targets/horus/sdio_sd.c b/radio/src/targets/horus/sdio_sd.c index f7fe33ba7..30846319f 100644 --- a/radio/src/targets/horus/sdio_sd.c +++ b/radio/src/targets/horus/sdio_sd.c @@ -198,8 +198,6 @@ void SD_LowLevel_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; - RCC_AHB1PeriphClockCmd(SD_RCC_AHB1Periph, ENABLE); - GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO); GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO); @@ -224,11 +222,6 @@ void SD_LowLevel_Init(void) GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOC, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Pin = SD_PRESENT_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(SD_PRESENT_GPIO, &GPIO_InitStructure); - /* Enable the SDIO APB2 Clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE); diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 752d75b1f..46d6640e0 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -45,9 +45,7 @@ uint8_t portb, portc, porth=0, dummyport; uint16_t dummyport16; int g_snapshot_idx = 0; -#if !defined(CPUARM) pthread_t main_thread_pid; -#endif uint8_t main_thread_running = 0; char * main_thread_error = NULL; @@ -337,11 +335,7 @@ void StartSimu(bool tests) try { #endif -#if defined(CPUARM) - simuMain(); -#else - pthread_create(&main_thread_pid, NULL, &simuMain, NULL); -#endif + pthread_create(&main_thread_pid, NULL, &simuMain, NULL); #if defined(SIMU_EXCEPTIONS) } @@ -357,9 +351,8 @@ void StopSimu() #if defined(CPUARM) pthread_join(mixerTaskId, NULL); pthread_join(menusTaskId, NULL); -#else - pthread_join(main_thread_pid, NULL); #endif + pthread_join(main_thread_pid, NULL); } #if defined(CPUARM) diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 0ad533f8a..44deda2b3 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -492,6 +492,8 @@ const pm_char STR_ALARMSWARN[] PROGMEM = TR_ALARMSWARN; const pm_char STR_SWITCHWARN[] PROGMEM = TR_SWITCHWARN; const pm_char STR_FAILSAFEWARN[] PROGMEM = TR_FAILSAFEWARN; const pm_char STR_WRONG_SDCARDVERSION[] PROGMEM = TR_WRONG_SDCARDVERSION; +const pm_char STR_WRONG_PCBREV[] PROGMEM = TR_WRONG_PCBREV; +const pm_char STR_PCBREV_ERROR[] PROGMEM = TR_PCBREV_ERROR; const pm_char STR_NO_FAILSAFE[] PROGMEM = TR_NO_FAILSAFE; const pm_char STR_KEYSTUCK[] PROGMEM = TR_KEYSTUCK; diff --git a/radio/src/translations.h b/radio/src/translations.h index 4da5daa25..7c719025b 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -707,6 +707,8 @@ extern const pm_char STR_ALARMSWARN[]; extern const pm_char STR_SWITCHWARN[]; extern const pm_char STR_FAILSAFEWARN[]; extern const pm_char STR_WRONG_SDCARDVERSION[]; +extern const pm_char STR_WRONG_PCBREV[]; +extern const pm_char STR_PCBREV_ERROR[]; extern const pm_char STR_NO_FAILSAFE[]; extern const pm_char STR_KEYSTUCK[]; @@ -855,7 +857,7 @@ extern const pm_char STR_BLCOLOR[]; #endif #define TR_LIMITS_HEADERS { HINT(TR_LIMITS_HEADERS_NAME), HINT(TR_LIMITS_HEADERS_SUBTRIM), HINT(TR_LIMITS_HEADERS_MIN), HINT(TR_LIMITS_HEADERS_MAX), HINT(TR_LIMITS_HEADERS_DIRECTION), HINT(TR_LIMITS_HEADERS_CURVE), HINT(TR_LIMITS_HEADERS_PPMCENTER), HINT(TR_LIMITS_HEADERS_SUBTRIMMODE) } -#define TR_LSW_HEADERS { HINT(TR_LSW_HEADERS_FUNCTION), HINT(TR_LSW_HEADERS_V1), HINT(TR_LSW_HEADERS_V2), HINT(TR_LSW_HEADERS_V2), HINT(TR_LSW_HEADERS_ANDSW), HINT(TR_LSW_HEADERS_DURATION), HINT(TR_LSW_HEADERS_DELAY) } +#define TR_LSW_HEADERS { HINT(TR_LSW_HEADERS_FUNCTION), HINT(TR_LSW_HEADERS_V1), HINT(TR_LSW_HEADERS_V2), HINT(TR_LSW_HEADERS_V2), HINT(TR_LSW_HEADERS_ANDSW), HINT(TR_LSW_HEADERS_DURATION), HINT(TR_LSW_HEADERS_DELAY) } #if LCD_W >= 212 extern const char * const STR_PHASES_HEADERS[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 4b740c431..467b876a5 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -914,6 +914,8 @@ #define TR_SWITCHWARN "POZICE" #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe není nastaveno" #define TR_KEYSTUCK "Zaseklá klávesa" #define TR_INVERT_THR "Invertovat plyn?" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 847860c3e..36852eca8 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -933,6 +933,8 @@ #define TR_SWITCHWARN "SCHALTER" #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE TR("Failsafe not set", "Failsafe nicht programmiert") #define TR_KEYSTUCK "Taste klemmt" //Key stuck=Taste klemmt #define TR_INVERT_THR TR("Gas umkehren?", "Vollgas hinten?") // Th9x 9XR diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index cc02732eb..649a04504 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -899,6 +899,8 @@ #define TR_SWITCHWARN TR("SWITCH", "CONTROL") #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe not set" #define TR_KEYSTUCK "Key stuck" #define TR_INVERT_THR TR("Invert thr?", "Invert throttle?") diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index f2231479c..97a442988 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -878,6 +878,8 @@ #define TR_SWITCHWARN "INTERPTOR" #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe not set" #define TR_KEYSTUCK "Key stuck" #define TR_INVERT_THR TR("Invertir Acel?", "Invertir Acel.?") diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index ef9c238c0..48ab5da8e 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -878,6 +878,8 @@ #define TR_SWITCHWARN TR("SWITCH","CONTROL") #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe not set" #define TR_KEYSTUCK "Key stuck" #define TR_INVERT_THR TR("Invert Thr?","Invert Throttle?") diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 9753fda38..475cb71e4 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -910,6 +910,8 @@ #define TR_SWITCHWARN TR("INTERS","CONTROLES") #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Version des fichiers incompatible" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe pas déf." #define TR_KEYSTUCK "Touche bloquée" #define TR_INVERT_THR "Inverser gaz?" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index bd1396484..ecc476c31 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -913,6 +913,8 @@ #define TR_SWITCHWARN "CONTROLLI" #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe non settato" #define TR_KEYSTUCK "Tasto bloccato" #define TR_INVERT_THR "Inverti Mot?" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 8f5fcbe60..da00a9b91 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -927,6 +927,8 @@ #define TR_SWITCHWARN "SCHAKELAAR" #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE TR("Failsafe niet ing.", "Failsafe niet ingesteld") #define TR_KEYSTUCK "Toets klemt" #define TR_INVERT_THR TR("Gas omdraaien?", "Volgas achter?") diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 0d9cb0116..3263c58e0 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -915,6 +915,8 @@ #define TR_SWITCHWARN TR("Przełą","Kontrola") #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Brak Failsafe" #define TR_KEYSTUCK "Blokada klucza" #define TR_INVERT_THR TR("Odw.Gaz?","Odwróć gaz?") diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 2353b7ea2..e1f3a7077 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -873,6 +873,8 @@ #define TR_SWITCHWARN "CHAVES" #define TR_FAILSAFEWARN "FAILSAFE" #define TR_WRONG_SDCARDVERSION "Wrong files version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe not set" #define TR_KEYSTUCK "Key stuck" #define TR_INVERT_THR "Inverte Acel?" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index a539077d8..6cde5c121 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -927,6 +927,8 @@ #define TR_FAILSAFEWARN "FAILSAFE" #define TR_SDCARDVERSIONWARN "SD Card Check" #define TR_WRONG_SDCARDVERSION "Wrong SDCARD file version" +#define TR_WRONG_PCBREV "Wrong PCB detected" +#define TR_PCBREV_ERROR "PCB error" #define TR_NO_FAILSAFE "Failsafe ej given" #define TR_KEYSTUCK "Knapp-fel" #define TR_INVERT_THR TR("Invert.Gas?", "Invertera Gasen?")