From f5dd81627d6f20b5209302b3c87be7e7f4204495 Mon Sep 17 00:00:00 2001 From: elecpower Date: Thu, 2 Dec 2021 00:42:30 +1100 Subject: [PATCH] Refactor getAnalogInputName --- companion/src/firmwares/boards.cpp | 163 +++++++++++++++-------------- companion/src/firmwares/boards.h | 8 ++ 2 files changed, 92 insertions(+), 79 deletions(-) diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 344b3119e..bcb8572c1 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -510,102 +510,107 @@ QString Boards::getAxisName(int index) return CPN_STR_UNKNOWN_ITEM; } -QString Boards::getAnalogInputName(Board::Type board, int index) +#define ANALOGINDEXNAMEENTRY(name) tbl.push_back( { cnt++, name } ); + +AnalogIndexNamesLookupTable Boards::getAnalogNamesLookupTable(Board::Type board) { - if (index < 0) - return CPN_STR_UNKNOWN_ITEM; + AnalogIndexNamesLookupTable tbl; + int cnt = 0; - if (index < getBoardCapability(board, Board::Sticks)) { - const QString sticks[] = { - tr("Rud"), - tr("Ele"), - tr("Thr"), - tr("Ail") - }; - return sticks[index]; + if (getBoardCapability(board, Board::Sticks)) { + ANALOGINDEXNAMEENTRY("Rud") + ANALOGINDEXNAMEENTRY("Ele") + ANALOGINDEXNAMEENTRY("Thr") + ANALOGINDEXNAMEENTRY("Ail") } - index -= getCapability(board, Board::Sticks); - if (IS_SKY9X(board)) { - const QString pots[] = { - "P1", - "P2", - "P3" - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("P1") + ANALOGINDEXNAMEENTRY("P2") + ANALOGINDEXNAMEENTRY("P3") } else if (IS_TARANIS_X9E(board)) { - const QString pots[] = { - "F1", - "F2", - "F3", - "F4", - "S1", - "S2", - "LS", - "RS" - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("F1") + ANALOGINDEXNAMEENTRY("F2") + ANALOGINDEXNAMEENTRY("F3") + ANALOGINDEXNAMEENTRY("F4") + ANALOGINDEXNAMEENTRY("S1") + ANALOGINDEXNAMEENTRY("S2") + ANALOGINDEXNAMEENTRY("LS") + ANALOGINDEXNAMEENTRY("RS") } else if (IS_TARANIS_XLITE(board)) { - const QString pots[] = { - "S1", - "S2", - "GyrX", - "GyrY" - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("S1") + ANALOGINDEXNAMEENTRY("S2") + ANALOGINDEXNAMEENTRY("GyrX") + ANALOGINDEXNAMEENTRY("GyrY") } else if (IS_TARANIS(board)) { - const QString pots[] = { - "S1", - "S2", - "S3", - "LS", - "RS" - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("S1") + ANALOGINDEXNAMEENTRY("S2") + ANALOGINDEXNAMEENTRY("S3") + ANALOGINDEXNAMEENTRY("LS") + ANALOGINDEXNAMEENTRY("RS") } else if (IS_HORUS_X12S(board)) { - const QString pots[] = { - "S1", - "6P", - "S2", - "L1", - "L2", - "LS", - "RS", - "JSx", - "JSy" - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("S1") + ANALOGINDEXNAMEENTRY("6P") + ANALOGINDEXNAMEENTRY("S2") + ANALOGINDEXNAMEENTRY("L1") + ANALOGINDEXNAMEENTRY("L2") + ANALOGINDEXNAMEENTRY("LS") + ANALOGINDEXNAMEENTRY("RS") + ANALOGINDEXNAMEENTRY("JSx") + ANALOGINDEXNAMEENTRY("JSy") } else if (IS_FLYSKY_NV14(board)) { - const QString pots[] = { - "VRA", - "VRB", - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("VRA") + ANALOGINDEXNAMEENTRY("VRB") } else if (IS_HORUS_X10(board) || IS_FAMILY_T16(board)) { - const QString pots[] = { - "S1", - "6P", - "S2", - "EX1", - "EX2", - "LS", - "RS" - }; - if (index < DIM(pots)) - return pots[index]; + ANALOGINDEXNAMEENTRY("S1") + ANALOGINDEXNAMEENTRY("6P") + ANALOGINDEXNAMEENTRY("S2") + ANALOGINDEXNAMEENTRY("EX1") + ANALOGINDEXNAMEENTRY("EX2" ) + //ANALOGINDEXNAMEENTRY("EX3") // not yet implemented + //ANALOGINDEXNAMEENTRY("EX4") // not yet implemented + ANALOGINDEXNAMEENTRY("LS") + ANALOGINDEXNAMEENTRY("RS") + } + + return tbl; +} + +int Boards::getAnalogInputIndex(Board::Type board, char * name) +{ + AnalogIndexNamesLookupTable lut = getAnalogNamesLookupTable(board); + + const auto& it = + find_if(lut.begin(), lut.end(), [=](const AnalogIndexNamesLookupElmt& elmt) { + if (elmt.second == name) return true; + return false; + }); + + if (it != lut.end()) { + return it->first; + } + + return 0; +} + +QString Boards::getAnalogInputName(Board::Type board, int index) +{ + AnalogIndexNamesLookupTable lut = getAnalogNamesLookupTable(board); + + const auto& it = + find_if(lut.begin(), lut.end(), [=](const AnalogIndexNamesLookupElmt& elmt) { + if (elmt.first == index) return true; + return false; + }); + + if (it != lut.end()) { + return QString::fromUtf8(it->second.data(), it->second.size()); } return CPN_STR_UNKNOWN_ITEM; diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 050cf87e3..4aa2a0b02 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -24,6 +24,9 @@ #include #include +#include +#include + class AbstractStaticItemModel; // identiying names of static abstract item models @@ -174,6 +177,9 @@ namespace Board { } +typedef std::pair AnalogIndexNamesLookupElmt; +typedef std::vector AnalogIndexNamesLookupTable; + class Boards { Q_DECLARE_TR_FUNCTIONS(Boards) @@ -202,6 +208,8 @@ 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 int getAnalogInputIndex(Board::Type board, char * name); static QString getAnalogInputName(Board::Type board, int index); static bool isBoardCompatible(Board::Type board1, Board::Type board2); static QString getBoardName(Board::Type board);