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 <mha1@users.noreply.github.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,6 @@ typedef std::function<void(const char *, const char *, int, int)> 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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
+24
-13
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user