From c2dc4e6c0b72e992d042d673a1d350555b8d4a14 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 21 Jun 2022 06:45:35 +0200 Subject: [PATCH] YAML: avoid forcing to add parser for non-existing old format v220 (#2068) --- .../conversions/conversions_220_221.cpp | 4 ++-- .../conversions/yaml/yaml_datastructs.cpp | 10 ++++++++++ .../yaml/yaml_datastructs_funcs.cpp | 16 ++++++++++++++- .../storage/yaml/yaml_datastructs_funcs.cpp | 20 +++++++++++++++++-- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/radio/src/storage/conversions/conversions_220_221.cpp b/radio/src/storage/conversions/conversions_220_221.cpp index 7a1981c82..fdde3b458 100644 --- a/radio/src/storage/conversions/conversions_220_221.cpp +++ b/radio/src/storage/conversions/conversions_220_221.cpp @@ -19,6 +19,8 @@ * GNU General Public License for more details. */ +#if STORAGE_CONVERSIONS < 221 + #include #include #include @@ -44,8 +46,6 @@ namespace yaml_conv_220 { const YamlNode* get_partialmodel_nodes(); }; -#if STORAGE_CONVERSIONS < 221 - #if defined(STORAGE_MODELSLIST) void patchFilenameToYaml(char* str); diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs.cpp index 606dc3793..b08159c71 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs.cpp @@ -33,6 +33,8 @@ #include "../../../timers.h" #include "../../../pulses/multi.h" +#if STORAGE_CONVERSIONS < 221 + namespace yaml_conv_220 { #include "yaml_datastructs_funcs.cpp" @@ -77,3 +79,11 @@ static_assert(MAX_STR > MAX_RADIODATA_MODELDATA_PARTIALMODEL_STR_LEN, "MAX_STR > MAX_RADIODATA_MODELDATA_PARTIALMODEL_STR_LEN"); }; + +#else + +namespace yaml_conv_220 { +#include "yaml_datastructs_funcs.cpp" +}; + +#endif // STORAGE_CONVERSIONS diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index 94268f70f..5becae254 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -66,6 +66,7 @@ bool output_source_1_param(const char* src_prefix, size_t src_len, uint32_t n, return true; } +#if STORAGE_CONVERSIONS < 221 bool w_mixSrcRaw(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque) { const char* str = nullptr; @@ -149,6 +150,7 @@ bool w_mixSrcRaw(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* return true; } +#endif #define r_vbat_min nullptr @@ -204,6 +206,7 @@ bool w_zov_color(void* user, uint8_t* data, uint32_t bitoffs, } #endif +#if STORAGE_CONVERSIONS < 221 static uint8_t select_mod_type(void* user, uint8_t* data, uint32_t bitoffs) { data += bitoffs >> 3UL; @@ -239,6 +242,7 @@ static uint8_t select_mod_type(void* user, uint8_t* data, uint32_t bitoffs) } return 0; } +#endif uint8_t select_script_input(void* user, uint8_t* data, uint32_t bitoffs) { @@ -293,6 +297,7 @@ uint8_t select_sensor_cfg(void* user, uint8_t* data, uint32_t bitoffs) return 5; } +#if STORAGE_CONVERSIONS < 221 #define r_calib nullptr static bool w_calib(void* user, yaml_writer_func wf, void* opaque) @@ -361,7 +366,8 @@ bool sw_name_write(void* user, uint8_t* data, uint32_t bitoffs, return false; return wf(opaque, "\"", 1); } - +#endif + extern const struct YamlIdStr enum_SwitchConfig[]; const struct YamlIdStr enum_SwitchConfig[] = { { SWITCH_NONE, "none" }, @@ -371,6 +377,7 @@ const struct YamlIdStr enum_SwitchConfig[] = { { 0, NULL } }; +#if STORAGE_CONVERSIONS < 221 static const struct YamlNode struct_switchConfig[] = { YAML_IDX_CUST( "sw", nullptr, sw_write ), YAML_ENUM( "type", 2, enum_SwitchConfig), @@ -536,6 +543,7 @@ static bool w_swtchSrc(const YamlNode* node, uint32_t val, yaml_writer_func wf, return false; return true; } +#endif bool cfn_is_active(void* user, uint8_t* data, uint32_t bitoffs) { @@ -677,6 +685,7 @@ bool w_swtchWarn(void* user, uint8_t* data, uint32_t bitoffs, } #endif +#if STORAGE_CONVERSIONS < 221 extern const struct YamlIdStr enum_BeeperMode[]; #define r_beeperMode nullptr @@ -687,6 +696,7 @@ bool w_beeperMode(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* const char* str = yaml_output_enum(sval, enum_BeeperMode); return wf(opaque, str, strlen(str)); } +#endif #define r_5pos nullptr @@ -744,6 +754,7 @@ const struct YamlIdStr enum_TrainerMode[] = { #define r_trainerMode nullptr +#if STORAGE_CONVERSIONS < 221 static bool w_trainerMode(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque) { @@ -756,6 +767,7 @@ static bool w_trainerMode(const YamlNode* node, uint32_t val, return true; } +#endif #if !defined(COLORLCD) #define r_tele_screen_type nullptr @@ -856,6 +868,7 @@ const char* _adjust_gvar_mode_lookup[] = { }; extern const uint8_t _adjust_gvar_mode_lookup_size = 4; +#if STORAGE_CONVERSIONS < 221 bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, yaml_writer_func wf, void* opaque) { @@ -1078,6 +1091,7 @@ bool w_thrSrc(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opa auto src = throttleSource2Source(val); return w_mixSrcRaw(nullptr, src, wf, opaque); } +#endif // Force external linkage extern const struct YamlIdStr enum_XJT_Subtypes[]; diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 88fe64468..26e18515b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -52,7 +52,6 @@ namespace yaml_conv_220 { bool fmd_is_active(void* user, uint8_t* data, uint32_t bitoffs); bool swash_is_active(void* user, uint8_t* data, uint32_t bitoffs); - bool w_beeperMode(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque); bool w_5pos(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque); bool w_vol(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque); bool w_spPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque); @@ -998,7 +997,9 @@ static uint32_t r_beeperMode(const YamlNode* node, const char* val, uint8_t val_ static bool w_beeperMode(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque) { - return yaml_conv_220::w_beeperMode(node, val, wf, opaque); + int32_t sval = yaml_to_signed(val,node->size); + const char* str = yaml_output_enum(sval, enum_BeeperMode); + return wf(opaque, str, strlen(str)); } static uint32_t r_5pos(const YamlNode* node, const char* val, uint8_t val_len) @@ -1821,6 +1822,17 @@ static const struct YamlIdStr enum_SerialPort[] = { { 0, NULL } }; +#if STORAGE_CONVERSIONS >= 221 +const struct YamlIdStr _old_enum_UartModes[] = { + { UART_MODE_NONE, "MODE_NONE" }, + { UART_MODE_TELEMETRY_MIRROR, "MODE_TELEMETRY_MIRROR" }, + { UART_MODE_TELEMETRY, "MODE_TELEMETRY" }, + { UART_MODE_SBUS_TRAINER, "MODE_SBUS_TRAINER" }, + { UART_MODE_LUA, "MODE_LUA" }, + { 0, NULL } +}; +#endif + static const struct YamlIdStr enum_UartModes[] = { { UART_MODE_NONE, "NONE" }, { UART_MODE_TELEMETRY_MIRROR, "TELEMETRY_MIRROR" }, @@ -1875,7 +1887,11 @@ static void r_serialMode(void* user, uint8_t* data, uint32_t bitoffs, else return; +#if STORAGE_CONVERSIONS < 221 auto m = yaml_parse_enum(yaml_conv_220::enum_UartModes, val, val_len); +#else + auto m = yaml_parse_enum(_old_enum_UartModes, val, val_len); +#endif if (!m) return; auto serialPort = reinterpret_cast(data);