Improved telemetry screen type output

This commit is contained in:
Raphael Coeffic
2021-11-10 11:07:02 +01:00
parent 4ee58045e1
commit b1521579ba
25 changed files with 223 additions and 116 deletions
+28 -6
View File
@@ -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)
@@ -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<YamlTreeWalker*>(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<YamlTreeWalker*>(user);
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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<YamlTreeWalker*>(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<YamlTreeWalker*>(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<YamlTreeWalker*>(user);
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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