diff --git a/src/main/interface/settings.c b/src/main/interface/settings.c index 148b74503..663f1f858 100644 --- a/src/main/interface/settings.c +++ b/src/main/interface/settings.c @@ -520,6 +520,7 @@ const clivalue_t valueTable[] = { { "rssi_channel", VAR_INT8 | MASTER_VALUE, .config.minmax = { 0, MAX_SUPPORTED_RC_CHANNEL_COUNT }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_channel) }, { "rssi_src_frame_errors", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_src_frame_errors) }, { "rssi_scale", VAR_UINT8 | MASTER_VALUE, .config.minmax = { RSSI_SCALE_MIN, RSSI_SCALE_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_scale) }, + { "rssi_offset", VAR_INT8 | MASTER_VALUE, .config.minmax = { -100, 100 }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_offset) }, { "rssi_invert", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_invert) }, { "rc_interp", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_RC_INTERPOLATION }, PG_RX_CONFIG, offsetof(rxConfig_t, rcInterpolation) }, { "rc_interp_ch", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_RC_INTERPOLATION_CHANNELS }, PG_RX_CONFIG, offsetof(rxConfig_t, rcInterpolationChannels) }, diff --git a/src/main/pg/rx.c b/src/main/pg/rx.c index 9ef4228e6..c71a49423 100644 --- a/src/main/pg/rx.c +++ b/src/main/pg/rx.c @@ -52,6 +52,7 @@ void pgResetFn_rxConfig(rxConfig_t *rxConfig) .rssi_src_frame_errors = false, .rssi_channel = 0, .rssi_scale = RSSI_SCALE_DEFAULT, + .rssi_offset = 0, .rssi_invert = 0, .rcInterpolation = RC_SMOOTHING_AUTO, .rcInterpolationChannels = 0, diff --git a/src/main/pg/rx.h b/src/main/pg/rx.h index 47bc81fad..8cecdddd0 100644 --- a/src/main/pg/rx.h +++ b/src/main/pg/rx.h @@ -49,6 +49,7 @@ typedef struct rxConfig_s { uint16_t rx_max_usec; uint8_t max_aux_channel; uint8_t rssi_src_frame_errors; // true to use frame drop flags in the rx protocol + int8_t rssi_offset; // offset applied to the RSSI value before it is returned } rxConfig_t; PG_DECLARE(rxConfig_t, rxConfig); diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c index 5d0727114..017859ef5 100644 --- a/src/main/rx/rx.c +++ b/src/main/rx/rx.c @@ -78,6 +78,7 @@ static timeUs_t lastMspRssiUpdateUs = 0; #define MSP_RSSI_TIMEOUT_US 1500000 // 1.5 sec #define RSSI_ADC_DIVISOR (4096 / 1024) +#define RSSI_OFFSET_SCALING (1024 / 100.0f) rssiSource_e rssiSource; @@ -680,7 +681,7 @@ void updateRSSI(timeUs_t currentTimeUs) uint16_t getRssi(void) { - return (rxConfig()->rssi_scale / 100.0f) * rssi; + return ((rxConfig()->rssi_scale / 100.0f) * rssi) + (rxConfig()->rssi_offset * RSSI_OFFSET_SCALING); } uint8_t getRssiPercent(void)