From b4b88a5972e71eab0089a9f48d86cfd866d0b31a Mon Sep 17 00:00:00 2001 From: mikeller Date: Sun, 15 Jul 2018 15:48:46 +1200 Subject: [PATCH 1/3] Adding MSP for new profile settings introduced in 3.4. --- src/main/interface/msp.c | 75 ++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 14 deletions(-) diff --git a/src/main/interface/msp.c b/src/main/interface/msp.c index b93820568..e9d607942 100644 --- a/src/main/interface/msp.c +++ b/src/main/interface/msp.c @@ -530,9 +530,6 @@ static bool mspCommonProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProce break; case MSP_DEBUG: - // output some useful QA statistics - // debug[x] = ((hse_value / 1000000) * 1000) + (SystemCoreClock / 1000000); // XX0YY [crystal clock : core clock] - for (int i = 0; i < DEBUG16_VALUE_COUNT; i++) { sbufWriteU16(dst, debug[i]); // 4 variables are here for general monitoring purpose } @@ -1302,11 +1299,38 @@ static bool mspProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst) sbufWriteU16(dst, currentPidProfile->itermThrottleThreshold); sbufWriteU16(dst, currentPidProfile->itermAcceleratorGain); sbufWriteU16(dst, currentPidProfile->dtermSetpointWeight); + sbufWriteU8(dst, currentPidProfile->iterm_rotation); +#if defined(USE_SMART_FEEDFORWARD) sbufWriteU8(dst, currentPidProfile->smart_feedforward); - sbufWriteU8(dst, currentPidProfile->throttle_boost); - sbufWriteU8(dst, currentPidProfile->throttle_boost_cutoff); - break; +#else + sbufWriteU8(dst, 0); +#endif +#if defined(USE_ITERM_RELAX) + sbufWriteU8(dst, currentPidProfile->iterm_relax); +#else + sbufWriteU8(dst, 0); +#endif +#if defined(USE_ABSOLUTE_CONTROL) + sbufWriteU8(dst, currentPidProfile->abs_control_gain); + sbufWriteU8(dst, currentPidProfile->abs_control_limit); + sbufWriteU8(dst, currentPidProfile->abs_control_error_limit); +#else + sbufWriteU8(dst, 0); + sbufWriteU8(dst, 0); + sbufWriteU8(dst, 0); +#endif +#if defined(USE_ACRO_TRAINER) + sbufWriteU8(dst, currentPidProfile->acro_trainer_angle_limit); + sbufWriteU16(dst, currentPidProfile->acro_trainer_lookahead_ms); + sbufWriteU8(dst, currentPidProfile->acro_trainer_gain); +#else + sbufWriteU8(dst, 0); + sbufWriteU16(dst, 0); + sbufWriteU8(dst, 0); + sbufWriteU8(dst, 0); +#endif + break; case MSP_SENSOR_CONFIG: sbufWriteU8(dst, accelerometerConfig()->acc_hardware); sbufWriteU8(dst, barometerConfig()->baro_hardware); @@ -1825,14 +1849,41 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src) if (sbufBytesRemaining(src) >= 2) { currentPidProfile->dtermSetpointWeight = sbufReadU16(src); } - if (sbufBytesRemaining(src) >= 3) { + if (sbufBytesRemaining(src) >= 10) { + // Added in MSP API 1.40 + currentPidProfile->iterm_rotation = sbufReadU8(src); +#if defined(USE_SMART_FEEDFORWARD) currentPidProfile->smart_feedforward = sbufReadU8(src); - currentPidProfile->throttle_boost = sbufReadU8(src); - currentPidProfile->throttle_boost_cutoff = sbufReadU8(src); +#else + sbufReadU8(src); +#endif +#if defined(USE_ITERM_RELAX) + currentPidProfile->iterm_relax = sbufReadU8(src); +#else + sbufReadU8(src); +#endif +#if defined(USE_ABSOLUTE_CONTROL) + currentPidProfile->abs_control_gain = sbufReadU8(src); + currentPidProfile->abs_control_limit = sbufReadU8(src); + currentPidProfile->abs_control_error_limit = sbufReadU8(src); +#else + sbufReadU8(src); + sbufReadU8(src); + sbufReadU8(src); +#endif +#if defined(USE_ACRO_TRAINER) + currentPidProfile->acro_trainer_angle_limit = sbufReadU8(src); + currentPidProfile->acro_trainer_lookahead_ms = sbufReadU16(src); + currentPidProfile->acro_trainer_gain = sbufReadU8(src); +#else + sbufReadU8(src); + sbufReadU16(src); + sbufReadU8(src); +#endif } pidInitConfig(currentPidProfile); - break; + break; case MSP_SET_SENSOR_CONFIG: accelerometerConfigMutable()->acc_hardware = sbufReadU8(src); barometerConfigMutable()->baro_hardware = sbufReadU8(src); @@ -2481,19 +2532,15 @@ void mspFcProcessReply(mspPacket_t *reply) switch (subCmd) { case 0: // HEARTBEAT - //debug[0]++; osdSlaveHeartbeat(); break; case 1: // RELEASE - //debug[1]++; break; case 2: // CLEAR - //debug[2]++; osdSlaveClearScreen(); break; case 3: { - //debug[3]++; #define MSP_OSD_MAX_STRING_LENGTH 30 // FIXME move this const uint8_t y = sbufReadU8(src); // row const uint8_t x = sbufReadU8(src); // column From 2735a626e0f6a0dde52a12ce5184135cacb5b140 Mon Sep 17 00:00:00 2001 From: mikeller Date: Tue, 17 Jul 2018 00:33:30 +1200 Subject: [PATCH 2/3] Changes from review. --- src/main/interface/msp.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main/interface/msp.c b/src/main/interface/msp.c index e9d607942..acf00a234 100644 --- a/src/main/interface/msp.c +++ b/src/main/interface/msp.c @@ -1307,8 +1307,12 @@ static bool mspProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst) #endif #if defined(USE_ITERM_RELAX) sbufWriteU8(dst, currentPidProfile->iterm_relax); + sbufWriteU8(dst, currentPidProfile->iterm_relax_type); + sbufWriteU8(dst, currentPidProfile->iterm_relax_cutoff); #else sbufWriteU8(dst, 0); + sbufWriteU8(dst, 0); + sbufWriteU8(dst, 0); #endif #if defined(USE_ABSOLUTE_CONTROL) sbufWriteU8(dst, currentPidProfile->abs_control_gain); @@ -1319,14 +1323,16 @@ static bool mspProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst) sbufWriteU8(dst, 0); sbufWriteU8(dst, 0); #endif -#if defined(USE_ACRO_TRAINER) - sbufWriteU8(dst, currentPidProfile->acro_trainer_angle_limit); - sbufWriteU16(dst, currentPidProfile->acro_trainer_lookahead_ms); - sbufWriteU8(dst, currentPidProfile->acro_trainer_gain); +#if defined(USE_THROTTLE_BOOST) + sbufWriteU8(dst, currentPidProfile->throttle_boost); + sbufWriteU8(dst, currentPidProfile->throttle_boost_cutoff); #else sbufWriteU8(dst, 0); - sbufWriteU16(dst, 0); sbufWriteU8(dst, 0); +#endif +#if defined(USE_ACRO_TRAINER) + sbufWriteU8(dst, currentPidProfile->acro_trainer_angle_limit); +#else sbufWriteU8(dst, 0); #endif @@ -1849,7 +1855,7 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src) if (sbufBytesRemaining(src) >= 2) { currentPidProfile->dtermSetpointWeight = sbufReadU16(src); } - if (sbufBytesRemaining(src) >= 10) { + if (sbufBytesRemaining(src) >= 11) { // Added in MSP API 1.40 currentPidProfile->iterm_rotation = sbufReadU8(src); #if defined(USE_SMART_FEEDFORWARD) @@ -1859,8 +1865,12 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src) #endif #if defined(USE_ITERM_RELAX) currentPidProfile->iterm_relax = sbufReadU8(src); + currentPidProfile->iterm_relax_type = sbufReadU8(src); + currentPidProfile->iterm_relax_cutoff = sbufReadU8(src); #else sbufReadU8(src); + sbufReadU8(src); + sbufReadU8(src); #endif #if defined(USE_ABSOLUTE_CONTROL) currentPidProfile->abs_control_gain = sbufReadU8(src); @@ -1871,13 +1881,16 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src) sbufReadU8(src); sbufReadU8(src); #endif -#if defined(USE_ACRO_TRAINER) - currentPidProfile->acro_trainer_angle_limit = sbufReadU8(src); - currentPidProfile->acro_trainer_lookahead_ms = sbufReadU16(src); - currentPidProfile->acro_trainer_gain = sbufReadU8(src); +#if defined(USE_THROTTLE_BOOST) + currentPidProfile->throttle_boost = sbufReadU8(src); + currentPidProfile->throttle_boost_cutoff = sbufReadU8(src); #else sbufReadU8(src); - sbufReadU16(src); + sbufReadU8(src); +#endif +#if defined(USE_ACRO_TRAINER) + currentPidProfile->acro_trainer_angle_limit = sbufReadU8(src); +#else sbufReadU8(src); #endif } From 80a29b9ad573a8cd9e19149b8f92cd7d7db55a19 Mon Sep 17 00:00:00 2001 From: mikeller Date: Wed, 18 Jul 2018 01:14:03 +1200 Subject: [PATCH 3/3] Removed unneeded parameters. --- src/main/interface/msp.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/main/interface/msp.c b/src/main/interface/msp.c index acf00a234..3fcb68d06 100644 --- a/src/main/interface/msp.c +++ b/src/main/interface/msp.c @@ -1308,27 +1308,19 @@ static bool mspProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst) #if defined(USE_ITERM_RELAX) sbufWriteU8(dst, currentPidProfile->iterm_relax); sbufWriteU8(dst, currentPidProfile->iterm_relax_type); - sbufWriteU8(dst, currentPidProfile->iterm_relax_cutoff); #else sbufWriteU8(dst, 0); sbufWriteU8(dst, 0); - sbufWriteU8(dst, 0); #endif #if defined(USE_ABSOLUTE_CONTROL) sbufWriteU8(dst, currentPidProfile->abs_control_gain); - sbufWriteU8(dst, currentPidProfile->abs_control_limit); - sbufWriteU8(dst, currentPidProfile->abs_control_error_limit); #else sbufWriteU8(dst, 0); - sbufWriteU8(dst, 0); - sbufWriteU8(dst, 0); #endif #if defined(USE_THROTTLE_BOOST) sbufWriteU8(dst, currentPidProfile->throttle_boost); - sbufWriteU8(dst, currentPidProfile->throttle_boost_cutoff); #else sbufWriteU8(dst, 0); - sbufWriteU8(dst, 0); #endif #if defined(USE_ACRO_TRAINER) sbufWriteU8(dst, currentPidProfile->acro_trainer_angle_limit); @@ -1855,7 +1847,7 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src) if (sbufBytesRemaining(src) >= 2) { currentPidProfile->dtermSetpointWeight = sbufReadU16(src); } - if (sbufBytesRemaining(src) >= 11) { + if (sbufBytesRemaining(src) >= 7) { // Added in MSP API 1.40 currentPidProfile->iterm_rotation = sbufReadU8(src); #if defined(USE_SMART_FEEDFORWARD) @@ -1866,27 +1858,19 @@ static mspResult_e mspProcessInCommand(uint8_t cmdMSP, sbuf_t *src) #if defined(USE_ITERM_RELAX) currentPidProfile->iterm_relax = sbufReadU8(src); currentPidProfile->iterm_relax_type = sbufReadU8(src); - currentPidProfile->iterm_relax_cutoff = sbufReadU8(src); #else sbufReadU8(src); sbufReadU8(src); - sbufReadU8(src); #endif #if defined(USE_ABSOLUTE_CONTROL) currentPidProfile->abs_control_gain = sbufReadU8(src); - currentPidProfile->abs_control_limit = sbufReadU8(src); - currentPidProfile->abs_control_error_limit = sbufReadU8(src); #else sbufReadU8(src); - sbufReadU8(src); - sbufReadU8(src); #endif #if defined(USE_THROTTLE_BOOST) currentPidProfile->throttle_boost = sbufReadU8(src); - currentPidProfile->throttle_boost_cutoff = sbufReadU8(src); #else sbufReadU8(src); - sbufReadU8(src); #endif #if defined(USE_ACRO_TRAINER) currentPidProfile->acro_trainer_angle_limit = sbufReadU8(src);