From acd95dfad44248ee3699987de7a9116222cb67ab Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 18 Jan 2023 11:12:35 +0100 Subject: [PATCH] fix(B&W): Avoid having constants in SRAM (#2993) fix constness to avoid having constants in data segment .... and thus free some precious RAM --- radio/src/gui/128x64/gui.h | 2 +- radio/src/gui/128x64/lcd.cpp | 2 +- radio/src/gui/128x64/lcd.h | 2 +- radio/src/gui/128x64/widgets.cpp | 2 +- radio/src/gui/212x64/gui.h | 2 +- radio/src/gui/212x64/lcd.cpp | 2 +- radio/src/gui/212x64/lcd.h | 2 +- radio/src/gui/212x64/splash.cpp | 2 +- radio/src/gui/212x64/widgets.cpp | 2 +- radio/src/gui/gui_common.cpp | 122 +++++++-------- radio/src/io/multi_protolist.cpp | 2 +- radio/src/io/multi_protolist.h | 2 +- radio/src/pulses/crossfire.cpp | 5 +- radio/src/pulses/crossfire.h | 4 +- radio/src/pulses/modules_helpers.h | 4 +- radio/src/strhelpers.cpp | 2 +- radio/src/strhelpers.h | 2 +- radio/src/targets/taranis/stm32f2_flash.ld | 8 +- radio/src/targets/taranis/stm32f4_flash.ld | 1 + radio/src/thirdparty/libopenui | 2 +- radio/src/translations.cpp | 6 +- radio/src/translations.h | 170 ++++++++++----------- 22 files changed, 176 insertions(+), 172 deletions(-) diff --git a/radio/src/gui/128x64/gui.h b/radio/src/gui/128x64/gui.h index f5b49ed9b..a8407477e 100644 --- a/radio/src/gui/128x64/gui.h +++ b/radio/src/gui/128x64/gui.h @@ -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); diff --git a/radio/src/gui/128x64/lcd.cpp b/radio/src/gui/128x64/lcd.cpp index 3fe923f76..4f3092c46 100644 --- a/radio/src/gui/128x64/lcd.cpp +++ b/radio/src/gui/128x64/lcd.cpp @@ -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); } diff --git a/radio/src/gui/128x64/lcd.h b/radio/src/gui/128x64/lcd.h index 9a3897249..ea3858a08 100644 --- a/radio/src/gui/128x64/lcd.h +++ b/radio/src/gui/128x64/lcd.h @@ -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); diff --git a/radio/src/gui/128x64/widgets.cpp b/radio/src/gui/128x64/widgets.cpp index 535f417f1..663ca73f5 100644 --- a/radio/src/gui/128x64/widgets.cpp +++ b/radio/src/gui/128x64/widgets.cpp @@ -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); diff --git a/radio/src/gui/212x64/gui.h b/radio/src/gui/212x64/gui.h index f2c080e68..5af505c33 100644 --- a/radio/src/gui/212x64/gui.h +++ b/radio/src/gui/212x64/gui.h @@ -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); diff --git a/radio/src/gui/212x64/lcd.cpp b/radio/src/gui/212x64/lcd.cpp index 4d4e2c74b..aab6ab39e 100644 --- a/radio/src/gui/212x64/lcd.cpp +++ b/radio/src/gui/212x64/lcd.cpp @@ -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); } diff --git a/radio/src/gui/212x64/lcd.h b/radio/src/gui/212x64/lcd.h index f75e98a47..c3b20aba7 100644 --- a/radio/src/gui/212x64/lcd.h +++ b/radio/src/gui/212x64/lcd.h @@ -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); diff --git a/radio/src/gui/212x64/splash.cpp b/radio/src/gui/212x64/splash.cpp index 110f5e4a5..907e590d9 100644 --- a/radio/src/gui/212x64/splash.cpp +++ b/radio/src/gui/212x64/splash.cpp @@ -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" diff --git a/radio/src/gui/212x64/widgets.cpp b/radio/src/gui/212x64/widgets.cpp index f6859bf2d..e6f232a07 100644 --- a/radio/src/gui/212x64/widgets.cpp +++ b/radio/src/gui/212x64/widgets.cpp @@ -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); diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index bf6393c32..9ed3c9717 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -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, diff --git a/radio/src/io/multi_protolist.cpp b/radio/src/io/multi_protolist.cpp index c36a0feca..92edceefb 100644 --- a/radio/src/io/multi_protolist.cpp +++ b/radio/src/io/multi_protolist.cpp @@ -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); diff --git a/radio/src/io/multi_protolist.h b/radio/src/io/multi_protolist.h index b1d4d92a0..62855fd94 100644 --- a/radio/src/io/multi_protolist.h +++ b/radio/src/io/multi_protolist.h @@ -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); diff --git a/radio/src/pulses/crossfire.cpp b/radio/src/pulses/crossfire.cpp index 2c892f94a..21b71e6cc 100644 --- a/radio/src/pulses/crossfire.cpp +++ b/radio/src/pulses/crossfire.cpp @@ -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, diff --git a/radio/src/pulses/crossfire.h b/radio/src/pulses/crossfire.h index 511911c64..c0d85a841 100644 --- a/radio/src/pulses/crossfire.h +++ b/radio/src/pulses/crossfire.h @@ -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; diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index 684ceafc4..c07637c21 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -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; }; diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index 15a627a60..b16c70f75 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -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; diff --git a/radio/src/strhelpers.h b/radio/src/strhelpers.h index e55167d2d..08d2eaa88 100644 --- a/radio/src/strhelpers.h +++ b/radio/src/strhelpers.h @@ -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}); diff --git a/radio/src/targets/taranis/stm32f2_flash.ld b/radio/src/targets/taranis/stm32f2_flash.ld index e696af604..be9c5dda3 100644 --- a/radio/src/targets/taranis/stm32f2_flash.ld +++ b/radio/src/targets/taranis/stm32f2_flash.ld @@ -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)) diff --git a/radio/src/targets/taranis/stm32f4_flash.ld b/radio/src/targets/taranis/stm32f4_flash.ld index 7d5706c55..ab1ce7b76 100644 --- a/radio/src/targets/taranis/stm32f4_flash.ld +++ b/radio/src/targets/taranis/stm32f4_flash.ld @@ -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)) diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index 8a59435ca..6b76d0011 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit 8a59435ca2bd5b5f2c52fbbcccf0e1526e358be7 +Subproject commit 6b76d00119581ba96e97dd4db150a26af8ddad93 diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index c57845cbf..62f810000 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -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) diff --git a/radio/src/translations.h b/radio/src/translations.h index c22ae3ac4..989386db4 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -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[];