diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index bcb8572c1..4381c7cf5 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -510,73 +510,73 @@ QString Boards::getAxisName(int index) return CPN_STR_UNKNOWN_ITEM; } -#define ANALOGINDEXNAMEENTRY(name) tbl.push_back( { cnt++, name } ); +#define ADDINDEXNAMEPAIR(name) tbl.push_back( { cnt++, name } ); -AnalogIndexNamesLookupTable Boards::getAnalogNamesLookupTable(Board::Type board) +Int2StringMappingTable Boards::getAnalogNamesLookupTable(Board::Type board) { - AnalogIndexNamesLookupTable tbl; + Int2StringMappingTable tbl; int cnt = 0; if (getBoardCapability(board, Board::Sticks)) { - ANALOGINDEXNAMEENTRY("Rud") - ANALOGINDEXNAMEENTRY("Ele") - ANALOGINDEXNAMEENTRY("Thr") - ANALOGINDEXNAMEENTRY("Ail") + ADDINDEXNAMEPAIR("Rud") + ADDINDEXNAMEPAIR("Ele") + ADDINDEXNAMEPAIR("Thr") + ADDINDEXNAMEPAIR("Ail") } if (IS_SKY9X(board)) { - ANALOGINDEXNAMEENTRY("P1") - ANALOGINDEXNAMEENTRY("P2") - ANALOGINDEXNAMEENTRY("P3") + ADDINDEXNAMEPAIR("P1") + ADDINDEXNAMEPAIR("P2") + ADDINDEXNAMEPAIR("P3") } else if (IS_TARANIS_X9E(board)) { - ANALOGINDEXNAMEENTRY("F1") - ANALOGINDEXNAMEENTRY("F2") - ANALOGINDEXNAMEENTRY("F3") - ANALOGINDEXNAMEENTRY("F4") - ANALOGINDEXNAMEENTRY("S1") - ANALOGINDEXNAMEENTRY("S2") - ANALOGINDEXNAMEENTRY("LS") - ANALOGINDEXNAMEENTRY("RS") + ADDINDEXNAMEPAIR("F1") + ADDINDEXNAMEPAIR("F2") + ADDINDEXNAMEPAIR("F3") + ADDINDEXNAMEPAIR("F4") + ADDINDEXNAMEPAIR("S1") + ADDINDEXNAMEPAIR("S2") + ADDINDEXNAMEPAIR("LS") + ADDINDEXNAMEPAIR("RS") } else if (IS_TARANIS_XLITE(board)) { - ANALOGINDEXNAMEENTRY("S1") - ANALOGINDEXNAMEENTRY("S2") - ANALOGINDEXNAMEENTRY("GyrX") - ANALOGINDEXNAMEENTRY("GyrY") + ADDINDEXNAMEPAIR("S1") + ADDINDEXNAMEPAIR("S2") + ADDINDEXNAMEPAIR("GyrX") + ADDINDEXNAMEPAIR("GyrY") } else if (IS_TARANIS(board)) { - ANALOGINDEXNAMEENTRY("S1") - ANALOGINDEXNAMEENTRY("S2") - ANALOGINDEXNAMEENTRY("S3") - ANALOGINDEXNAMEENTRY("LS") - ANALOGINDEXNAMEENTRY("RS") + ADDINDEXNAMEPAIR("S1") + ADDINDEXNAMEPAIR("S2") + ADDINDEXNAMEPAIR("S3") + ADDINDEXNAMEPAIR("LS") + ADDINDEXNAMEPAIR("RS") } else if (IS_HORUS_X12S(board)) { - ANALOGINDEXNAMEENTRY("S1") - ANALOGINDEXNAMEENTRY("6P") - ANALOGINDEXNAMEENTRY("S2") - ANALOGINDEXNAMEENTRY("L1") - ANALOGINDEXNAMEENTRY("L2") - ANALOGINDEXNAMEENTRY("LS") - ANALOGINDEXNAMEENTRY("RS") - ANALOGINDEXNAMEENTRY("JSx") - ANALOGINDEXNAMEENTRY("JSy") + ADDINDEXNAMEPAIR("S1") + ADDINDEXNAMEPAIR("6P") + ADDINDEXNAMEPAIR("S2") + ADDINDEXNAMEPAIR("L1") + ADDINDEXNAMEPAIR("L2") + ADDINDEXNAMEPAIR("LS") + ADDINDEXNAMEPAIR("RS") + ADDINDEXNAMEPAIR("JSx") + ADDINDEXNAMEPAIR("JSy") } else if (IS_FLYSKY_NV14(board)) { - ANALOGINDEXNAMEENTRY("VRA") - ANALOGINDEXNAMEENTRY("VRB") + ADDINDEXNAMEPAIR("VRA") + ADDINDEXNAMEPAIR("VRB") } else if (IS_HORUS_X10(board) || IS_FAMILY_T16(board)) { - ANALOGINDEXNAMEENTRY("S1") - ANALOGINDEXNAMEENTRY("6P") - ANALOGINDEXNAMEENTRY("S2") - ANALOGINDEXNAMEENTRY("EX1") - ANALOGINDEXNAMEENTRY("EX2" ) - //ANALOGINDEXNAMEENTRY("EX3") // not yet implemented - //ANALOGINDEXNAMEENTRY("EX4") // not yet implemented - ANALOGINDEXNAMEENTRY("LS") - ANALOGINDEXNAMEENTRY("RS") + ADDINDEXNAMEPAIR("S1") + ADDINDEXNAMEPAIR("6P") + ADDINDEXNAMEPAIR("S2") + ADDINDEXNAMEPAIR("EX1") + ADDINDEXNAMEPAIR("EX2" ) + //ADDINDEXNAMEPAIR("EX3") // not yet implemented + //ADDINDEXNAMEPAIR("EX4") // not yet implemented + ADDINDEXNAMEPAIR("LS") + ADDINDEXNAMEPAIR("RS") } return tbl; @@ -584,15 +584,15 @@ AnalogIndexNamesLookupTable Boards::getAnalogNamesLookupTable(Board::Type board) int Boards::getAnalogInputIndex(Board::Type board, char * name) { - AnalogIndexNamesLookupTable lut = getAnalogNamesLookupTable(board); + Int2StringMappingTable tbl = getAnalogNamesLookupTable(board); const auto& it = - find_if(lut.begin(), lut.end(), [=](const AnalogIndexNamesLookupElmt& elmt) { - if (elmt.second == name) return true; + find_if(tbl.begin(), tbl.end(), [=](const Int2StringMapping& row) { + if (row.second == name) return true; return false; }); - if (it != lut.end()) { + if (it != tbl.end()) { return it->first; } @@ -601,15 +601,15 @@ int Boards::getAnalogInputIndex(Board::Type board, char * name) QString Boards::getAnalogInputName(Board::Type board, int index) { - AnalogIndexNamesLookupTable lut = getAnalogNamesLookupTable(board); + Int2StringMappingTable tbl = getAnalogNamesLookupTable(board); const auto& it = - find_if(lut.begin(), lut.end(), [=](const AnalogIndexNamesLookupElmt& elmt) { - if (elmt.first == index) return true; + find_if(tbl.begin(), tbl.end(), [=](const Int2StringMapping& row) { + if (row.first == index) return true; return false; }); - if (it != lut.end()) { + if (it != tbl.end()) { return QString::fromUtf8(it->second.data(), it->second.size()); } diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 4aa2a0b02..28635be1c 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -19,14 +19,12 @@ */ #pragma once +#include "datahelpers.h" #include #include #include -#include -#include - class AbstractStaticItemModel; // identiying names of static abstract item models @@ -177,9 +175,6 @@ namespace Board { } -typedef std::pair AnalogIndexNamesLookupElmt; -typedef std::vector AnalogIndexNamesLookupTable; - class Boards { Q_DECLARE_TR_FUNCTIONS(Boards) @@ -208,7 +203,7 @@ class Boards static Board::SwitchInfo getSwitchInfo(Board::Type board, int index); static int getCapability(Board::Type board, Board::Capability capability); static QString getAxisName(int index); - static AnalogIndexNamesLookupTable getAnalogNamesLookupTable(Board::Type board); + static Int2StringMappingTable getAnalogNamesLookupTable(Board::Type board); static int getAnalogInputIndex(Board::Type board, char * name); static QString getAnalogInputName(Board::Type board, int index); static bool isBoardCompatible(Board::Type board1, Board::Type board2); diff --git a/companion/src/firmwares/datahelpers.h b/companion/src/firmwares/datahelpers.h index ccd3b0f64..1797be76e 100644 --- a/companion/src/firmwares/datahelpers.h +++ b/companion/src/firmwares/datahelpers.h @@ -21,6 +21,11 @@ #pragma once #include +#include +#include + +typedef std::pair Int2StringMapping; +typedef std::vector Int2StringMappingTable; class FieldRange { diff --git a/companion/src/firmwares/edgetx/yaml_calibdata.cpp b/companion/src/firmwares/edgetx/yaml_calibdata.cpp index a3e647458..d96faebcf 100644 --- a/companion/src/firmwares/edgetx/yaml_calibdata.cpp +++ b/companion/src/firmwares/edgetx/yaml_calibdata.cpp @@ -66,10 +66,9 @@ bool convert::decode(const Node& node, CalibData& rhs) Node convert::encode(const YamlCalibData& rhs) { Node node; - // TODO: for efficiency construct once at an outer level possibly add to Firmware? - const YamlLookupTable calibIdxLut = Boards::getAnalogNamesLookupTable(getCurrentBoard()); + const YamlLookupTable* calibIdxLut = getCurrentFirmware()->getAnalogIndexNamesLookupTable(); // TODO: we need something better here! - for (const auto& kv : calibIdxLut) { + for (const auto& kv : *calibIdxLut) { node[kv.second] = rhs.calib[kv.first]; } return node; @@ -78,11 +77,13 @@ Node convert::encode(const YamlCalibData& rhs) bool convert::decode(const Node& node, YamlCalibData& rhs) { if (!node.IsMap()) return false; - // TODO: for efficiency construct once at an outer level possibly add to Firmware? - const YamlLookupTable calibIdxLut = Boards::getAnalogNamesLookupTable(getCurrentBoard()); + const YamlLookupTable* calibIdxLut = getCurrentFirmware()->getAnalogIndexNamesLookupTable(); + //for_each(calibIdxLut->begin(), calibIdxLut->end(), [=](const Int2StringMapping& row) { + // qDebug() << "index:" << row.first << "value:" << row.second.c_str(); + // }); int idx = 0; for (const auto& kv : node) { - kv.first >> calibIdxLut >> idx; + kv.first >> *calibIdxLut >> idx; kv.second >> rhs.calib[idx]; } return true; diff --git a/companion/src/firmwares/eeprominterface.h b/companion/src/firmwares/eeprominterface.h index df7c6d9f4..dd4c49912 100644 --- a/companion/src/firmwares/eeprominterface.h +++ b/companion/src/firmwares/eeprominterface.h @@ -26,6 +26,7 @@ #include "radiodata.h" #include "../../radio/src/definitions.h" #include "simulatorinterface.h" +#include "datahelpers.h" #include #include @@ -287,8 +288,15 @@ class Firmware board(board), variantBase(0), base(base), - eepromInterface(nullptr) - { } + eepromInterface(nullptr), + analogInputNamesLookupTable(Boards::getAnalogNamesLookupTable(board)) + { +/* qDebug() << "board:" << Boards::getBoardName(board); + * for_each(analogInputNamesLookupTable.begin(), analogInputNamesLookupTable.end(), [=](const Int2StringMapping& row) { + * qDebug() << "index:" << row.first << "value:" << row.second.c_str(); + * }); + */ + } virtual ~Firmware() { } @@ -395,6 +403,11 @@ class Firmware currentVariant = value; } + const Int2StringMappingTable * getAnalogIndexNamesLookupTable() + { + return &analogInputNamesLookupTable; + } + protected: QString id; QString name; @@ -402,6 +415,7 @@ class Firmware unsigned int variantBase; Firmware * base; EEPROMInterface * eepromInterface; + const Int2StringMappingTable analogInputNamesLookupTable; QList languages; //QList ttslanguages; OptionsList opts; @@ -409,6 +423,7 @@ class Firmware static QVector registeredFirmwares; static Firmware * defaultVariant; static Firmware * currentVariant; + }; inline Firmware * getCurrentFirmware()