diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 9df9addf5..982bfe5ed 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -591,45 +591,63 @@ bool isInternalModuleAvailable(int moduleType) bool isExternalModuleAvailable(int moduleType) { -#if !defined(PCBXLITE) - if (moduleType == MODULE_TYPE_PXX_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE_PRO) { +#if !defined(PCBXLITE) && !defined(PCBX9LITE) + if (moduleType == MODULE_TYPE_PXX_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE_PRO) return false; - } #endif + #if !defined(PXX1) - if (moduleType == MODULE_TYPE_PXX_XJT || moduleType == MODULE_TYPE_PXX_R9M || moduleType == MODULE_TYPE_PXX_R9M_LITE) { + if (moduleType == MODULE_TYPE_PXX_XJT || moduleType == MODULE_TYPE_PXX_R9M || moduleType == MODULE_TYPE_PXX_R9M_LITE) return false; - } #endif + +#if defined(FRSKY_RELEASE) + if (moduleType == MODULE_TYPE_PXX_R9M) + return false; +#endif + + if (moduleType == MODULE_TYPE_ACCESS_ISRM || moduleType == MODULE_TYPE_ACCESS_R9M) + return false; + #if !defined(PXX2) - if (moduleType == MODULE_TYPE_ACCESS_ISRM || moduleType == MODULE_TYPE_ACCESS_R9M || moduleType == MODULE_TYPE_ACCESS_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE_PRO) { + if (moduleType == MODULE_TYPE_ACCESS_R9M || moduleType == MODULE_TYPE_ACCESS_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE_PRO) { return false; } #endif + #if defined(CROSSFIRE) - if (moduleType == 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 (moduleType == MODULE_TYPE_CROSSFIRE) { + if (moduleType == MODULE_TYPE_CROSSFIRE) return false; - } #endif + #if !defined(DSM2) - if (moduleType == MODULE_TYPE_DSM2) { + if (moduleType == MODULE_TYPE_DSM2) return false; - } #endif -#if !defined(MULTIMODULE) - if (moduleType == MODULE_TYPE_MULTIMODULE) { + +#if !defined(SBUS) + if (moduleType == MODULE_TYPE_SBUS) return false; - } #endif + +#if !defined(MULTIMODULE) + if (moduleType == MODULE_TYPE_MULTIMODULE) + return false; +#endif + #if defined(HARDWARE_INTERNAL_MODULE) if (isModuleUSingSport(EXTERNAL_MODULE, moduleType) && isModuleUSingSport(INTERNAL_MODULE, g_model.moduleData[INTERNAL_MODULE].type)) return false; #endif +#if !defined(EXTERNAL_MODULE_PPM) + if (moduleType == MODULE_TYPE_PPM) + return false; +#endif + return true; } diff --git a/radio/src/pulses/modules.h b/radio/src/pulses/modules.h index 3e9ea0860..cdb0597b4 100644 --- a/radio/src/pulses/modules.h +++ b/radio/src/pulses/modules.h @@ -153,13 +153,20 @@ inline bool isModuleDSM2(uint8_t idx) { return idx == EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_DSM2; } +#else +inline bool isModuleDSM2(uint8_t idx) +{ + return false; +} +#endif +#if defined(SBUS) inline bool isModuleSBUS(uint8_t idx) { return idx == EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_SBUS; } #else -inline bool isModuleDSM2(uint8_t idx) +inline bool isModuleSBUS(uint8_t idx) { return false; } diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index f6d7864c1..1a5d3e322 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -173,13 +173,18 @@ void disablePulses(uint8_t module, uint8_t protocol) #if defined(MULTIMODULE) case PROTOCOL_CHANNELS_MULTIMODULE: #endif + +#if defined(SBUS) case PROTOCOL_CHANNELS_SBUS: disable_serial(module); break; +#endif +#if defined(PPM) case PROTOCOL_CHANNELS_PPM: disable_ppm(module); break; +#endif } } @@ -303,10 +308,12 @@ void setupPulsesExternalModule(uint8_t protocol) break; #endif +#if defined(SBUS) case PROTOCOL_CHANNELS_SBUS: setupPulsesSbus(); scheduleNextMixerCalculation(EXTERNAL_MODULE, SBUS_PERIOD); break; +#endif #if defined(DSM2) case PROTOCOL_CHANNELS_DSM2_LP45: @@ -331,10 +338,12 @@ void setupPulsesExternalModule(uint8_t protocol) break; #endif +#if defined(PPM) case PROTOCOL_CHANNELS_PPM: setupPulsesPPMExternalModule(); scheduleNextMixerCalculation(EXTERNAL_MODULE, PPM_PERIOD(EXTERNAL_MODULE)); break; +#endif default: break; diff --git a/radio/src/targets/common/arm/CMakeLists.txt b/radio/src/targets/common/arm/CMakeLists.txt index 68e7d03d4..fdce4e9a2 100644 --- a/radio/src/targets/common/arm/CMakeLists.txt +++ b/radio/src/targets/common/arm/CMakeLists.txt @@ -7,9 +7,12 @@ option(TRACE_SD_CARD "Traces SD enabled" OFF) option(TRACE_FATFS "Traces FatFS enabled" OFF) option(TRACE_AUDIO "Traces audio enabled" OFF) option(DEBUG_TRACE_BUFFER "Debug Trace Screen" OFF) +option(PPM "PPM TX Module" ON) +option(DSM2 "DSM2 TX Module" ON) +option(SBUS "SBUS TX Module" ON) +option(CROSSFIRE "Crossfire TX Module" OFF) option(MULTIMODULE "DIY Multiprotocol TX Module (https://github.com/pascallanger/DIY-Multiprotocol-TX-Module)" OFF) option(MULTI_SPORT "SPORT telemetry support" OFF) -option(CROSSFIRE "Crossfire TX Module" OFF) option(SUPPORT_D16_EU_ONLY "XJT module only supports D16-EU and LR12-EU" OFF) # TODO rename to XJT_EU_ONLY option(DEBUG_INTERRUPTS "Count interrupts" OFF) option(DEBUG_USB_INTERRUPTS "Count individual USB interrupts" OFF) @@ -90,7 +93,13 @@ endif() # Protocols supported -add_definitions(-DDSM2 -DSBUS) +if(DSM2) + add_definitions(-DDSM2) +endif() + +if(SBUS) + add_definitions(-DSBUS) +endif() if(PXX1) add_definitions(-DPXX -DPXX1) @@ -185,7 +194,25 @@ set(FIRMWARE_SRC set(PULSES_SRC ${PULSES_SRC} pulses.cpp - ppm.cpp - dsm2.cpp - sbus.cpp ) + +if(PPM) + set(PULSES_SRC + ${PULSES_SRC} + ppm.cpp + ) +endif() + +if(DSM2) + set(PULSES_SRC + ${PULSES_SRC} + dsm2.cpp + ) +endif() + +if(SBUS) + set(PULSES_SRC + ${PULSES_SRC} + sbus.cpp + ) +endif()