From 839df10e8c358770295e79178a2340d4ea0a8dfa Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Fri, 31 Mar 2017 16:06:40 +0200 Subject: [PATCH] Backport rssi inversion from #2540 --- src/main/fc/cli.c | 2 +- src/main/fc/config.c | 2 +- src/main/rx/rx.c | 11 +++++++++-- src/main/rx/rx.h | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/fc/cli.c b/src/main/fc/cli.c index d8ccbd7fc0..8466bbb42b 100755 --- a/src/main/fc/cli.c +++ b/src/main/fc/cli.c @@ -502,7 +502,7 @@ const clivalue_t valueTable[] = { { "rc_interp", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &rxConfig()->rcInterpolation, .config.lookup = { TABLE_RC_INTERPOLATION } }, { "rc_interp_ch", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &rxConfig()->rcInterpolationChannels, .config.lookup = { TABLE_RC_INTERPOLATION_CHANNELS } }, { "rc_interp_int", VAR_UINT8 | MASTER_VALUE, &rxConfig()->rcInterpolationInterval, .config.minmax = { 1, 50 } }, - { "rssi_ppm_invert", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, &rxConfig()->rssi_ppm_invert, .config.lookup = { TABLE_OFF_ON } }, + { "rssi_invert", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, &rxConfig()->rssi_invert, .config.lookup = { TABLE_OFF_ON } }, #if defined(USE_PWM) { "input_filtering_mode", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, &pwmConfig()->inputFilteringMode, .config.lookup = { TABLE_OFF_ON } }, #endif diff --git a/src/main/fc/config.c b/src/main/fc/config.c index 8015846a32..efb6450a1d 100755 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -875,7 +875,7 @@ void createDefaultConfig(master_t *config) config->rxConfig.rssi_channel = 0; config->rxConfig.rssi_scale = RSSI_SCALE_DEFAULT; - config->rxConfig.rssi_ppm_invert = 0; + config->rxConfig.rssi_invert = 0; config->rxConfig.rcInterpolation = RC_SMOOTHING_AUTO; config->rxConfig.rcInterpolationChannels = 0; config->rxConfig.rcInterpolationInterval = 19; diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c index 897e8bc0bd..0d1c3379b8 100644 --- a/src/main/rx/rx.c +++ b/src/main/rx/rx.c @@ -551,7 +551,7 @@ static void updateRSSIPWM(void) pwmRssi = rcData[rxConfig->rssi_channel - 1]; // RSSI_Invert option - if (rxConfig->rssi_ppm_invert) { + if (rxConfig->rssi_invert) { pwmRssi = ((2000 - pwmRssi) + 1000); } @@ -592,7 +592,14 @@ static void updateRSSIADC(timeUs_t currentTimeUs) adcRssiMean = adcRssiMean / RSSI_ADC_SAMPLE_COUNT; - rssi = (uint16_t)((constrain(adcRssiMean, 0, 100) / 100.0f) * 1023.0f); + adcRssiMean=constrain(adcRssiMean, 0, 100); + + // RSSI_Invert option + if (rxConfig->rssi_invert) { + adcRssiMean = 100 - adcRssiMean; + } + + rssi = (uint16_t)((adcRssiMean / 100.0f) * 1023.0f); #endif } diff --git a/src/main/rx/rx.h b/src/main/rx/rx.h index 6d19d3c40a..8f4db68990 100644 --- a/src/main/rx/rx.h +++ b/src/main/rx/rx.h @@ -122,7 +122,7 @@ typedef struct rxConfig_s { uint8_t spektrum_sat_bind_autoreset; // whenever we will reset (exit) binding mode after hard reboot uint8_t rssi_channel; uint8_t rssi_scale; - uint8_t rssi_ppm_invert; + uint8_t rssi_invert; uint16_t midrc; // Some radios have not a neutral point centered on 1500. can be changed here uint16_t mincheck; // minimum rc end uint16_t maxcheck; // maximum rc end