From 2df7002b439588cfd79ac5e4d4c6c3b2a38369ce Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 23 Apr 2019 17:49:12 +0200 Subject: [PATCH] Rewrite module matrix to add ACCESS --- radio/src/gui/gui_common.cpp | 64 +++++++++++++++++++++++++----------- radio/src/gui/gui_common.h | 2 +- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 452210acc..184a51a7f 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -551,69 +551,93 @@ bool isPXX2ChannelsCountAllowed(int channels) return (channels % 8 == 0); } -#if defined(HARDWARE_INTERNAL_MODULE) -bool isInternalModuleAvailable(int module) +bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType) { - if (module == MODULE_TYPE_NONE) + switch(moduleType) { + case MODULE_TYPE_NONE: + case MODULE_TYPE_SBUS: + case MODULE_TYPE_PPM: + case MODULE_TYPE_DSM2: + case MODULE_TYPE_R9M_LITE2: + case MODULE_TYPE_R9M_LITE_PRO2: + return false; + + case MODULE_TYPE_XJT2: + if (moduleBay == EXTERNAL_MODULE) + return true; + +#if defined(INTMODULE_USART) + return false; +#endif + + default: + return true; + } +} + +#if defined(HARDWARE_INTERNAL_MODULE) +bool isInternalModuleAvailable(int moduleType) +{ + if (moduleType == MODULE_TYPE_NONE) return true; #if defined(PXX1) - if (module == MODULE_TYPE_XJT) - return IS_PXX1_INTERNAL_ENABLED() && !isModulePXX(EXTERNAL_MODULE); + if (moduleType == MODULE_TYPE_XJT) + return (!isModuleUSingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type)); #endif #if defined(PXX2) - if (module == MODULE_TYPE_XJT2) - return IS_PXX2_INTERNAL_ENABLED(); + if (moduleType == MODULE_TYPE_XJT2) +#if defined(INTMODULE_USART) + return true; +#else + return (!isModuleUSingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type)); +#endif #endif return false; } #endif -bool isExternalModuleAvailable(int module) +bool isExternalModuleAvailable(int moduleType) { #if !defined(PCBXLITE) - if (module == MODULE_TYPE_R9M_LITE || module == MODULE_TYPE_R9M_LITE2 || module == MODULE_TYPE_R9M_LITE_PRO2) { + if (moduleType == MODULE_TYPE_R9M_LITE || moduleType == MODULE_TYPE_R9M_LITE2 || moduleType == MODULE_TYPE_R9M_LITE_PRO2) { return false; } #endif #if !defined(PXX1) - if (module == MODULE_TYPE_XJT || module == MODULE_TYPE_R9M || module == MODULE_TYPE_R9M_LITE) { + if (moduleType == MODULE_TYPE_XJT || moduleType == MODULE_TYPE_R9M || moduleType == MODULE_TYPE_R9M_LITE) { return false; } #endif #if !defined(PXX2) - if (module == MODULE_TYPE_XJT2 || module == MODULE_TYPE_R9M2 || module == MODULE_TYPE_R9M_LITE2 || module == MODULE_TYPE_R9M_LITE_PRO2) { + if (moduleType == MODULE_TYPE_XJT2 || moduleType == MODULE_TYPE_R9M2 || moduleType == MODULE_TYPE_R9M_LITE2 || moduleType == MODULE_TYPE_R9M_LITE_PRO2) { return false; } #endif #if defined(CROSSFIRE) - if (module == MODULE_TYPE_CROSSFIRE && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) { + if (moduleType == MODULE_TYPE_CROSSFIRE && g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE) { return false; } #else - if (module == MODULE_TYPE_CROSSFIRE) { + if (moduleType == MODULE_TYPE_CROSSFIRE) { return false; } #endif #if !defined(DSM2) - if (module == MODULE_TYPE_DSM2) { + if (moduleType == MODULE_TYPE_DSM2) { return false; } #endif #if !defined(MULTIMODULE) - if (module == MODULE_TYPE_MULTIMODULE) { + if (moduleType == MODULE_TYPE_MULTIMODULE) { return false; } #endif #if defined(HARDWARE_INTERNAL_MODULE) - if (module == MODULE_TYPE_R9M && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT) { + if (isModuleUSingSport(EXTERNAL_MODULE, moduleType) && isModuleUSingSport(INTERNAL_MODULE, g_model.moduleData[INTERNAL_MODULE].type)) return false; - } - if (module == MODULE_TYPE_XJT && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT) { - return false; - } #endif return true; diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index c44969128..8dcc01848 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -57,7 +57,7 @@ bool isR9MModeAvailable(int mode); bool isR9ModuleRunning(int module); bool isR9MMFlex(int module); bool isPXX2ChannelsCountAllowed(int channels); -bool isExternalModuleAvailable(int module); +bool isExternalModuleAvailable(int moduleType); bool isInternalModuleAvailable(int module); bool isRfProtocolAvailable(int protocol); bool isTelemetryProtocolAvailable(int protocol);