From 1ec3113a856b5bc9f6b4cf4b59aa781c10806c39 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 19 Dec 2021 12:34:50 +0100 Subject: [PATCH] Fixed outputting timers, flight modes, mixers and limits --- .../src/firmwares/edgetx/yaml_modeldata.cpp | 76 ++++++++++++------- companion/src/firmwares/timerdata.cpp | 7 +- companion/src/firmwares/timerdata.h | 2 +- 3 files changed, 56 insertions(+), 29 deletions(-) diff --git a/companion/src/firmwares/edgetx/yaml_modeldata.cpp b/companion/src/firmwares/edgetx/yaml_modeldata.cpp index 97dcb6087..cb684e378 100644 --- a/companion/src/firmwares/edgetx/yaml_modeldata.cpp +++ b/companion/src/firmwares/edgetx/yaml_modeldata.cpp @@ -80,6 +80,8 @@ struct YamlTrim { YamlTrim(int mode, int ref, int value): mode(mode), ref(ref), value(value) {} + + bool isEmpty() { return !mode && !ref && !value; } }; struct YamlThrTrace { @@ -340,25 +342,46 @@ struct convert { } }; -template <> -struct convert { - static Node encode(const FlightModeData& rhs) - { +Node EncodeFMData(const FlightModeData& rhs, int phaseIdx) +{ Node node; - // TODO: use max number of trims for radio instead - YamlTrim yt[CPN_MAX_TRIMS]; - for (int i=0; i 0) { + node["swtch"] = rhs.swtch; } - node["trim"] = encode_array(yt); - node["swtch"] = rhs.swtch; node["name"] = rhs.name; node["fadeIn"] = rhs.fadeIn; node["fadeOut"] = rhs.fadeOut; - node["gvars"] = encode_array(rhs.gvars); - return node; - } + Node gvars; + for (size_t i=0; i +struct convert { static bool decode(const Node& node, FlightModeData& rhs) { YamlTrim trims[CPN_MAX_TRIMS]; @@ -638,15 +661,19 @@ Node convert::encode(const ModelData& rhs) for (int i=0; i::encode(const ModelData& rhs) node["throttleReversed"] = (int)rhs.throttleReversed; for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) { - Node fmNode; - fmNode = rhs.flightModeData[i]; - node["flightModeData"].push_back(fmNode); + if (!rhs.flightModeData[i].isEmpty(i)) { + node["flightModeData"][std::to_string(i)] = + EncodeFMData(rhs.flightModeData[i], i); + } } for (int i = 0; i < CPN_MAX_MIXERS; i++) { const MixData& mix = rhs.mixData[i]; if (!mix.isEmpty()) { - Node mixNode; - mixNode = mix; - node["mixData"].push_back(mixNode); + node["mixData"].push_back(Node(mix)); } } for (int i = 0; i < CPN_MAX_CHNOUT; i++) { const LimitData& limit = rhs.limitData[i]; if (!limit.isEmpty()) { - Node limitNode; - limitNode = limit; - node["limitData"].push_back(limitNode); + node["limitData"].push_back(Node(limit)); } } @@ -772,7 +796,7 @@ Node convert::encode(const ModelData& rhs) } Node vario; - vario["source"] = YamlTelemSource{rhs.frsky.varioSource}; + vario["source"] = YamlTelemSource(rhs.frsky.varioSource); vario["centerSilent"] = (int)rhs.frsky.varioCenterSilent; vario["centerMax"] = rhs.frsky.varioCenterMax; vario["centerMin"] = rhs.frsky.varioCenterMin; diff --git a/companion/src/firmwares/timerdata.cpp b/companion/src/firmwares/timerdata.cpp index 676b3b3c4..abde9046f 100644 --- a/companion/src/firmwares/timerdata.cpp +++ b/companion/src/firmwares/timerdata.cpp @@ -35,9 +35,12 @@ void TimerData::clear() swtch = RawSwitch(SWITCH_TYPE_NONE); } -bool TimerData::isEmpty() +bool TimerData::isEmpty() const { - return (swtch == RawSwitch(SWITCH_TYPE_NONE, 0) && mode == TIMERMODE_OFF && name[0] == '\0' && minuteBeep == 0 && countdownBeep == COUNTDOWNBEEP_SILENT && val == 0 && persistent == 0 /*&& pvalue == 0*/); + return (swtch == RawSwitch(SWITCH_TYPE_NONE, 0) && mode == TIMERMODE_OFF && + name[0] == '\0' && minuteBeep == 0 && + countdownBeep == COUNTDOWNBEEP_SILENT && val == 0 && + persistent == 0 /*&& pvalue == 0*/); } bool TimerData::isModeOff() diff --git a/companion/src/firmwares/timerdata.h b/companion/src/firmwares/timerdata.h index 42d008664..78bcec716 100644 --- a/companion/src/firmwares/timerdata.h +++ b/companion/src/firmwares/timerdata.h @@ -88,7 +88,7 @@ class TimerData { void convert(RadioDataConversionState & cstate); void clear(); - bool isEmpty(); + bool isEmpty() const; bool isModeOff(); QString nameToString(int index) const; QString countdownBeepToString() const;