From 2450db470d58898fc6c87bebb617d014e307dc63 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 30 Jul 2023 12:03:24 +1000 Subject: [PATCH] fix: Prevent functional degradation if SD has less than 50MB free space (#3802) * fix: Prevent functional degradation if SD has less than 50MB free space (#3730) * justification: https://github.com/EdgeTX/edgetx/discussions/3666 - checks SD card free space at startup, start of logging and writing screenshots - issues warning to user if SD card has less than 50MB free space - will not write logs or screenshots if free space is less than 50MB at activation timerReset - fixes crash of warning popup in logs.cpp (#3728) * update: warning message if SD card fills up to threshold while logging * empty commit * call popup in non-blocking mode * make b&w compatible to non-blocking popup calls * 2nd attempt * Popup: - turns on backlight if dimmed due to inactivity setting - if backlight is dimmed due to inactivity setting backlight can turnd on again by any controls * #3599 * fixed b&w UI * updated languages CN, CZ, DA, DE, FR, HE, IT, PL, PT, SE, TW * chore: Update translations * chore: Remove magic number * chore: JP language update for SD card full (#3809) * fix: Don't spam simulator log with file close msgs --------- Co-authored-by: Michael --- radio/src/gui/colorlcd/popups.cpp | 20 +++++++++++--- radio/src/gui/colorlcd/popups.h | 2 +- radio/src/gui/common/stdlcd/popups.cpp | 6 ++--- radio/src/gui/common/stdlcd/popups.h | 6 +++-- radio/src/gui/screenshot.cpp | 5 ++++ radio/src/logs.cpp | 37 +++++++++++++++++--------- radio/src/opentx.cpp | 7 +++++ radio/src/opentx.h | 4 +++ radio/src/sdcard.cpp | 4 ++- radio/src/translations.cpp | 1 + radio/src/translations.h | 1 + radio/src/translations/cn.h | 7 ++++- radio/src/translations/cz.h | 7 ++++- radio/src/translations/da.h | 5 ++++ radio/src/translations/de.h | 7 ++++- radio/src/translations/en.h | 5 ++++ radio/src/translations/es.h | 5 ++++ radio/src/translations/fi.h | 5 ++++ radio/src/translations/fr.h | 7 ++++- radio/src/translations/he.h | 7 ++++- radio/src/translations/it.h | 7 ++++- radio/src/translations/jp.h | 5 ++++ radio/src/translations/nl.h | 5 ++++ radio/src/translations/pl.h | 7 ++++- radio/src/translations/pt.h | 5 ++++ radio/src/translations/se.h | 7 ++++- radio/src/translations/tw.h | 7 ++++- 27 files changed, 158 insertions(+), 33 deletions(-) diff --git a/radio/src/gui/colorlcd/popups.cpp b/radio/src/gui/colorlcd/popups.cpp index 878d806a5..2aaf51f4d 100644 --- a/radio/src/gui/colorlcd/popups.cpp +++ b/radio/src/gui/colorlcd/popups.cpp @@ -19,6 +19,7 @@ * GNU General Public License for more details. */ +#include "opentx.h" #include "popups.h" #include "libopenui.h" #include "pwr.h" @@ -30,10 +31,12 @@ static void _run_popup_dialog(const char* title, const char* msg, { bool running = true; + resetBacklightTimeout(); + // reset input devices to avoid // RELEASED/CLICKED to be called in a loop lv_indev_reset(nullptr, nullptr); - + auto md = new MessageDialog(MainWindow::instance(), title, msg); md->setCloseHandler([&]() { running = false; }); if (info) { @@ -53,6 +56,8 @@ static void _run_popup_dialog(const char* title, const char* msg, RTOS_WAIT_MS(1); continue; } + + checkBacklight(); WDG_RESET(); MainWindow::instance()->run(); LvglWrapper::runNested(); @@ -84,8 +89,12 @@ void show_ui_popup() } } -void POPUP_WARNING_ON_UI_TASK(const char * message, const char * info) +void POPUP_WARNING_ON_UI_TASK(const char * message, const char * info, bool waitForClose) { + // if already in a popup, and we don't want to wait, ignore call + if (!waitForClose && ui_popup_active) + return; + // Wait in case already in popup. while (ui_popup_active) { RTOS_WAIT_MS(20); @@ -94,8 +103,11 @@ void POPUP_WARNING_ON_UI_TASK(const char * message, const char * info) ui_popup_msg = message; ui_popup_info = info; ui_popup_active = true; + // Wait until closed - while (ui_popup_active) { - RTOS_WAIT_MS(20); + if (waitForClose) { + while (ui_popup_active) { + RTOS_WAIT_MS(20); + } } } diff --git a/radio/src/gui/colorlcd/popups.h b/radio/src/gui/colorlcd/popups.h index 029d9302e..7cc4b9e89 100644 --- a/radio/src/gui/colorlcd/popups.h +++ b/radio/src/gui/colorlcd/popups.h @@ -27,6 +27,6 @@ typedef std::function ProgressHandle void POPUP_INFORMATION(const char * message); void POPUP_WARNING(const char * message, const char * info = nullptr); -void POPUP_WARNING_ON_UI_TASK(const char * message, const char * info = nullptr); +void POPUP_WARNING_ON_UI_TASK(const char * message, const char * info = nullptr, bool waitForClose = true); void show_ui_popup(); diff --git a/radio/src/gui/common/stdlcd/popups.cpp b/radio/src/gui/common/stdlcd/popups.cpp index 313d740ca..d3e52ea4b 100644 --- a/radio/src/gui/common/stdlcd/popups.cpp +++ b/radio/src/gui/common/stdlcd/popups.cpp @@ -176,15 +176,15 @@ void runPopupWarning(event_t event) return; case WARNING_TYPE_INFO: - lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+2*FH+2, STR_OK); + lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+4*FH+2, STR_OK); break; case WARNING_TYPE_ASTERISK: - lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+2*FH+2, BUTTON(TR_EXIT)); + lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+4*FH+2, BUTTON(TR_EXIT)); break; default: - lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+2*FH+2, STR_POPUPS_ENTER_EXIT); + lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+4*FH+2, STR_POPUPS_ENTER_EXIT); break; } diff --git a/radio/src/gui/common/stdlcd/popups.h b/radio/src/gui/common/stdlcd/popups.h index fc859a802..84165115a 100644 --- a/radio/src/gui/common/stdlcd/popups.h +++ b/radio/src/gui/common/stdlcd/popups.h @@ -74,7 +74,7 @@ enum #if !defined(GUI) #define DISPLAY_WARNING(...) inline void POPUP_WAIT(const char * s) { } - inline void POPUP_WARNING(const char *, const char * = nullptr) { } + inline void POPUP_WARNING(const char *, const char * = nullptr, bool waitForClose) { } inline void POPUP_CONFIRMATION(const char * s, PopupMenuHandler handler) { } inline void POPUP_INPUT(const char * s, PopupFunc func) { } inline void SET_WARNING_INFO(const char * info, uint8_t length, uint8_t flags) { } @@ -105,8 +105,10 @@ enum popupFunc = runPopupWarning; } - inline void POPUP_WARNING(const char * message, const char * info = nullptr) + inline void POPUP_WARNING(const char * message, const char * info = nullptr, bool waitForClose = true) { + (void)waitForClose; + warningText = message; warningInfoText = info; warningInfoLength = info ? strlen(info) : 0; diff --git a/radio/src/gui/screenshot.cpp b/radio/src/gui/screenshot.cpp index 5aee7fa76..672fbbc9a 100644 --- a/radio/src/gui/screenshot.cpp +++ b/radio/src/gui/screenshot.cpp @@ -56,6 +56,11 @@ const char * writeScreenshot() UINT written; char filename[42]; // /SCREENSHOTS/screen-2013-01-01-123540.bmp + if (IS_SDCARD_FULL()) { + POPUP_WARNING(STR_SDCARD_FULL_EXT); + return STR_SDCARD_FULL_EXT; + } + // check and create folder here strcpy(filename, SCREENSHOTS_PATH); const char * error = sdCheckAndCreateDirectory(filename); diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index 930ce39c4..e17d0051d 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -123,9 +123,6 @@ const char * logsOpen() if (!sdMounted()) return STR_NO_SDCARD; - if (sdGetFreeSectors() == 0) - return STR_SDCARD_FULL; - // check and create folder here strcpy(filename, STR_LOGS_PATH); const char * error = sdCheckAndCreateDirectory(filename); @@ -184,16 +181,14 @@ const char * logsOpen() void logsClose() { - if (sdMounted()) { + if (g_oLogFile.obj.fs && sdMounted()) { if (f_close(&g_oLogFile) != FR_OK) { // close failed, forget file g_oLogFile.obj.fs = 0; } lastLogTime = 0; } - #if !defined(SIMU) - loggingTimerStop(); - #endif + } void writeHeader() @@ -285,17 +280,31 @@ void logsWrite() { #endif + bool sdCardFull = IS_SDCARD_FULL(); + + // check if file needs to be opened if (!g_oLogFile.obj.fs) { - const char * result = logsOpen(); + const char *result = sdCardFull ? STR_SDCARD_FULL_EXT : logsOpen(); + + // SD card is full or file open failed if (result) { if (result != error_displayed) { error_displayed = result; - POPUP_WARNING(result); + POPUP_WARNING_ON_UI_TASK(result, nullptr, false); } return; } } + // check at every write cycle + if (sdCardFull) { + logsClose(); // timer is still running and code above will try to + // open the file again but will fail with error + // which will trigger the warning popup + return; + } + + #if defined(RTCLOCK) { static struct gtm utm; @@ -383,15 +392,17 @@ void logsWrite() if (result<0 && !error_displayed) { error_displayed = STR_SDCARD_ERROR; - POPUP_WARNING(STR_SDCARD_ERROR); + POPUP_WARNING_ON_UI_TASK(STR_SDCARD_ERROR, nullptr, false); logsClose(); } } } else { error_displayed = nullptr; - if (g_oLogFile.obj.fs) { - logsClose(); - } + logsClose(); + + #if !defined(SIMU) + loggingTimerStop(); + #endif } } diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 006ca361f..9cb996a32 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -644,6 +644,11 @@ static void checkRTCBattery() } } +void checkSDfreeStorage() { + if(IS_SDCARD_FULL()) + ALERT(STR_SD_CARD, STR_SDCARD_FULL, AU_ERROR); +} + #if defined(PCBFRSKY) || defined(PCBFLYSKY) static void checkFailsafe() { @@ -672,6 +677,8 @@ void checkAll() checkLowEEPROM(); #endif + checkSDfreeStorage(); + // we don't check the throttle stick if the radio is not calibrated if (g_eeGeneral.chkSum == evalChkSum()) { checkThrottleStick(); diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 1fe2c3ef8..aa5c075cf 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1052,6 +1052,10 @@ inline bool IS_TXBATT_WARNING() return g_vbat100mV <= g_eeGeneral.vBatWarn; } +inline bool IS_SDCARD_FULL() { + return sdGetFreeSectors() < ((50 *1024*1024) / BLOCK_SIZE); // 50MB safety margin +} + enum TelemetryViews { TELEMETRY_CUSTOM_SCREEN_1, TELEMETRY_CUSTOM_SCREEN_2, diff --git a/radio/src/sdcard.cpp b/radio/src/sdcard.cpp index 5f39af548..1f1a3ab8b 100644 --- a/radio/src/sdcard.cpp +++ b/radio/src/sdcard.cpp @@ -30,6 +30,8 @@ #include "libopenui/src/libopenui_file.h" #endif +#define SDCARD_MIN_FREE_SPACE_MB 50 // Maintain a 50MB free space buffer to prevent crashes + const char * sdCheckAndCreateDirectory(const char * path) { DIR archiveFolder; @@ -463,7 +465,7 @@ uint32_t sdGetSize() uint32_t sdGetFreeSectors() { - return 10; + return ((SDCARD_MIN_FREE_SPACE_MB*1024*1024)/BLOCK_SIZE)+1; // SIMU SD card is always above threshold } #endif // #if !defined(SIMU) || defined(SIMU_DISKIO) diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 5223e2832..d9ce70ba9 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -918,6 +918,7 @@ const char STR_SDCARD_ERROR[] = TR_SDCARD_ERROR; #define STR_CLEAR TR_CLEAR const char STR_NO_SDCARD[] = TR_NO_SDCARD; const char STR_SDCARD_FULL[] = TR_SDCARD_FULL; +const char STR_SDCARD_FULL_EXT[] = TR_SDCARD_FULL_EXT; const char STR_INCOMPATIBLE[] = TR_INCOMPATIBLE; const char STR_LOGS_PATH[] = LOGS_PATH; const char STR_LOGS_EXT[] = LOGS_EXT; diff --git a/radio/src/translations.h b/radio/src/translations.h index 185457195..5d7c0daa0 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -693,6 +693,7 @@ extern const char STR_DELETE_ERROR[]; extern const char STR_SDCARD_ERROR[]; extern const char STR_NO_SDCARD[]; extern const char STR_SDCARD_FULL[]; +extern const char STR_SDCARD_FULL_EXT[]; extern const char STR_INCOMPATIBLE[]; extern const char STR_LOGS_PATH[]; extern const char STR_LOGS_EXT[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 71da74b86..3c47a4f3b 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -598,7 +598,12 @@ #define TR_POWER_METER_INT "功率计 (内置)" #define TR_SPECTRUM_ANALYSER_EXT "频谱仪 (外置)" #define TR_SPECTRUM_ANALYSER_INT "频谱仪 (内置)" -#define TR_SDCARD_FULL "存储卡已满" +#define TR_SDCARD_FULL "SD卡已满" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\n日志和截屏功能将被禁用" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036日志和 " LCDW_128_480_LINEBREAK "截屏功能将被禁用" +#endif #define TR_NEEDS_FILE "需要文件名包含" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index f922aec4f..595f3bccf 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -609,7 +609,12 @@ #define TR_POWER_METER_INT "Měřič výkonu (INT)" #define TR_SPECTRUM_ANALYSER_EXT "Spektální an. (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spektální an. (INT)" -#define TR_SDCARD_FULL "Plná SD karta" +#define TR_SDCARD_FULL "Plná karta SD" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogování dat a snímky obrazovky vypnuty" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logy a " LCDW_128_480_LINEBREAK " Snímky obrazovky vypnuty" +#endif #define TR_NEEDS_FILE "Vyžadován soubor" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 98fdee71a..bf3b48258 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -613,6 +613,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" #define TR_SDCARD_FULL "SD kort fuldt" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLog & skærmklip deaktiveret" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Log & skærmklip" LCDW_128_480_LINEBREAK "deaktiveret" +#endif #define TR_NEEDS_FILE "MANGLER FIL" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 30fcd3beb..e04d55d1b 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -601,7 +601,12 @@ #define TR_POWER_METER_INT "Power Meter (INT)" #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" -#define TR_SDCARD_FULL "SD-Karte voll" +#define TR_SDCARD_FULL "SD-Karte voll" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs und Screenshots deaktiviert" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs und " LCDW_128_480_LINEBREAK "Screenshots deaktiviert" +#endif #define TR_NEEDS_FILE "Datei benötigt" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 6e48a4c98..67e7caec9 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -609,6 +609,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" #define TR_SDCARD_FULL "SD card full" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs and Screenshots disabled" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs & Screenshots" LCDW_128_480_LINEBREAK "disabled" +#endif #define TR_NEEDS_FILE "NEEDS FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 026e85512..686ef1552 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -605,6 +605,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "Espectro (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Espectro (INT)" #define TR_SDCARD_FULL "SD Card llena" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs and Screenshots disabled" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs and " LCDW_128_480_LINEBREAK "Screenshots disabled" +#endif #define TR_NEEDS_FILE "NECESITA ARCHIVO" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 99a242860..5d69f5bad 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -619,6 +619,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" #define TR_SDCARD_FULL "SD Card Full" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs and Screenshots disabled" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs and " LCDW_128_480_LINEBREAK "Screenshots disabled" +#endif #define TR_NEEDS_FILE "NEEDS FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index ec6966a42..3da85eb8d 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -613,7 +613,12 @@ #define TR_POWER_METER_INT "Puissancemètre (INT)" #define TR_SPECTRUM_ANALYSER_EXT TR("Spectre (EXT)", "Analyseur Spectre (EXT)") #define TR_SPECTRUM_ANALYSER_INT TR("Spectre (INT)", "Analyseur Spectre (INT)") -#define TR_SDCARD_FULL "Carte SD pleine" +#define TR_SDCARD_FULL "SD carte pleine" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nJournaux et Impr. écran désactivé" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Journaux et" LCDW_128_480_LINEBREAK "Impr. écran désactivé" +#endif #define TR_NEEDS_FILE "FICHIER EXIGE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/he.h b/radio/src/translations/he.h index f17c5e0be..1cfde313d 100644 --- a/radio/src/translations/he.h +++ b/radio/src/translations/he.h @@ -687,7 +687,12 @@ #define TR_POWER_METER_INT "Power Meter (INT)" #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" -#define TR_SDCARD_FULL "SD card full" +#define TR_SDCARD_FULL "הדיסק מלא״ +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\לוגים ושמירת צילומי מסך מושבתים" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036לוגים" LCDW_128_480_LINEBREAK "ושמירת צילומי מסך מושבתים" +#endif #define TR_NEEDS_FILE "NEEDS FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index 22bdc349b..ee1ce6fd1 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -605,7 +605,12 @@ #define TR_POWER_METER_INT "Meter Potenza (INT)" #define TR_SPECTRUM_ANALYSER_EXT "Spettro (EST)" #define TR_SPECTRUM_ANALYSER_INT "Spettro (INT)" -#define TR_SDCARD_FULL "SDCard Piena" +#define TR_SDCARD_FULL "SDCard piena" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs e Screenshots disattivati" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs e Screenshots" LCDW_128_480_LINEBREAK "disattivati" +#endif #define TR_NEEDS_FILE "RICHIEDE FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/jp.h b/radio/src/translations/jp.h index a739812de..4b95bdca7 100644 --- a/radio/src/translations/jp.h +++ b/radio/src/translations/jp.h @@ -604,6 +604,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "スペクトラム\n(外部)" #define TR_SPECTRUM_ANALYSER_INT "スペクトラム\n(内部)" #define TR_SDCARD_FULL "SDカード空き容量なし" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nログとスクリーンショット保存が無効" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs and " LCDW_128_480_LINEBREAK "Screenshots disabled" +#endif #define TR_NEEDS_FILE "を含むファイルが必要です" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index e1946f0f4..b6ac89386 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -606,6 +606,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" #define TR_SDCARD_FULL "SD-Kaart vol" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs and Screenshots disabled" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs and " LCDW_128_480_LINEBREAK "Screenshots disabled" +#endif #define TR_NEEDS_FILE "NEEDS FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index b5ab3fa1d..58d59c395 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -599,7 +599,12 @@ #define TR_POWER_METER_INT "Power Meter (INT)" #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" -#define TR_SDCARD_FULL "Karta Pełna " +#define TR_SDCARD_FULL "Pełna karta SD" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogi i zrzuty ekranu wyłączone" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logi i zrzuty ekranu" LCDW_128_480_LINEBREAK "wyłączone" +#endif #define TR_NEEDS_FILE "NEEDS FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index fb65a8ea1..3a5536ca2 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -612,6 +612,11 @@ #define TR_SPECTRUM_ANALYSER_EXT "Spectrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spectrum (INT)" #define TR_SDCARD_FULL "Cart SD cheio" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLogs e captura de tela desativados" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Logs e captura" LCDW_128_480_LINEBREAK "de tela desativados" +#endif #define TR_NEEDS_FILE "NEEDS FILE" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index b767f7280..590d44fdd 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -624,7 +624,12 @@ #define TR_POWER_METER_INT "Power Meter (INT)" #define TR_SPECTRUM_ANALYSER_EXT "Spektrum (EXT)" #define TR_SPECTRUM_ANALYSER_INT "Spektrum (INT)" -#define TR_SDCARD_FULL "SD-kort fullt" +#define TR_SDCARD_FULL "SD-kortet fullt" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\nLoggar och skärmklipp inaktiverade" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036Loggar och " LCDW_128_480_LINEBREAK "skärmklipp inaktiverade" +#endif #define TR_NEEDS_FILE "BEHÖVER FIL" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv" diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 8fd93ab82..79de90cf7 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -602,7 +602,12 @@ #define TR_POWER_METER_INT "功率計 (內置)" #define TR_SPECTRUM_ANALYSER_EXT "頻譜儀 (外置)" #define TR_SPECTRUM_ANALYSER_INT "頻譜儀 (內置)" -#define TR_SDCARD_FULL "存儲卡已滿" +#define TR_SDCARD_FULL "SD卡已滿" +#if defined(COLORLCD) +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\n日誌和截屏功能將被禁用" +#else +#define TR_SDCARD_FULL_EXT TR_SDCARD_FULL "\036日誌和 " LCDW_128_480_LINEBREAK "截屏功能將被禁用" +#endif #define TR_NEEDS_FILE "需要文件名包含" #define TR_EXT_MULTI_SPEC "opentx-inv" #define TR_INT_MULTI_SPEC "stm-opentx-noinv"