From 641f3b5bc074c91418a80d83f5412dd488eeb9a9 Mon Sep 17 00:00:00 2001
From: Arnaud Taffanel <arnaud@bitcraze.io>
Date: Tue, 16 Oct 2018 14:23:45 +0200
Subject: [PATCH] Closes #356: Add support for flow V2 and zranger V2

---
 src/cfclient/ui/tabs/FlightTab.py    | 11 +++++++++++
 src/cfclient/utils/input/__init__.py | 12 ++++++++----
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/cfclient/ui/tabs/FlightTab.py b/src/cfclient/ui/tabs/FlightTab.py
index 9dc06b8..492a815 100644
--- a/src/cfclient/ui/tabs/FlightTab.py
+++ b/src/cfclient/ui/tabs/FlightTab.py
@@ -619,10 +619,21 @@ class FlightTab(Tab, flight_tab_class):
 
         if self.helper.cf.mem.ow_search(vid=0xBC, pid=0x09):
             heightHoldPossible = True
+            self.helper.inputDeviceReader.set_hover_max_height(1.0)
+
+        if self.helper.cf.mem.ow_search(vid=0xBC, pid=0x0E):
+            heightHoldPossible = True
+            self.helper.inputDeviceReader.set_hover_max_height(2.0)
 
         if self.helper.cf.mem.ow_search(vid=0xBC, pid=0x0A):
             heightHoldPossible = True
             hoverPossible = True
+            self.helper.inputDeviceReader.set_hover_max_height(1.0)
+        
+        if self.helper.cf.mem.ow_search(vid=0xBC, pid=0x0F):
+            heightHoldPossible = True
+            hoverPossible = True
+            self.helper.inputDeviceReader.set_hover_max_height(2.0)
 
         if not heightHoldPossible:
             self._assist_mode_combo.model().item(2).setEnabled(False)
diff --git a/src/cfclient/utils/input/__init__.py b/src/cfclient/utils/input/__init__.py
index 20e6a15..ec3d329 100644
--- a/src/cfclient/utils/input/__init__.py
+++ b/src/cfclient/utils/input/__init__.py
@@ -97,6 +97,7 @@ class JoystickReader(object):
         self.thrust_slew_enabled = False
         self.thrust_slew_limit = 0
         self.has_pressure_sensor = False
+        self._hover_max_height = MAX_TARGET_HEIGHT
 
         self.max_rp_angle = 0
         self.max_yaw_rate = 0
@@ -187,6 +188,9 @@ class JoystickReader(object):
                 return d
         return None
 
+    def set_hover_max_height(self, height):
+        self._hover_max_height = height
+
     def set_alt_hold_available(self, available):
         """Set if altitude hold is available or not (depending on HW)"""
         self.has_pressure_sensor = available
@@ -458,8 +462,8 @@ class JoystickReader(object):
                     # Integrate velosity setpoint
                     self._target_height += vz * INPUT_READ_PERIOD
                     # Cap target height
-                    if self._target_height > MAX_TARGET_HEIGHT:
-                        self._target_height = MAX_TARGET_HEIGHT
+                    if self._target_height > self._hover_max_height:
+                        self._target_height = self._hover_max_height
                     if self._target_height < MIN_HOVER_HEIGHT:
                         self._target_height = MIN_HOVER_HEIGHT
 
@@ -495,8 +499,8 @@ class JoystickReader(object):
                         # Integrate velosity setpoint
                         self._target_height += vz * INPUT_READ_PERIOD
                         # Cap target height
-                        if self._target_height > MAX_TARGET_HEIGHT:
-                            self._target_height = MAX_TARGET_HEIGHT
+                        if self._target_height > self._hover_max_height:
+                            self._target_height = self._hover_max_height
                         if self._target_height < MIN_TARGET_HEIGHT:
                             self._target_height = MIN_TARGET_HEIGHT
                         self.heighthold_input_updated.call(roll, -pitch,
-- 
GitLab