diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c index f53523b24e..893e057645 100644 --- a/src/main/fc/fc_msp.c +++ b/src/main/fc/fc_msp.c @@ -1193,6 +1193,24 @@ static bool mspFcProcessOutCommand(uint16_t cmdMSP, sbuf_t *dst, mspPostProcessF sbufWriteU8(dst, 0); break; + case MSP_FILTER_CONFIG : + sbufWriteU8(dst, gyroConfig()->gyro_main_lpf_hz); + sbufWriteU16(dst, pidProfile()->dterm_lpf_hz); + sbufWriteU16(dst, pidProfile()->yaw_lpf_hz); + sbufWriteU16(dst, 0); //Was gyroConfig()->gyro_notch_hz + sbufWriteU16(dst, 1); //Was gyroConfig()->gyro_notch_cutoff + sbufWriteU16(dst, 0); //BF: pidProfile()->dterm_notch_hz + sbufWriteU16(dst, 1); //pidProfile()->dterm_notch_cutoff + + sbufWriteU16(dst, 0); //BF: masterConfig.gyro_soft_notch_hz_2 + sbufWriteU16(dst, 1); //BF: masterConfig.gyro_soft_notch_cutoff_2 + + sbufWriteU16(dst, accelerometerConfig()->acc_notch_hz); + sbufWriteU16(dst, accelerometerConfig()->acc_notch_cutoff); + + sbufWriteU16(dst, 0); //Was gyroConfig()->gyro_stage2_lowpass_hz + break; + case MSP_INAV_PID: sbufWriteU8(dst, 0); //Legacy, no longer in use async processing value sbufWriteU16(dst, 0); //Legacy, no longer in use async processing value @@ -2138,6 +2156,47 @@ static mspResult_e mspFcProcessInCommand(uint16_t cmdMSP, sbuf_t *src) return MSP_RESULT_ERROR; break; + case MSP_SET_FILTER_CONFIG : + if (dataSize >= 5) { + gyroConfigMutable()->gyro_main_lpf_hz = sbufReadU8(src); + pidProfileMutable()->dterm_lpf_hz = constrain(sbufReadU16(src), 0, 500); + pidProfileMutable()->yaw_lpf_hz = constrain(sbufReadU16(src), 0, 255); + if (dataSize >= 9) { + sbufReadU16(src); //Was gyroConfigMutable()->gyro_notch_hz + sbufReadU16(src); //Was gyroConfigMutable()->gyro_notch_cutoff + } else { + return MSP_RESULT_ERROR; + } + if (dataSize >= 13) { + sbufReadU16(src); + sbufReadU16(src); + pidInitFilters(); + } else { + return MSP_RESULT_ERROR; + } + if (dataSize >= 17) { + sbufReadU16(src); // Was gyroConfigMutable()->gyro_soft_notch_hz_2 + sbufReadU16(src); // Was gyroConfigMutable()->gyro_soft_notch_cutoff_2 + } else { + return MSP_RESULT_ERROR; + } + + if (dataSize >= 21) { + accelerometerConfigMutable()->acc_notch_hz = constrain(sbufReadU16(src), 0, 255); + accelerometerConfigMutable()->acc_notch_cutoff = constrain(sbufReadU16(src), 1, 255); + } else { + return MSP_RESULT_ERROR; + } + + if (dataSize >= 22) { + sbufReadU16(src); //Was gyro_stage2_lowpass_hz + } else { + return MSP_RESULT_ERROR; + } + } else + return MSP_RESULT_ERROR; + break; + case MSP_SET_INAV_PID: if (dataSize == 15) { sbufReadU8(src); //Legacy, no longer in use async processing value diff --git a/src/main/msp/msp_protocol.h b/src/main/msp/msp_protocol.h index f8eb7ef01b..a983d0bc46 100644 --- a/src/main/msp/msp_protocol.h +++ b/src/main/msp/msp_protocol.h @@ -196,6 +196,9 @@ #define MSP_ADVANCED_CONFIG 90 #define MSP_SET_ADVANCED_CONFIG 91 +#define MSP_FILTER_CONFIG 92 +#define MSP_SET_FILTER_CONFIG 93 + #define MSP_SENSOR_CONFIG 96 #define MSP_SET_SENSOR_CONFIG 97