From 0819f8d5c00d4564aeecb30b32addc5262fc8460 Mon Sep 17 00:00:00 2001 From: Frankie Arzu <32604366+frankiearzu@users.noreply.github.com> Date: Wed, 19 Aug 2026 18:41:54 -0500 Subject: [PATCH] feat(mpm): increase Spektrum/DSM max channels to 16 (2.12) (#7632) Co-authored-by: Peter Feerick <5500713+pfeerick@users.noreply.github.com> Co-authored-by: Claude Sonnet 5 --- companion/src/firmwares/moduledata.cpp | 6 +----- radio/src/pulses/modules_helpers.cpp | 2 +- radio/src/pulses/multi.cpp | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/companion/src/firmwares/moduledata.cpp b/companion/src/firmwares/moduledata.cpp index f68b81129..fe771c12f 100644 --- a/companion/src/firmwares/moduledata.cpp +++ b/companion/src/firmwares/moduledata.cpp @@ -365,11 +365,7 @@ int ModuleData::getMaxChannelCount() case PULSES_DSMX: return 6; case PULSES_MULTIMODULE: - if (multi.rfProtocol == MODULE_SUBTYPE_MULTI_DSM2) - return 12; - else - return 16; - break; + return 16; case PULSES_FLYSKY_AFHDS2A: return 14; case PULSES_FLYSKY_AFHDS3: diff --git a/radio/src/pulses/modules_helpers.cpp b/radio/src/pulses/modules_helpers.cpp index 87137b129..ce80f1c54 100644 --- a/radio/src/pulses/modules_helpers.cpp +++ b/radio/src/pulses/modules_helpers.cpp @@ -66,7 +66,7 @@ int8_t maxModuleChannels_M8(uint8_t moduleIdx) return 8; // always 16 channels in FCC / FLEX } } else if (isModuleMultimoduleDSM2(moduleIdx)) { - return 4; // 12 channels + return 8; // 16 channels with new MultiModule Firmware. Older firmware will still work up to 12ch. } else if (isModuleDSMP(moduleIdx)) { return 4; // 12 channels } else { diff --git a/radio/src/pulses/multi.cpp b/radio/src/pulses/multi.cpp index f5ed79b9e..c6ead62c8 100644 --- a/radio/src/pulses/multi.cpp +++ b/radio/src/pulses/multi.cpp @@ -366,7 +366,7 @@ void sendFrameProtocolHeader(uint8_t*& p_buf, uint8_t module, bool failsafe) optionValue |= 0x40; // 11ms servo refresh if (g_model.moduleData[module].multi.optionValue & 0x04) optionValue |= 0x20; // Cloned - optionValue |= sentModuleChannels(module); //add number of channels + optionValue |= sentModuleChannels(module) & 0x0F; //add number of channels, make sure is only 4 bits, 0 means 16 channels. } // Set the highest bit of option byte in AFHDS2A protocol to instruct MULTI to passthrough telemetry bytes instead