diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c index b43409bf54..8e5382aafa 100644 --- a/src/main/io/serial_msp.c +++ b/src/main/io/serial_msp.c @@ -1145,10 +1145,16 @@ static bool processInCommand(void) magHold = read16(); break; case MSP_SET_RAW_RC: - // FIXME need support for more than 8 channels - for (i = 0; i < 8; i++) - rcData[i] = read16(); - rxMspFrameRecieve(); + { + uint8_t channelCount = currentPort->dataSize / sizeof(uint16_t); + if (channelCount > MAX_SUPPORTED_RC_CHANNEL_COUNT) { + headSerialError(0); + } else { + for (i = 0; i < channelCount; i++) + rcData[i] = read16(); + rxMspFrameRecieve(); + } + } break; case MSP_SET_ACC_TRIM: currentProfile->accelerometerTrims.values.pitch = read16(); diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c index 60ebc97263..648305731d 100644 --- a/src/main/rx/rx.c +++ b/src/main/rx/rx.c @@ -265,6 +265,10 @@ void processRxChannels(void) { uint8_t chan; + if (feature(FEATURE_RX_MSP)) { + return; // rcData will have already been updated by MSP_SET_RAW_RC + } + bool shouldCheckPulse = true; if (feature(FEATURE_FAILSAFE) && feature(FEATURE_RX_PPM)) {