fix(companion): Read/write ACCESS receiver names, ignore invalid values (#2019)

* Companion fix yaml handling of access receiver names

* Fix num receivers loops and ignore malformed receiver names values
This commit is contained in:
Neil Horne
2022-07-15 19:22:05 +10:00
committed by GitHub
parent eab35a2499
commit 1265d6c66d
@@ -275,8 +275,10 @@ Node convert<ModuleData>::encode(const ModuleData& rhs)
Node pxx2;
pxx2["receivers"] = rhs.access.receivers;
pxx2["racingMode"] = rhs.access.racingMode;
for (int i=0; i<(int)rhs.access.receivers; i++) {
pxx2["receiverName"][std::to_string(i)] = rhs.access.receiverName[i];
for (int i=0; i < PXX2_MAX_RECEIVERS_PER_MODULE; i++) {
if (rhs.access.receivers & (1 << i)) {
pxx2["receiverName"][std::to_string(i)]["val"] = rhs.access.receiverName[i];
}
}
mod["pxx2"] = pxx2;
} break;
@@ -411,8 +413,15 @@ bool convert<ModuleData>::decode(const Node& node, ModuleData& rhs)
Node pxx2 = mod["pxx2"];
pxx2["receivers"] >> rhs.access.receivers;
pxx2["racingMode"] >> rhs.access.racingMode;
for (const auto& rx : pxx2["receiverName"]) {
rx >> rhs.access.receiverName;
for (int i=0; i < PXX2_MAX_RECEIVERS_PER_MODULE; i++) {
if (pxx2["receiverName"][std::to_string(i)]) {
Node rcvrname = pxx2["receiverName"][std::to_string(i)];
if (rcvrname.IsMap()) {
if (rcvrname["val"]) {
rcvrname["val"] >> rhs.access.receiverName[i];
}
}
}
}
} else if (mod["ghost"]) {
Node ghost = mod["ghost"];