From f3bf1d4d428bcf09525d47de79b91676f7f261c3 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 1 Dec 2021 10:49:06 +0100 Subject: [PATCH] Add calib data write --- .../src/firmwares/edgetx/edgetxinterface.cpp | 6 +- .../src/firmwares/edgetx/yaml_calibdata.cpp | 56 ++++++++++++++++++- .../src/firmwares/edgetx/yaml_calibdata.h | 41 +++++--------- .../firmwares/edgetx/yaml_generalsettings.h | 19 +++---- .../src/firmwares/edgetx/yaml_trainerdata.cpp | 17 ++++-- 5 files changed, 95 insertions(+), 44 deletions(-) diff --git a/companion/src/firmwares/edgetx/edgetxinterface.cpp b/companion/src/firmwares/edgetx/edgetxinterface.cpp index 3ee882abe..ad31f1f15 100644 --- a/companion/src/firmwares/edgetx/edgetxinterface.cpp +++ b/companion/src/firmwares/edgetx/edgetxinterface.cpp @@ -37,6 +37,9 @@ static void writeYamlToByteArray(const YAML::Node& node, QByteArray& data) std::stringstream data_ostream; data_ostream << node; data = QByteArray::fromStdString(data_ostream.str()); + + qDebug() << "Saving radio.yml:"; + qDebug() << data_ostream.str().c_str(); } bool loadModelsListFromYaml(std::vector categories, @@ -109,5 +112,6 @@ bool writeRadioSettingsToYaml(const GeneralSettings& settings, QByteArray& data) YAML::Node node; node = settings; writeYamlToByteArray(node, data); - return true; + + return false; } diff --git a/companion/src/firmwares/edgetx/yaml_calibdata.cpp b/companion/src/firmwares/edgetx/yaml_calibdata.cpp index b5cd83a4e..5dbfbb27e 100644 --- a/companion/src/firmwares/edgetx/yaml_calibdata.cpp +++ b/companion/src/firmwares/edgetx/yaml_calibdata.cpp @@ -25,7 +25,7 @@ // // This is only valid for X10, T16, TX16S (not X12S) // -const YamlLookupTable calibIdxLut = { +static const YamlLookupTable calibIdxLut = { { 0, "Rud" }, { 1, "Ele" }, { 2, "Thr" }, @@ -46,6 +46,16 @@ const YamlLookupTable calibIdxLut = { YamlCalibData::YamlCalibData() { memset(calib, 0, sizeof(calib)); } +YamlCalibData::YamlCalibData(const int* calibMid, const int* calibSpanNeg, + const int* calibSpanPos) +{ + for (int i = 0; i < CPN_MAX_ANALOGS; i++) { + calib[i].mid = calibMid[i]; + calib[i].spanNeg = calibSpanNeg[i]; + calib[i].spanPos = calibSpanPos[i]; + } +} + void YamlCalibData::copy(int* calibMid, int* calibSpanNeg, int* calibSpanPos) const { @@ -55,3 +65,47 @@ void YamlCalibData::copy(int* calibMid, int* calibSpanNeg, calibSpanPos[i] = calib[i].spanPos; } } + +namespace YAML +{ + +Node convert::encode(const CalibData& rhs) +{ + Node node; + node["mid"] = rhs.mid; + node["spanNeg"] = rhs.spanNeg; + node["spanPos"] = rhs.spanPos; + return node; +} + +bool convert::decode(const Node& node, CalibData& rhs) +{ + if (!node.IsMap()) return false; + node["mid"] >> rhs.mid; + node["spanNeg"] >> rhs.spanNeg; + node["spanPos"] >> rhs.spanPos; + return true; +} + +Node convert::encode(const YamlCalibData& rhs) +{ + Node node; + // TODO: we need something better here! + for (const auto& kv : calibIdxLut) { + node[kv.second] = rhs.calib[kv.first]; + } + return node; +} + +bool convert::decode(const Node& node, YamlCalibData& rhs) +{ + if (!node.IsMap()) return false; + int idx = 0; + for (const auto& kv : node) { + kv.first >> calibIdxLut >> idx; + kv.second >> rhs.calib[idx]; + } + return true; +} + +} // namespace YAML diff --git a/companion/src/firmwares/edgetx/yaml_calibdata.h b/companion/src/firmwares/edgetx/yaml_calibdata.h index a0de4c915..be8f37981 100644 --- a/companion/src/firmwares/edgetx/yaml_calibdata.h +++ b/companion/src/firmwares/edgetx/yaml_calibdata.h @@ -31,34 +31,21 @@ struct YamlCalibData { CalibData calib[CPN_MAX_ANALOGS]; YamlCalibData(); + YamlCalibData(const int* calibMid, const int* calibSpanNeg, const int* calibSpanPos); void copy(int* calibMid, int* calibSpanNeg, int* calibSpanPos) const; }; -extern const YamlLookupTable calibIdxLut; +namespace YAML +{ +template <> +struct convert { + static Node encode(const CalibData& rhs); + static bool decode(const Node& node, CalibData& rhs); +}; -namespace YAML { - - template<> - struct convert { - static bool decode(const Node& node, CalibData& rhs) { - if (!node.IsMap()) return false; - node["mid"] >> rhs.mid; - node["spanNeg"] >> rhs.spanNeg; - node["spanPos"] >> rhs.spanPos; - return true; - } - }; - - template<> - struct convert { - static bool decode(const Node& node, YamlCalibData& rhs) { - if (!node.IsMap()) return false; - int idx = 0; - for (const auto& kv : node) { - kv.first >> calibIdxLut >> idx; - kv.second >> rhs.calib[idx]; - } - return true; - } - }; -} +template <> +struct convert { + static Node encode(const YamlCalibData& rhs); + static bool decode(const Node& node, YamlCalibData& rhs); +}; +} // namespace YAML diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.h b/companion/src/firmwares/edgetx/yaml_generalsettings.h index b7c95b263..270ed3edb 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.h +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.h @@ -45,9 +45,8 @@ namespace YAML { node["version"] = rhs.version; // Radio calib - // YamlCalibData calib; - // node["calib"] = calib; - // calib.copy(rhs.calibMid, rhs.calibSpanNeg, rhs.calibSpanPos); + YamlCalibData calib(rhs.calibMid, rhs.calibSpanNeg, rhs.calibSpanPos); + node["calib"] = calib; node["currModel"] = rhs.currModelIndex; node["currModelFilename"] = rhs.currModelFilename; @@ -61,11 +60,11 @@ namespace YAML { node["backlightMode"] = backlightModeLut << rhs.backlightMode; node["trainer"] = rhs.trainer; node["view"] = rhs.view; - node["fai"] = rhs.fai; - node["disableMemoryWarning"] = rhs.disableMemoryWarning; + node["fai"] = (int)rhs.fai; + node["disableMemoryWarning"] = (int)rhs.disableMemoryWarning; node["beepMode"] = rhs.beeperMode; - node["disableAlarmWarning"] = rhs.disableAlarmWarning; - node["disableRssiPoweroffAlarm"] = rhs.disableRssiPoweroffAlarm; + node["disableAlarmWarning"] = (int)rhs.disableAlarmWarning; + node["disableRssiPoweroffAlarm"] = (int)rhs.disableRssiPoweroffAlarm; node["USBMode"] = rhs.usbMode; node["jackMode"] = rhs.jackMode; node["hapticMode"] = rhs.hapticMode; @@ -89,9 +88,9 @@ namespace YAML { node["bluetoothBaudrate"] = rhs.bluetoothBaudrate; node["bluetoothMode"] = bluetoothModeLut << rhs.bluetoothMode; node["countryCode"] = rhs.countryCode; - node["jitterFilter"] = rhs.jitterFilter; - node["disableRtcWarning"] = rhs.rtcCheckDisable; // TODO: verify - node["keysBacklight"] = rhs.keysBacklight; + node["jitterFilter"] = (int)rhs.jitterFilter; + node["disableRtcWarning"] = (int)rhs.rtcCheckDisable; // TODO: verify + node["keysBacklight"] = (int)rhs.keysBacklight; node["imperial"] = rhs.imperial; node["ttsLanguage"] = rhs.ttsLanguage; node["beepVolume"] = rhs.beepVolume + 2; diff --git a/companion/src/firmwares/edgetx/yaml_trainerdata.cpp b/companion/src/firmwares/edgetx/yaml_trainerdata.cpp index 702628526..b1952827d 100644 --- a/companion/src/firmwares/edgetx/yaml_trainerdata.cpp +++ b/companion/src/firmwares/edgetx/yaml_trainerdata.cpp @@ -33,14 +33,16 @@ namespace YAML Node convert::encode(const TrainerMix& rhs) { Node node; - // TODO: convert struct into Node + node["srcChn"] = rhs.src; + node["mode"] = trainerMixMode << rhs.mode; + node["studWeight"] = rhs.weight; return node; } bool convert::decode(const Node& node, TrainerMix& rhs) { node["srcChn"] >> rhs.src; - // node["mode"] >> rhs.mode; // TODO: string mapping + node["mode"] >> trainerMixMode >> rhs.mode; node["studWeight"] >> rhs.weight; return true; } @@ -48,7 +50,12 @@ bool convert::decode(const Node& node, TrainerMix& rhs) Node convert::encode(const TrainerData& rhs) { Node node; - // TODO: convert struct into Node + for (int i = 0; i < 4; i++) { + node["calib"][std::to_string(i)]["val"] = rhs.calib[i]; + } + for (int i = 0; i < 4; i++) { + node["mix"][std::to_string(i)] = rhs.mix[i]; + } return node; } @@ -57,14 +64,14 @@ bool convert::decode(const Node& node, TrainerData& rhs) if (node["calib"]) { const Node& calib = node["calib"]; for (int i = 0; i < 4; i++) { - calib[i] >> rhs.calib[i]; + calib[std::to_string(i)]["val"] >> rhs.calib[i]; } } if (node["mix"]) { const Node& mix = node["mix"]; for (int i = 0; i < 4; i++) { - mix[i] >> rhs.mix[i]; + mix[std::to_string(i)] >> rhs.mix[i]; } } return true;