fix(B&W): Avoid having constants in SRAM (#2993)

fix constness to avoid having constants in data segment 
.... and thus free some precious RAM
This commit is contained in:
Raphael Coeffic
2023-01-18 20:12:35 +10:00
committed by GitHub
parent acd44516d0
commit acd95dfad4
22 changed files with 176 additions and 172 deletions
+1 -1
View File
@@ -184,7 +184,7 @@ void title(const char * s);
title(name)
typedef int choice_t;
choice_t editChoice(coord_t x, coord_t y, const char * label, const char** values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable = nullptr);
choice_t editChoice(coord_t x, coord_t y, const char * label, const char *const *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable = nullptr);
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char * label, LcdFlags attr, event_t event);
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event);
+1 -1
View File
@@ -425,7 +425,7 @@ void lcdDrawTextAlignedLeft(coord_t y, const char * s)
}
#if !defined(BOOT)
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char** s,uint8_t idx, LcdFlags flags)
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char *const *s,uint8_t idx, LcdFlags flags)
{
lcdDrawSizedText(x, y, s[idx], UINT8_MAX, flags);
}
+1 -1
View File
@@ -102,7 +102,7 @@ void lcdDrawChar(coord_t x, coord_t y, uint8_t c);
void lcdDrawChar(coord_t x, coord_t y, uint8_t c, LcdFlags flags);
void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags flags = 0);
void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags flags);
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char** s, uint8_t idx, LcdFlags flags);
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char *const *s, uint8_t idx, LcdFlags flags);
void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len, LcdFlags flags);
void lcdDrawText(coord_t x, coord_t y, const char * s);
void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len);
+1 -1
View File
@@ -86,7 +86,7 @@ void title(const char * s)
lcdDrawText(0, 0, s, INVERS);
}
choice_t editChoice(coord_t x, coord_t y, const char * label, const char** values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable)
choice_t editChoice(coord_t x, coord_t y, const char * label, const char *const *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable)
{
if (label) {
drawFieldLabel(x, y, label);
+1 -1
View File
@@ -210,7 +210,7 @@ void title(const char * s);
typedef int choice_t;
choice_t editChoice(coord_t x, coord_t y, const char *label, const char** values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable = nullptr);
choice_t editChoice(coord_t x, coord_t y, const char *label, const char* const* values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable = nullptr);
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char *label, LcdFlags attr, event_t event);
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event);
+1 -1
View File
@@ -396,7 +396,7 @@ void lcdDrawTextAlignedLeft(coord_t y, const char * s)
}
#if !defined(BOOT)
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char** s,uint8_t idx, LcdFlags flags)
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char *const *s,uint8_t idx, LcdFlags flags)
{
lcdDrawSizedText(x, y, s[idx], UINT8_MAX, flags);
}
+1 -1
View File
@@ -111,7 +111,7 @@ void lcdDrawChar(coord_t x, coord_t y, uint8_t c);
void lcdDrawChar(coord_t x, coord_t y, uint8_t c, LcdFlags mode);
void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags flags = 0);
void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags mode);
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char** s,uint8_t idx, LcdFlags mode);
void lcdDrawTextAtIndex(coord_t x, coord_t y, const char *const *s,uint8_t idx, LcdFlags mode);
void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len, LcdFlags mode);
void lcdDrawText(coord_t x, coord_t y, const char * s);
void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len);
+1 -1
View File
@@ -23,7 +23,7 @@
#if defined(SPLASH)
#define MAXIMUM_SPLASH_IMAGE_SIZE 3072
struct {
const struct {
const uint8_t __magic_prefix[4] = { 'S','P','S',0 };
const uint8_t splashdata[MAXIMUM_SPLASH_IMAGE_SIZE] = {
#include "bitmaps/212x64/splash.lbm"
+1 -1
View File
@@ -82,7 +82,7 @@ void title(const char * s)
lcdDrawText(0, 0, s, INVERS);
}
choice_t editChoice(coord_t x, coord_t y, const char * label, const char** values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable)
choice_t editChoice(coord_t x, coord_t y, const char * label, const char* const* values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable)
{
if (label) {
drawFieldLabel(x, y, label);
+61 -61
View File
@@ -1164,68 +1164,68 @@ int convertMultiToOtx(int type)
// we don't need the special eeprom/flash string handling, just define them as
// local strings
const char* STR_SUBTYPE_FLYSKY[] = {"Std","V9x9","V6x6","V912","CX20"};
const char* STR_SUBTYPE_HUBSAN[] = {"H107","H301","H501"};
const char* STR_SUBTYPE_FRSKY[] = {"D16","D8","D16 8ch","V8","LBT(EU)","LBT 8ch","D8Cloned","D16Cloned"};
const char* STR_SUBTYPE_HISKY[] = {"Std","HK310"};
const char* STR_SUBTYPE_V2X2[] = {"Std","JXD506","MR101"};
const char* STR_SUBTYPE_DSM[] = {"2 1F","2 2F","X 1F","X 2F","Auto","R 1F"};
const char* STR_SUBTYPE_DEVO[] = {"8ch","10ch","12ch","6ch","7ch"};
const char* STR_SUBTYPE_YD717[] = {"Std","SkyWlkr","Syma X4","XINXUN","NIHUI"};
const char* STR_SUBTYPE_KN[] = {"WLtoys","FeiLun"};
const char* STR_SUBTYPE_SYMAX[] = {"Std","X5C"};
const char* STR_SUBTYPE_SLT[] = {"V1_6ch","V2_8ch","Q100","Q200","MR100"};
const char* STR_SUBTYPE_CX10[] = {"Green","Blue","DM007","-","JC3015a","JC3015b","MK33041"};
const char* STR_SUBTYPE_CG023[] = {"Std","YD829"};
const char* STR_SUBTYPE_BAYANG[] = {"Std","H8S3D","X16 AH","IRDrone","DHD D4","QX100"};
const char* STR_SUBTYPE_ESky[] = {"Std","ET4"};
const char* STR_SUBTYPE_MT99[] = {"MT99","H7","YZ","LS","FY805","A180","Dragon","F949G"};
const char* STR_SUBTYPE_MJXQ[] = {"WLH08","X600","X800","H26D","E010","H26WH","Phoenix"};
const char* STR_SUBTYPE_FY326[] = {"Std","FY319"};
const char* STR_SUBTYPE_FUTABA[] = {"SFHSS"};
const char* STR_SUBTYPE_HONTAI[] = {"Std","JJRC X1","X5C1","FQ_951"};
const char* STR_SUBTYPE_AFHDS2A[] = {"PWM,IBUS","PPM,IBUS","PWM,SBUS","PPM,SBUS","PWM,IB16","PPM,IB16"};
const char* STR_SUBTYPE_Q2X2[] = {"Q222","Q242","Q282"};
const char* STR_SUBTYPE_WK2x01[] = {"WK2801","WK2401","W6_5_1","W6_6_1","W6_HeL","W6_HeI"};
const char* STR_SUBTYPE_Q303[] = {"Std","CX35","CX10D","CX10WD"};
const char* STR_SUBTYPE_CABELL[] = {"V3","V3 Telm","-","-","-","-","F-Safe","Unbind"};
const char* STR_SUBTYPE_ESKY150[] = {"4ch","7ch"};
const char* STR_SUBTYPE_H83D[] = {"Std","H20H","H20Mini","H30Mini"};
const char* STR_SUBTYPE_CORONA[] = {"V1","V2","FD V3"};
const char* STR_SUBTYPE_HITEC[] = {"Optima","Opt Hub","Minima"};
const char* STR_SUBTYPE_WFLY[] = {"WFR0x"};
const char* STR_SUBTYPE_BUGS_MINI[] = {"Std","Bugs3H"};
const char* STR_SUBTYPE_TRAXXAS[] = {"6519"};
const char* STR_SUBTYPE_E01X[] = {"E012","E015"};
const char* STR_SUBTYPE_V911S[] = {"Std","E119"};
const char* STR_SUBTYPE_GD00X[] = {"GD_V1","GD_V2"};
const char* STR_SUBTYPE_V761[] = {"3ch","4ch"};
const char* STR_SUBTYPE_KF606[] = {"KF606","MIG320"};
const char* STR_SUBTYPE_REDPINE[] = {"Fast","Slow"};
const char* STR_SUBTYPE_POTENSIC[] = {"A20"};
const char* STR_SUBTYPE_ZSX[] = {"280JJRC"};
const char* STR_SUBTYPE_HEIGHT[] = {"5ch","8ch"};
const char* STR_SUBTYPE_FRSKYX_RX[] = {"RX","CloneTX"};
const char* STR_SUBTYPE_HOTT[] = {"Sync","No_Sync"};
const char* STR_SUBTYPE_FX816[] = {"P38"};
const char* STR_SUBTYPE_PELIKAN[] = {"Pro","Lite","SCX24"};
const char* STR_SUBTYPE_XK[] = {"X450","X420"};
const char* STR_SUBTYPE_XN297DUMP[] = {"250K","1M","2M","AUTO","NRF","CC2500"};
const char* STR_SUBTYPE_FRSKYX2[] = {"D16","D16 8ch","LBT(EU)","LBT 8ch","Cloned","Clone8ch"};
const char* STR_SUBTYPE_FRSKYR9[] = {"915MHz","868MHz","915 8ch","868 8ch","FCC","---","FCC 8ch"};
const char* STR_SUBTYPE_PROPEL[] = {"74-Z"};
const char* STR_SUBTYPE_FRSKYL[] = {"LR12","LR12 6ch"};
const char* STR_SUBTYPE_ESKY150V2[] = {"150 V2"};
const char* STR_SUBTYPE_JJRC345[] = {"Std","SkyTmbr"};
const char* STR_SUBTYPE_KYOSHO[] = {"FHSS","Hype"};
const char* STR_SUBTYPE_RLINK[] = {"Surface","Air","DumboRC"};
const char* STR_SUBTYPE_ELRS[] = {"N/A WIP"};
const char* STR_SUBTYPE_REALACC[] = {"R11"};
const char* STR_SUBTYPE_WFLY2[] = {"RF20x"};
const char* STR_SUBTYPE_MOULDKG[] = {"Analog","Digital"};
const char* STR_SUBTYPE_MT992[] = {"PA18"};
const char* const STR_SUBTYPE_FLYSKY[] = {"Std","V9x9","V6x6","V912","CX20"};
const char* const STR_SUBTYPE_HUBSAN[] = {"H107","H301","H501"};
const char* const STR_SUBTYPE_FRSKY[] = {"D16","D8","D16 8ch","V8","LBT(EU)","LBT 8ch","D8Cloned","D16Cloned"};
const char* const STR_SUBTYPE_HISKY[] = {"Std","HK310"};
const char* const STR_SUBTYPE_V2X2[] = {"Std","JXD506","MR101"};
const char* const STR_SUBTYPE_DSM[] = {"2 1F","2 2F","X 1F","X 2F","Auto","R 1F"};
const char* const STR_SUBTYPE_DEVO[] = {"8ch","10ch","12ch","6ch","7ch"};
const char* const STR_SUBTYPE_YD717[] = {"Std","SkyWlkr","Syma X4","XINXUN","NIHUI"};
const char* const STR_SUBTYPE_KN[] = {"WLtoys","FeiLun"};
const char* const STR_SUBTYPE_SYMAX[] = {"Std","X5C"};
const char* const STR_SUBTYPE_SLT[] = {"V1_6ch","V2_8ch","Q100","Q200","MR100"};
const char* const STR_SUBTYPE_CX10[] = {"Green","Blue","DM007","-","JC3015a","JC3015b","MK33041"};
const char* const STR_SUBTYPE_CG023[] = {"Std","YD829"};
const char* const STR_SUBTYPE_BAYANG[] = {"Std","H8S3D","X16 AH","IRDrone","DHD D4","QX100"};
const char* const STR_SUBTYPE_ESky[] = {"Std","ET4"};
const char* const STR_SUBTYPE_MT99[] = {"MT99","H7","YZ","LS","FY805","A180","Dragon","F949G"};
const char* const STR_SUBTYPE_MJXQ[] = {"WLH08","X600","X800","H26D","E010","H26WH","Phoenix"};
const char* const STR_SUBTYPE_FY326[] = {"Std","FY319"};
const char* const STR_SUBTYPE_FUTABA[] = {"SFHSS"};
const char* const STR_SUBTYPE_HONTAI[] = {"Std","JJRC X1","X5C1","FQ_951"};
const char* const STR_SUBTYPE_AFHDS2A[] = {"PWM,IBUS","PPM,IBUS","PWM,SBUS","PPM,SBUS","PWM,IB16","PPM,IB16"};
const char* const STR_SUBTYPE_Q2X2[] = {"Q222","Q242","Q282"};
const char* const STR_SUBTYPE_WK2x01[] = {"WK2801","WK2401","W6_5_1","W6_6_1","W6_HeL","W6_HeI"};
const char* const STR_SUBTYPE_Q303[] = {"Std","CX35","CX10D","CX10WD"};
const char* const STR_SUBTYPE_CABELL[] = {"V3","V3 Telm","-","-","-","-","F-Safe","Unbind"};
const char* const STR_SUBTYPE_ESKY150[] = {"4ch","7ch"};
const char* const STR_SUBTYPE_H83D[] = {"Std","H20H","H20Mini","H30Mini"};
const char* const STR_SUBTYPE_CORONA[] = {"V1","V2","FD V3"};
const char* const STR_SUBTYPE_HITEC[] = {"Optima","Opt Hub","Minima"};
const char* const STR_SUBTYPE_WFLY[] = {"WFR0x"};
const char* const STR_SUBTYPE_BUGS_MINI[] = {"Std","Bugs3H"};
const char* const STR_SUBTYPE_TRAXXAS[] = {"6519"};
const char* const STR_SUBTYPE_E01X[] = {"E012","E015"};
const char* const STR_SUBTYPE_V911S[] = {"Std","E119"};
const char* const STR_SUBTYPE_GD00X[] = {"GD_V1","GD_V2"};
const char* const STR_SUBTYPE_V761[] = {"3ch","4ch"};
const char* const STR_SUBTYPE_KF606[] = {"KF606","MIG320"};
const char* const STR_SUBTYPE_REDPINE[] = {"Fast","Slow"};
const char* const STR_SUBTYPE_POTENSIC[] = {"A20"};
const char* const STR_SUBTYPE_ZSX[] = {"280JJRC"};
const char* const STR_SUBTYPE_HEIGHT[] = {"5ch","8ch"};
const char* const STR_SUBTYPE_FRSKYX_RX[] = {"RX","CloneTX"};
const char* const STR_SUBTYPE_HOTT[] = {"Sync","No_Sync"};
const char* const STR_SUBTYPE_FX816[] = {"P38"};
const char* const STR_SUBTYPE_PELIKAN[] = {"Pro","Lite","SCX24"};
const char* const STR_SUBTYPE_XK[] = {"X450","X420"};
const char* const STR_SUBTYPE_XN297DUMP[] = {"250K","1M","2M","AUTO","NRF","CC2500"};
const char* const STR_SUBTYPE_FRSKYX2[] = {"D16","D16 8ch","LBT(EU)","LBT 8ch","Cloned","Clone8ch"};
const char* const STR_SUBTYPE_FRSKYR9[] = {"915MHz","868MHz","915 8ch","868 8ch","FCC","---","FCC 8ch"};
const char* const STR_SUBTYPE_PROPEL[] = {"74-Z"};
const char* const STR_SUBTYPE_FRSKYL[] = {"LR12","LR12 6ch"};
const char* const STR_SUBTYPE_ESKY150V2[] = {"150 V2"};
const char* const STR_SUBTYPE_JJRC345[] = {"Std","SkyTmbr"};
const char* const STR_SUBTYPE_KYOSHO[] = {"FHSS","Hype"};
const char* const STR_SUBTYPE_RLINK[] = {"Surface","Air","DumboRC"};
const char* const STR_SUBTYPE_ELRS[] = {"N/A WIP"};
const char* const STR_SUBTYPE_REALACC[] = {"R11"};
const char* const STR_SUBTYPE_WFLY2[] = {"RF20x"};
const char* const STR_SUBTYPE_MOULDKG[] = {"Analog","Digital"};
const char* const STR_SUBTYPE_MT992[] = {"PA18"};
const char* mm_options_strings::options[] = {
const char* const mm_options_strings::options[] = {
nullptr,
STR_MULTI_OPTION,
STR_MULTI_RFTUNE,
+1 -1
View File
@@ -140,7 +140,7 @@ void MultiRfProtocols::RfProto::fillSubProtoList(const char* str, int n, int len
}
}
void MultiRfProtocols::RfProto::fillSubProtoList(const char** str, int n)
void MultiRfProtocols::RfProto::fillSubProtoList(const char *const *str, int n)
{
subProtos.reserve(n);
+1 -1
View File
@@ -69,7 +69,7 @@ class MultiRfProtocols
bool parse(const uint8_t* data, uint8_t len);
// array of strings
void fillSubProtoList(const char** str, int n);
void fillSubProtoList(const char *const *str, int n);
// fixed length strings concatenated
void fillSubProtoList(const char* str, int n, int len);
+3 -2
View File
@@ -27,6 +27,7 @@
#include "intmodule_serial_driver.h"
#endif
#include "crossfire.h"
#include "telemetry/crossfire.h"
#define CROSSFIRE_CH_BITS 11
@@ -283,7 +284,7 @@ static void crossfireDeInitInternal(void* context)
state->deinit();
}
etx_module_driver_t CrossfireInternalDriver = {
const etx_module_driver_t CrossfireInternalDriver = {
.protocol = PROTOCOL_CHANNELS_CROSSFIRE,
.init = crossfireInitInternal,
.deinit = crossfireDeInitInternal,
@@ -323,7 +324,7 @@ static void crossfireDeInitExternal(void* context)
mixerSchedulerSetPeriod(EXTERNAL_MODULE, 0);
}
etx_module_driver_t CrossfireExternalDriver = {
const etx_module_driver_t CrossfireExternalDriver = {
.protocol = PROTOCOL_CHANNELS_CROSSFIRE,
.init = crossfireInitExternal,
.deinit = crossfireDeInitExternal,
+2 -2
View File
@@ -23,5 +23,5 @@
#include "hal/module_driver.h"
extern etx_module_driver_t CrossfireInternalDriver;
extern etx_module_driver_t CrossfireExternalDriver;
extern const etx_module_driver_t CrossfireInternalDriver;
extern const etx_module_driver_t CrossfireExternalDriver;
+2 -2
View File
@@ -108,7 +108,7 @@ extern uint32_t NV14internalModuleFwVersion;
// When using packed, the pointer in here end up not being aligned, which clang and gcc complain about
// Keep the order of the fields that the so that the size stays small
struct mm_options_strings {
static const char* options[];
static const char* const options[];
};
const uint8_t getMaxMultiOptions();
@@ -118,7 +118,7 @@ struct mm_protocol_definition {
uint8_t maxSubtype;
bool failsafe;
bool disable_ch_mapping;
const char** subTypeString;
const char* const* subTypeString;
const char* optionsstr;
};
+1 -1
View File
@@ -151,7 +151,7 @@ char *strcat_zchar(char *dest, const char *name, uint8_t size,
#endif
#if !defined(BOOT)
char *getStringAtIndex(char *dest, const char **s, int idx)
char *getStringAtIndex(char *dest, const char *const *s, int idx)
{
strcpy(dest, s[idx]);
return dest;
+1 -1
View File
@@ -68,7 +68,7 @@ char *strAppendFilename(char *dest, const char *filename, const int size);
std::string formatNumberAsString(int32_t val, LcdFlags flags = 0, uint8_t len = 0, const char * prefix = nullptr, const char * suffix = nullptr);
#if !defined(BOOT)
char *getStringAtIndex(char *dest, const char **s, int idx);
char *getStringAtIndex(char *dest, const char *const *s, int idx);
char *strAppendStringWithIndex(char *dest, const char *s, int idx);
#define LEN_TIMER_STRING 10 // "-00:00:00"
char *getTimerString(char *dest, int32_t tme, TimerOptions timerOptions = {.options = 0});
+5 -3
View File
@@ -52,9 +52,10 @@ SECTIONS
KEEP(*(.bootloader)) /* Bootloader code */
. = 32768; /* Set the start of the main program */
. = 0x8000; /* Set the start of the main program */
_stext = .; /* Provide the name for the start of this section */
. = ALIGN(4);
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
KEEP(*(.fwversiondata))
*(.text) /* .text sections (code) */
@@ -63,7 +64,8 @@ SECTIONS
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)
*(.eh_frame)
*(.data.__global_locale)
KEEP (*(.init))
KEEP (*(.fini))
@@ -65,6 +65,7 @@ SECTIONS
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)
*(.data.__global_locale)
KEEP (*(.init))
KEEP (*(.fini))
+3 -3
View File
@@ -25,7 +25,7 @@
#define CENTER
#endif
#define ISTR(x) const char* STR_##x[] = { TR_##x }
#define ISTR(x) const char* const STR_##x[] = { TR_##x }
#if defined(COLORLCD)
ISTR(FONT_SIZES);
@@ -784,8 +784,8 @@ const char STR_SPORT_UPDATE_POWER_MODE[] = TR_SPORT_UPDATE_POWER_MODE;
const char STR_TOUCH_PANEL[] = TR_TOUCH_PANEL;
const char STR_FILE_SIZE[] = TR_FILE_SIZE;
const char STR_FILE_OPEN[] = TR_FILE_OPEN;
const char* STR_TIMER_MODES[] = TR_TIMER_MODES;
const char* STR_MONTHS[] = TR_MONTHS;
const char* const STR_TIMER_MODES[] = TR_TIMER_MODES;
const char* const STR_MONTHS[] = TR_MONTHS;
const char STR_LIMITS_HEADERS_DIRECTION[] = TR_LIMITS_HEADERS_DIRECTION;
#if defined(COLORLCD)
+85 -85
View File
@@ -112,107 +112,107 @@
#define LCDW_128_480_LINEBREAK "\036"
#endif
extern const char* STR_OFFON[];
extern const char* STR_MMMINV[];
extern const char* STR_VBEEPMODE[];
extern const char* STR_TRNMODE[];
extern const char* STR_TRNCHN[];
extern const char* STR_AUX_SERIAL_MODES[];
extern const char* STR_SWTYPES[];
extern const char* STR_POTTYPES[];
extern const char* STR_SLIDERTYPES[];
extern const char* STR_VTRIMINC[];
extern const char* STR_VDISPLAYTRIMS[];
extern const char* STR_RETA123[];
extern const char* const STR_OFFON[];
extern const char* const STR_MMMINV[];
extern const char* const STR_VBEEPMODE[];
extern const char* const STR_TRNMODE[];
extern const char* const STR_TRNCHN[];
extern const char* const STR_AUX_SERIAL_MODES[];
extern const char* const STR_SWTYPES[];
extern const char* const STR_POTTYPES[];
extern const char* const STR_SLIDERTYPES[];
extern const char* const STR_VTRIMINC[];
extern const char* const STR_VDISPLAYTRIMS[];
extern const char* const STR_RETA123[];
extern const char* STR_TIMER_DIR[];
extern const char* const STR_TIMER_DIR[];
extern const char* STR_VBLMODE[];
extern const char* STR_VCURVEFUNC[];
extern const char* STR_VMLTPX[];
extern const char* STR_VMLTPX2[];
extern const char* STR_VMIXTRIMS[];
extern const char* STR_VCSWFUNC[];
extern const char* STR_VFSWFUNC[];
extern const char* STR_VFSWRESET[];
extern const char* STR_FUNCSOUNDS[];
extern const char* STR_VTELEMUNIT[];
extern const char* STR_GPSFORMAT[];
extern const char* STR_VTELEMSCREENTYPE[];
extern const char* STR_VSWASHTYPE[];
extern const char* const STR_VBLMODE[];
extern const char* const STR_VCURVEFUNC[];
extern const char* const STR_VMLTPX[];
extern const char* const STR_VMLTPX2[];
extern const char* const STR_VMIXTRIMS[];
extern const char* const STR_VCSWFUNC[];
extern const char* const STR_VFSWFUNC[];
extern const char* const STR_VFSWRESET[];
extern const char* const STR_FUNCSOUNDS[];
extern const char* const STR_VTELEMUNIT[];
extern const char* const STR_GPSFORMAT[];
extern const char* const STR_VTELEMSCREENTYPE[];
extern const char* const STR_VSWASHTYPE[];
extern const char* STR_VKEYS[];
extern const char* STR_VSWITCHES[];
extern const char* STR_VSRCRAW[];
extern const char* const STR_VKEYS[];
extern const char* const STR_VSWITCHES[];
extern const char* const STR_VSRCRAW[];
extern const char* STR_ROTARY_ENC_OPT[];
extern const char* const STR_ROTARY_ENC_OPT[];
#if defined(TRANSLATIONS_CZ)
extern const char* STR_INPUTNAMES[];
extern const char* const STR_INPUTNAMES[];
#endif
extern const char* STR_VTMRMODES[];
extern const char* STR_VPERSISTENT[];
extern const char* const STR_VTMRMODES[];
extern const char* const STR_VPERSISTENT[];
extern const char* STR_VLCD[];
extern const char* STR_VUNITSSYSTEM[];
extern const char* STR_VBEEPCOUNTDOWN[];
extern const char* STR_COUNTDOWNVALUES[];
extern const char* STR_VVARIOCENTER[];
extern const char* const STR_VLCD[];
extern const char* const STR_VUNITSSYSTEM[];
extern const char* const STR_VBEEPCOUNTDOWN[];
extern const char* const STR_COUNTDOWNVALUES[];
extern const char* const STR_VVARIOCENTER[];
extern const char* STR_COUNTRY_CODES[];
extern const char* STR_USBMODES[];
extern const char* STR_JACK_MODES[];
extern const char* STR_VFAILSAFE[];
extern const char* const STR_COUNTRY_CODES[];
extern const char* const STR_USBMODES[];
extern const char* const STR_JACK_MODES[];
extern const char* const STR_VFAILSAFE[];
extern const char* STR_FONT_SIZES[];
extern const char* STR_VTRAINERMODES[];
extern const char* STR_EXTERNAL_MODULE_PROTOCOLS[];
extern const char* STR_INTERNAL_MODULE_PROTOCOLS[];
extern const char* STR_R9M_REGION[];
extern const char* STR_R9M_FCC_POWER_VALUES[];
extern const char* STR_R9M_LBT_POWER_VALUES[];
extern const char* STR_R9M_LITE_FCC_POWER_VALUES[];
extern const char* STR_R9M_LITE_LBT_POWER_VALUES[];
extern const char* STR_TELEMETRY_PROTOCOLS[];
extern const char* STR_XJT_ACCST_RF_PROTOCOLS[];
extern const char* STR_ISRM_RF_PROTOCOLS[];
extern const char* STR_R9M_PXX2_RF_PROTOCOLS[];
extern const char* STR_DSM_PROTOCOLS[];
extern const char* STR_FLYSKY_PROTOCOLS[];
extern const char* STR_CRSF_BAUDRATE[];
extern const char* STR_PPM_POL[];
extern const char* STR_SBUS_INVERSION_VALUES[];
extern const char* const STR_FONT_SIZES[];
extern const char* const STR_VTRAINERMODES[];
extern const char* const STR_EXTERNAL_MODULE_PROTOCOLS[];
extern const char* const STR_INTERNAL_MODULE_PROTOCOLS[];
extern const char* const STR_R9M_REGION[];
extern const char* const STR_R9M_FCC_POWER_VALUES[];
extern const char* const STR_R9M_LBT_POWER_VALUES[];
extern const char* const STR_R9M_LITE_FCC_POWER_VALUES[];
extern const char* const STR_R9M_LITE_LBT_POWER_VALUES[];
extern const char* const STR_TELEMETRY_PROTOCOLS[];
extern const char* const STR_XJT_ACCST_RF_PROTOCOLS[];
extern const char* const STR_ISRM_RF_PROTOCOLS[];
extern const char* const STR_R9M_PXX2_RF_PROTOCOLS[];
extern const char* const STR_DSM_PROTOCOLS[];
extern const char* const STR_FLYSKY_PROTOCOLS[];
extern const char* const STR_CRSF_BAUDRATE[];
extern const char* const STR_PPM_POL[];
extern const char* const STR_SBUS_INVERSION_VALUES[];
extern const char* STR_MULTI_PROTOCOLS[];
extern const char* STR_MULTI_POWER[];
extern const char* STR_MULTI_TELEMETRY_MODE[];
extern const char* STR_MULTI_WBUS_MODE[];
extern const char* STR_SPORT_MODES[];
extern const char* STR_FSGROUPS[];
extern const char* const STR_MULTI_PROTOCOLS[];
extern const char* const STR_MULTI_POWER[];
extern const char* const STR_MULTI_TELEMETRY_MODE[];
extern const char* const STR_MULTI_WBUS_MODE[];
extern const char* const STR_SPORT_MODES[];
extern const char* const STR_FSGROUPS[];
extern const char STR_AFHDS3_ONE_TO_ONE_TELEMETRY[];
extern const char STR_AFHDS3_ONE_TO_MANY[];
extern const char* STR_AFHDS3_PROTOCOLS[];
extern const char* STR_AFHDS3_POWERS[];
extern const char* const STR_AFHDS3_PROTOCOLS[];
extern const char* const STR_AFHDS3_POWERS[];
extern const char STR_AFHDS3_RX_FREQ[];
extern const char STR_AFHDS3_ACTUAL_POWER[];
extern const char STR_AFHDS3_POWER_SOURCE[];
extern const char* STR_FLYSKY_PULSE_PROTO[];
extern const char* STR_FLYSKY_SERIAL_PROTO[];
extern const char* const STR_FLYSKY_PULSE_PROTO[];
extern const char* const STR_FLYSKY_SERIAL_PROTO[];
extern const char* STR_CURVE_TYPES[];
extern const char* STR_VSENSORTYPES[];
extern const char* STR_VFORMULAS[];
extern const char* STR_VPREC[];
extern const char* STR_VCELLINDEX[];
extern const char* const STR_CURVE_TYPES[];
extern const char* const STR_VSENSORTYPES[];
extern const char* const STR_VFORMULAS[];
extern const char* const STR_VPREC[];
extern const char* const STR_VCELLINDEX[];
extern const char STR_TOUCH_PANEL[];
extern const char* STR_ADCFILTERVALUES[];
extern const char* const STR_ADCFILTERVALUES[];
extern const char STR_FILE_SIZE[];
extern const char STR_FILE_OPEN[];
extern const char* STR_TIMER_MODES[];
extern const char* STR_MONTHS[];
extern const char* const STR_TIMER_MODES[];
extern const char* const STR_MONTHS[];
extern const char STR_BLUETOOTH[];
extern const char STR_BLUETOOTH_DISC[];
@@ -222,7 +222,7 @@ extern const char STR_BLUETOOTH_LOCAL_ADDR[];
extern const char STR_BLUETOOTH_PIN_CODE[];
extern const char STR_BLUETOOTH_NODEVICES[];
extern const char STR_BLUETOOTH_SCANNING[];
extern const char* STR_BLUETOOTH_MODES[];
extern const char* const STR_BLUETOOTH_MODES[];
#define NO_INDENT(x) (x) + LEN_INDENT
@@ -354,7 +354,7 @@ extern const char STR_SPLASHSCREEN[];
#if defined(PWR_BUTTON_PRESS)
extern const char STR_PWR_ON_DELAY[];
extern const char STR_PWR_OFF_DELAY[];
extern const char* STR_PWR_OFF_DELAYS[];
extern const char* const STR_PWR_OFF_DELAYS[];
#endif
extern const char STR_THROTTLE_WARNING[];
extern const char STR_CUSTOM_THROTTLE_WARNING[];
@@ -705,8 +705,8 @@ extern const char STR_SLIDERS[];
extern const char STR_FLIGHT_MODE[];
extern const char STR_INVALID_FILE[];
extern const char STR_TIMER_SOURCE[];
extern const char* STR_TEXT_SIZE[];
extern const char* STR_SUBTRIMMODES[];
extern const char* const STR_TEXT_SIZE[];
extern const char* const STR_SUBTRIMMODES[];
extern const char STR_SIZE[];
extern const char STR_SHADOW[];
extern const char STR_TEXT[];
@@ -741,7 +741,7 @@ extern const char STR_TIME[];
extern const char STR_MAXBAUDRATE[];
extern const char STR_BAUDRATE[];
extern const char STR_SAMPLE_MODE[];
extern const char* STR_SAMPLE_MODES[];
extern const char* const STR_SAMPLE_MODES[];
extern const char STR_BLUETOOTH_BAUDRATE[];
extern const char STR_SD_INFO_TITLE[];
extern const char STR_SD_TYPE[];
@@ -1019,7 +1019,7 @@ extern const char STR_RXFREQUENCY[];
extern const char STR_ANTENNASELECTION[];
extern const char STR_ANTENNACONFIRM1[];
extern const char STR_ANTENNACONFIRM2[];
extern const char* STR_ANTENNA_MODES[];
extern const char* const STR_ANTENNA_MODES[];
extern const char STR_USE_INTERNAL_ANTENNA[];
extern const char STR_USE_EXTERNAL_ANTENNA[];
extern const char STR_MODULE_PROTOCOL_FLEX_WARN_LINE1[];
@@ -1151,7 +1151,7 @@ extern const char STR_JITTER_FILTER[];
extern const char STR_DEAD_ZONE[];
extern const char STR_RTC_CHECK[];
extern const char STR_SPORT_UPDATE_POWER_MODE[];
extern const char* STR_SPORT_UPDATE_POWER_MODES[];
extern const char* const STR_SPORT_UPDATE_POWER_MODES[];
extern const char STR_MODULE_RANGE[];
extern const char STR_RECEIVER_OPTIONS[];