diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 55790b85a..cf508533b 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -21,6 +21,7 @@ #include "boards.h" #include "macros.h" #include "compounditemmodels.h" +#include "moduledata.h" // TODO remove all those constants // Update: These are now all only used within this class. @@ -808,3 +809,64 @@ StringTagMappingTable Boards::getTrimSourcesLookupTable(Board::Type board) return tbl; } + +QList Boards::getSupportedInternalModules(Board::Type board) +{ + QList modules; + if (IS_TARANIS_X9DP_2019(board) || IS_TARANIS_X7_ACCESS(board)) { + modules = {MODULE_TYPE_ISRM_PXX2}; + } else if (IS_FLYSKY_NV14(board)) { + modules = {MODULE_TYPE_FLYSKY}; + } else if (IS_FAMILY_HORUS_OR_T16(board) || IS_FAMILY_T12(board) + || (IS_TARANIS_SMALL(board) && IS_ACCESS_RADIO(board))) { + modules.append({ + MODULE_TYPE_XJT_PXX1, + MODULE_TYPE_ISRM_PXX2, + MODULE_TYPE_CROSSFIRE, + MODULE_TYPE_MULTIMODULE, + }); + } else if (IS_TARANIS(board)) { + modules = {MODULE_TYPE_XJT_PXX1}; + } + + return modules; +} + +ModuleType Boards::getDefaultInternalModules(Board::Type board) +{ + switch(board) { + case BOARD_TARANIS_X7: + case BOARD_TARANIS_X9D: + case BOARD_TARANIS_X9DP: + case BOARD_TARANIS_X9E: + case BOARD_HORUS_X12S: + case BOARD_X10: + case BOARD_TARANIS_XLITE: + return MODULE_TYPE_XJT_PXX1; + + case BOARD_TARANIS_X7_ACCESS: + case BOARD_TARANIS_X9DP_2019: + case BOARD_X10_EXPRESS: + case BOARD_TARANIS_XLITES: + case BOARD_TARANIS_X9LITE: + case BOARD_TARANIS_X9LITES: + return MODULE_TYPE_ISRM_PXX2; + + case BOARD_JUMPER_T12: + case BOARD_JUMPER_T16: + case BOARD_RADIOMASTER_TX16S: + case BOARD_JUMPER_T18: + case BOARD_RADIOMASTER_TX12: + case BOARD_RADIOMASTER_T8: + case BOARD_JUMPER_TLITE: + case BOARD_RADIOMASTER_ZORRO: + case BOARD_JUMPER_TPRO: + return MODULE_TYPE_MULTIMODULE; + + case BOARD_FLYSKY_NV14: + return MODULE_TYPE_FLYSKY; + + default: + return MODULE_TYPE_NONE; + } +} diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 844ea7502..07b8b572a 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -20,6 +20,7 @@ #pragma once #include "datahelpers.h" +#include "moduledata.h" #include #include @@ -219,7 +220,9 @@ class Boards static AbstractStaticItemModel * intModuleTypeItemModel(); static StringTagMappingTable getTrimSwitchesLookupTable(Board::Type board); static StringTagMappingTable getTrimSourcesLookupTable(Board::Type board); - + static QList getSupportedInternalModules(Board::Type board); + static ModuleType getDefaultInternalModules(Board::Type board); + protected: Board::Type m_boardType; @@ -291,7 +294,12 @@ inline bool IS_FAMILY_T16(Board::Type board) inline bool IS_FAMILY_T12(Board::Type board) { - return board == Board::BOARD_JUMPER_T12 || board == Board::BOARD_RADIOMASTER_TX12 || board == Board::BOARD_RADIOMASTER_ZORRO || board == Board::BOARD_RADIOMASTER_T8 || board == Board::BOARD_JUMPER_TLITE; + return board == Board::BOARD_JUMPER_T12 || + board == Board::BOARD_RADIOMASTER_TX12 || + board == Board::BOARD_RADIOMASTER_ZORRO || + board == Board::BOARD_RADIOMASTER_T8 || + board == Board::BOARD_JUMPER_TLITE || + board == Board::BOARD_JUMPER_TPRO; } inline bool IS_FLYSKY_NV14(Board::Type board) @@ -409,10 +417,17 @@ inline bool IS_TARANIS_X9DP_2019(Board::Type board) return (board == Board::BOARD_TARANIS_X9DP_2019); } +inline bool IS_ACCESS_RADIO(Board::Type board) +{ + return IS_TARANIS_XLITES(board) || IS_TARANIS_X9LITE(board) || + board == Board::BOARD_TARANIS_X9DP_2019 || + board == Board::BOARD_X10_EXPRESS || IS_TARANIS_X7_ACCESS(board); +} + inline bool IS_ACCESS_RADIO(Board::Type board, const QString & id) { - return (IS_TARANIS_XLITES(board) || IS_TARANIS_X9LITE(board) || board == Board::BOARD_TARANIS_X9DP_2019 || board == Board::BOARD_X10_EXPRESS || IS_TARANIS_X7_ACCESS(board) || - (IS_FAMILY_HORUS_OR_T16(board) && id.contains("internalaccess"))); + return IS_ACCESS_RADIO(board) || + (IS_FAMILY_HORUS_OR_T16(board) && id.contains("internalaccess")); } inline bool HAS_EEPROM_YAML(Board::Type board) diff --git a/companion/src/firmwares/moduledata.cpp b/companion/src/firmwares/moduledata.cpp index 5b2a84192..940e2eb73 100644 --- a/companion/src/firmwares/moduledata.cpp +++ b/companion/src/firmwares/moduledata.cpp @@ -407,8 +407,9 @@ AbstractStaticItemModel * ModuleData::internalModuleItemModel() AbstractStaticItemModel * mdl = new AbstractStaticItemModel(); mdl->setName("moduledata.internalmodule"); - for (int i = 0; i < MODULE_TYPE_COUNT; i++) { - mdl->appendToItemList(typeToString(i), i, isInternalModuleAvailable(i)); + auto modules = Boards::getSupportedInternalModules(getCurrentBoard()); + for(auto mod : modules) { + mdl->appendToItemList(typeToString(mod), mod); } mdl->loadItemList();