From b1521579ba3cd8f7f18cdfa2843d388e661e01ab Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 22 Oct 2021 07:53:54 +0200 Subject: [PATCH] Improved telemetry screen type output --- radio/src/datastructs.h | 34 ++++++++++++--- .../yaml/yaml_datastructs_funcs.cpp | 22 ++++++++++ .../conversions/yaml/yaml_datastructs_t12.cpp | 11 ++--- .../conversions/yaml/yaml_datastructs_t8.cpp | 11 ++--- .../yaml/yaml_datastructs_tlite.cpp | 11 ++--- .../yaml/yaml_datastructs_tx12.cpp | 11 ++--- .../conversions/yaml/yaml_datastructs_x7.cpp | 11 ++--- .../conversions/yaml/yaml_datastructs_x9d.cpp | 11 ++--- .../conversions/yaml/yaml_datastructs_x9e.cpp | 11 ++--- .../yaml/yaml_datastructs_x9lite.cpp | 11 ++--- .../yaml/yaml_datastructs_x9lites.cpp | 11 ++--- .../yaml/yaml_datastructs_xlite.cpp | 11 ++--- .../yaml/yaml_datastructs_xlites.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_funcs.cpp | 41 +++++++++++++++++++ .../src/storage/yaml/yaml_datastructs_t12.cpp | 11 ++--- .../src/storage/yaml/yaml_datastructs_t8.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_tlite.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_tx12.cpp | 11 ++--- .../src/storage/yaml/yaml_datastructs_x7.cpp | 11 ++--- .../src/storage/yaml/yaml_datastructs_x9d.cpp | 11 ++--- .../src/storage/yaml/yaml_datastructs_x9e.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_x9lite.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_x9lites.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_xlite.cpp | 11 ++--- .../storage/yaml/yaml_datastructs_xlites.cpp | 11 ++--- 25 files changed, 223 insertions(+), 116 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 7840fe94f..76d3d019a 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -293,6 +293,10 @@ PACK(struct FrSkyBarData { ls_telemetry_value_t barMax; // ditto for max display (would usually = ratio) }); +// This is used to be able to use +// custom read/write functions in +// an array made of typdef'ed literal types +// (YAML generator) #if defined(YAML_GENERATOR) PACK(struct LineDataSource { source_t val CUST(r_mixSrcRaw,w_mixSrcRaw); @@ -301,6 +305,7 @@ PACK(struct FrSkyLineData { LineDataSource sources[NUM_LINE_ITEMS]; }); #else +// This here is the real structure used at run-time PACK(struct FrSkyLineData { source_t sources[NUM_LINE_ITEMS]; }); @@ -313,6 +318,19 @@ PACK(struct TelemetryScriptData { }); #endif +#if defined(YAML_GENERATOR) +union TelemetryScreenData_u { + FrSkyBarData bars[4]; + FrSkyLineData lines[4]; +#if defined(PCBTARANIS) + TelemetryScriptData script; +#endif +}; +PACK(struct TelemetryScreenData { + CUST_ATTR(type,r_tele_screen_type,w_tele_screen_type); + TelemetryScreenData_u u FUNC(select_tele_screen_data); +}); +#else union TelemetryScreenData { FrSkyBarData bars[4]; FrSkyLineData lines[4]; @@ -322,8 +340,10 @@ union TelemetryScreenData { } FUNC(select_tele_screen_data); #endif +#endif + PACK(struct VarioData { - uint8_t source:7; + uint8_t source:7; // telemetry sensor idx + 1 uint8_t centerSilent:1; int8_t centerMax; int8_t centerMin; @@ -340,7 +360,8 @@ PACK(struct VarioData { PACK(struct TelemetrySensor { union { - uint16_t id; // data identifier, for FrSky we can reuse existing ones. Source unit is derived from type. + uint16_t id; // data identifier, for FrSky we can reuse existing ones. + // Source unit is derived from type. NOBACKUP(uint16_t persistentValue); } NAME(id1) FUNC(select_id1); union { @@ -353,7 +374,8 @@ PACK(struct TelemetrySensor { } NAME(id2) FUNC(select_id2); char label[TELEM_LABEL_LEN]; // user defined label uint8_t subId; - uint8_t type:1; // 0=custom / 1=calculated // user can choose what unit to display each value in + uint8_t type:1; // 0=custom / 1=calculated + // user can choose what unit to display each value in uint8_t spare1:1 SKIP; uint8_t unit:6; uint8_t prec:2; @@ -587,7 +609,7 @@ PACK(struct CustomScreenData { NOBACKUP(uint8_t view); #else #define CUSTOM_SCREENS_DATA \ - uint8_t screensType; /* 2bits per screen (None/Gauges/Numbers/Script) */ \ + uint8_t screensType SKIP; /* 2bits per screen (None/Gauges/Numbers/Script) */ \ TelemetryScreenData screens[MAX_TELEMETRY_SCREENS]; \ uint8_t view; #endif @@ -934,7 +956,7 @@ static inline void check_struct() CHKSIZE(SwashRingData, 8); CHKSIZE(FrSkyBarData, 6); CHKSIZE(FrSkyLineData, 4); - CHKTYPE(union TelemetryScreenData, 24); + CHKTYPE(TelemetryScreenData, 24); CHKSIZE(ModelHeader, 12); CHKSIZE(CurveHeader, 4); #elif defined(PCBTARANIS) @@ -948,7 +970,7 @@ static inline void check_struct() CHKSIZE(SwashRingData, 8); CHKSIZE(FrSkyBarData, 6); CHKSIZE(FrSkyLineData, 6); - CHKTYPE(union TelemetryScreenData, 24); + CHKTYPE(TelemetryScreenData, 24); CHKSIZE(ModelHeader, 24); CHKSIZE(CurveHeader, 4); #elif defined(PCBHORUS) diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index f4c688383..333242058 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -619,6 +619,28 @@ static bool w_trainerMode(const YamlNode* node, uint32_t val, } #if !defined(COLORLCD) +#define r_tele_screen_type nullptr + +static const char* _tele_screen_type_lookup[] = { + "NONE", + "VALUES", + "BARS", + "SCRIPT", +}; + +static bool w_tele_screen_type(void* user, uint8_t* data, uint32_t bitoffs, + yaml_writer_func wf, void* opaque) +{ + auto tw = reinterpret_cast(user); + uint16_t idx = tw->getElmts(1); + + data -= sizeof(TelemetryScreenData) * idx + 1; + uint8_t type = ((*data) >> (2 * idx)) & 0x03; + + const char* str = _tele_screen_type_lookup[type]; + return wf(opaque, str, strlen(str)); +} + static uint8_t select_tele_screen_data(void* user, uint8_t* data, uint32_t bitoffs) { auto tw = reinterpret_cast(user); diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_t12.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_t8.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_tlite.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp index 2de1f226e..dcc89681f 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_tx12.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x7.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp index 6b4323b74..658c03899 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9d.cpp @@ -756,15 +756,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 48, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -811,8 +812,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 5, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp index e7d09858a..60c458ce1 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9e.cpp @@ -795,15 +795,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 48, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -851,8 +852,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("potsWarnPosition", 8, 8, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), YAML_UNSIGNED( "toplcdTimer", 8 ), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp index 08f289874..b7b0ad2ea 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lite.cpp @@ -728,15 +728,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -781,8 +782,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 1, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp index 1fc15f977..457f34051 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_x9lites.cpp @@ -738,15 +738,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -791,8 +792,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 1, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp index 130bed166..34b6947fd 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_xlite.cpp @@ -735,15 +735,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -788,8 +789,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp index b105ab03e..5ca354dfd 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_xlites.cpp @@ -739,15 +739,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -792,8 +793,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 1667283ce..fa7dac400 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -923,6 +923,47 @@ static bool w_trainerMode(const YamlNode* node, uint32_t val, } #if !defined(COLORLCD) + +static const char* _tele_screen_type_lookup[] = { + "NONE", + "VALUES", + "BARS", + "SCRIPT", +}; + +static void r_tele_screen_type(void* user, uint8_t* data, uint32_t bitoffs, + const char* val, uint8_t val_len) +{ + uint8_t type = 0; + for (uint8_t i = 0; i < 4; i++) { + if (!strncmp(val, _tele_screen_type_lookup[i], val_len)) { + type = i; + break; + } + } + + if (!type) return; + + auto tw = reinterpret_cast(user); + uint16_t idx = tw->getElmts(1); + + data -= sizeof(TelemetryScreenData) * idx + 1; + *data = (*data & ~(0x03 << (2 * idx))) | (type << (2 * idx)); +} + +static bool w_tele_screen_type(void* user, uint8_t* data, uint32_t bitoffs, + yaml_writer_func wf, void* opaque) +{ + auto tw = reinterpret_cast(user); + uint16_t idx = tw->getElmts(1); + + data -= sizeof(TelemetryScreenData) * idx + 1; + uint8_t type = ((*data) >> (2 * idx)) & 0x03; + + const char* str = _tele_screen_type_lookup[type]; + return wf(opaque, str, strlen(str)); +} + static uint8_t select_tele_screen_data(void* user, uint8_t* data, uint32_t bitoffs) { auto tw = reinterpret_cast(user); diff --git a/radio/src/storage/yaml/yaml_datastructs_t12.cpp b/radio/src/storage/yaml/yaml_datastructs_t12.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t12.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_t8.cpp b/radio/src/storage/yaml/yaml_datastructs_t8.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t8.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t8.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_tlite.cpp b/radio/src/storage/yaml/yaml_datastructs_tlite.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tlite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tlite.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_tx12.cpp b/radio/src/storage/yaml/yaml_datastructs_tx12.cpp index 2de1f226e..dcc89681f 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tx12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tx12.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_x7.cpp b/radio/src/storage/yaml/yaml_datastructs_x7.cpp index a662a0ff5..ebf2b590b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x7.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x7.cpp @@ -743,15 +743,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -796,8 +797,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp index 6b4323b74..658c03899 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp @@ -756,15 +756,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 48, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -811,8 +812,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 5, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp index e7d09858a..60c458ce1 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp @@ -795,15 +795,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 48, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -851,8 +852,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("potsWarnPosition", 8, 8, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), YAML_UNSIGNED( "toplcdTimer", 8 ), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp index 08f289874..b7b0ad2ea 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp @@ -728,15 +728,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -781,8 +782,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 1, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp b/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp index 1fc15f977..457f34051 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9lites.cpp @@ -738,15 +738,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -791,8 +792,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 1, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp index 130bed166..34b6947fd 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp @@ -735,15 +735,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -788,8 +789,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END diff --git a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp index b105ab03e..5ca354dfd 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp @@ -739,15 +739,16 @@ static const struct YamlNode struct_TelemetryScriptData[] = { YAML_ARRAY("inputs", 16, 8, struct_signed_16, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData_elmts[] = { +static const struct YamlNode union_TelemetryScreenData_u_elmts[] = { YAML_ARRAY("bars", 48, 4, struct_FrSkyBarData, NULL), YAML_ARRAY("lines", 32, 4, struct_FrSkyLineData, NULL), YAML_STRUCT("script", 176, struct_TelemetryScriptData, NULL), YAML_END }; -static const struct YamlNode union_TelemetryScreenData[] = { +static const struct YamlNode struct_TelemetryScreenData[] = { YAML_IDX, - YAML_UNION("u", 192, union_TelemetryScreenData_elmts, select_tele_screen_data), + YAML_CUSTOM("type",r_tele_screen_type,w_tele_screen_type), + YAML_UNION("u", 192, union_TelemetryScreenData_u_elmts, select_tele_screen_data), YAML_END }; static const struct YamlNode struct_ModelData[] = { @@ -792,8 +793,8 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 8 ), YAML_ARRAY("potsWarnPosition", 8, 2, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 40, struct_TelemetrySensor, NULL), - YAML_UNSIGNED( "screensType", 8 ), - YAML_ARRAY("screens", 192, 4, union_TelemetryScreenData, NULL), + YAML_PADDING( 8 ), + YAML_ARRAY("screens", 192, 4, struct_TelemetryScreenData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_END