From 3a986474e0f98810647d949fe18df4b361e46efe Mon Sep 17 00:00:00 2001
From: Andrew Tridgell <tridge@samba.org>
Date: Thu, 30 Jan 2014 11:29:35 +1100
Subject: [PATCH] Plane: added RSSI_RANGE parameter

---
 ArduPlane/Parameters.h   |  2 ++
 ArduPlane/Parameters.pde |  8 ++++++++
 ArduPlane/sensors.pde    | 12 ++++++++----
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/ArduPlane/Parameters.h b/ArduPlane/Parameters.h
index ca6fc18ee..d18a69460 100644
--- a/ArduPlane/Parameters.h
+++ b/ArduPlane/Parameters.h
@@ -180,6 +180,7 @@ public:
         k_param_rssi_pin,
         k_param_battery_volt_pin,   // unused
         k_param_battery_curr_pin,   // unused - 169
+        k_param_rssi_range,
 
         //
         // 170: Radio settings
@@ -411,6 +412,7 @@ public:
     AP_Int8 flap_2_percent;
     AP_Int8 flap_2_speed;
     AP_Int8 rssi_pin;
+    AP_Float rssi_range;             // allows to set max voltage for rssi pin such as 5.0, 3.3 etc.     
     AP_Int8 inverted_flight_ch;             // 0=disabled, 1-8 is channel for inverted flight trigger
     AP_Int8 stick_mixing;
     AP_Float takeoff_throttle_min_speed;
diff --git a/ArduPlane/Parameters.pde b/ArduPlane/Parameters.pde
index 377376ca7..44d716d89 100644
--- a/ArduPlane/Parameters.pde
+++ b/ArduPlane/Parameters.pde
@@ -753,6 +753,14 @@ const AP_Param::Info var_info[] PROGMEM = {
     // @User: Standard
     GSCALAR(rssi_pin,            "RSSI_PIN",         -1),
 
+    // @Param: RSSI_RANGE
+    // @DisplayName: Receiver RSSI voltage range
+    // @Description: Receiver RSSI voltage range
+    // @Units: Volt
+    // @Values: 3.3:3.3V, 5.0:5V
+    // @User: Standard
+    GSCALAR(rssi_range,          "RSSI_RANGE",         5.0),
+
     // @Param: INVERTEDFLT_CH
     // @DisplayName: Inverted flight channel
     // @Description: A RC input channel number to enable inverted flight. If this is non-zero then the APM will monitor the correcponding RC input channel and will enable inverted flight when the channel goes above 1750.
diff --git a/ArduPlane/sensors.pde b/ArduPlane/sensors.pde
index 581159974..737e24af9 100644
--- a/ArduPlane/sensors.pde
+++ b/ArduPlane/sensors.pde
@@ -83,12 +83,16 @@ static void read_battery(void)
 // RC_CHANNELS_SCALED message
 void read_receiver_rssi(void)
 {
-    rssi_analog_source->set_pin(g.rssi_pin);
-    float ret = rssi_analog_source->voltage_average() * 50;
-    receiver_rssi = constrain_int16(ret, 0, 255);
+    // avoid divide by zero
+    if (g.rssi_range <= 0) {
+        receiver_rssi = 0;
+    }else{
+        rssi_analog_source->set_pin(g.rssi_pin);
+        float ret = rssi_analog_source->voltage_average() * 255 / g.rssi_range;
+        receiver_rssi = constrain_int16(ret, 0, 255);
+    }
 }
 
-
 /*
   return current_loc.alt adjusted for ALT_OFFSET
   This is useful during long flights to account for barometer changes
-- 
GitLab