From 0b64640096567992bb6d0820dd1cb47cfe1dbc6a Mon Sep 17 00:00:00 2001
From: omwdunkley <omwdunkley@gmail.com>
Date: Wed, 11 Sep 2013 00:36:40 +0200
Subject: [PATCH] Lots of updates. Added GUI to show ASL and target ASL. Target
 is disabled when not in hover mode. Added splitters to the main tab, so one
 can resize as one wishes, eg only view HUD. Updated attitude indicator,
 either shows ASL, or if in hover mode shows ASL and offset to the target
 graphically

---
 .cproject                             |   28 +-
 lib/cfclient/ui/tabs/FlightTab.py     |   64 +-
 lib/cfclient/ui/tabs/PlotTab.py       |    2 +-
 lib/cfclient/ui/tabs/flightTab.ui     | 1147 +++++++++++++------------
 lib/cfclient/ui/widgets/ai.py         |   89 +-
 lib/cfclient/ui/widgets/plotwidget.py |    4 +-
 lib/cflib/crazyflie/commander.py      |    2 -
 7 files changed, 746 insertions(+), 590 deletions(-)

diff --git a/.cproject b/.cproject
index aa34380..2c7c0cd 100644
--- a/.cproject
+++ b/.cproject
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.837143400">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.837143400" moduleId="org.eclipse.cdt.core.settings" name="Default">
+		<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.556304233">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.556304233" moduleId="org.eclipse.cdt.core.settings" name="Default">
 				<externalSettings/>
 				<extensions>
 					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
@@ -14,17 +14,17 @@
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.837143400" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
-					<folderInfo id="cdt.managedbuild.toolchain.gnu.base.837143400.594172772" name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.base.1328744611" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
-							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.643886697" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
-							<builder id="cdt.managedbuild.target.gnu.builder.base.604879697" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.base.2103528451" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.982197300" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.2130844211" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1953354346" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.225120931" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.base.1917819892" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"/>
+				<configuration buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.556304233" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
+					<folderInfo id="cdt.managedbuild.toolchain.gnu.base.556304233.1571022948" name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.base.782442737" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1751475477" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
+							<builder id="cdt.managedbuild.target.gnu.builder.base.370951709" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.archiver.base.2066136681" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1966071336" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.2144663438" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1237044607" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.554953785" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
+							<tool id="cdt.managedbuild.tool.gnu.assembler.base.1409456431" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"/>
 						</toolChain>
 					</folderInfo>
 				</configuration>
@@ -36,7 +36,7 @@
 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 	</storageModule>
 	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="crazyflie-pc-client.null.635258452" name="crazyflie-pc-client"/>
+		<project id="crazyflie-pc-client-hover.null.1838634307" name="crazyflie-pc-client-hover"/>
 	</storageModule>
 	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 </cproject>
diff --git a/lib/cfclient/ui/tabs/FlightTab.py b/lib/cfclient/ui/tabs/FlightTab.py
index 1827158..d188202 100644
--- a/lib/cfclient/ui/tabs/FlightTab.py
+++ b/lib/cfclient/ui/tabs/FlightTab.py
@@ -65,12 +65,14 @@ class FlightTab(Tab, flight_tab_class):
 
     _motor_data_signal = pyqtSignal(object)
     _imu_data_signal = pyqtSignal(object)
+    _hover_data_signal = pyqtSignal(object)
+    _baro_data_signal = pyqtSignal(object)
 
     _input_updated_signal = pyqtSignal(float, float, float, float, bool)
     _rp_trim_updated_signal = pyqtSignal(float, float)
     _emergency_stop_updated_signal = pyqtSignal(bool)
 
-    UI_DATA_UPDATE_FPS = 10
+    #UI_DATA_UPDATE_FPS = 10
 
     connectionFinishedSignal = pyqtSignal(str)
     disconnectedSignal = pyqtSignal(str)
@@ -103,6 +105,8 @@ class FlightTab(Tab, flight_tab_class):
                                      self._emergency_stop_updated_signal.emit)
 
         self._imu_data_signal.connect(self._imu_data_received)
+        self._baro_data_signal.connect(self._baro_data_received)
+        self._hover_data_signal.connect(self._hover_data_received)
         self._motor_data_signal.connect(self._motor_data_received)
 
         # Connect UI signals that are in this tab
@@ -145,7 +149,8 @@ class FlightTab(Tab, flight_tab_class):
                     self.ratePidRadioButton.setChecked(eval(checked)))
 
         self.ai = AttitudeIndicator()
-        self.gridLayout.addWidget(self.ai, 0, 1)
+        self.verticalLayout_4.addWidget(self.ai)
+        self.splitter.setSizes([1000,1])
 
         self.targetCalPitch.setValue(GuiConfig().get("trim_pitch"))
         self.targetCalRoll.setValue(GuiConfig().get("trim_roll"))
@@ -175,6 +180,23 @@ class FlightTab(Tab, flight_tab_class):
         self.actualM3.setValue(data["motor.m3"])
         self.actualM4.setValue(data["motor.m4"])
 
+        
+    def _baro_data_received(self, data):
+        self.actualASL.setText(("%.2f" % data["baro.aslLong"]))
+        self.ai.setBaro(data["baro.aslLong"])
+        
+    def _hover_data_received(self, data):       
+        target =   data["hover.target"]
+        if target>0:
+            if not self.targetASL.isEnabled():
+                self.targetASL.setEnabled(True) 
+            self.targetASL.setText(("%.2f" % target))
+            self.ai.setHover(target)    
+        elif self.targetASL.isEnabled():
+            self.targetASL.setEnabled(False)
+            self.targetASL.setText("Not set")   
+            self.ai.setHover(0)    
+        
     def _imu_data_received(self, data):
         self.actualRoll.setText(("%.2f" % data["stabilizer.roll"]))
         self.actualPitch.setText(("%.2f" % data["stabilizer.pitch"]))
@@ -187,7 +209,8 @@ class FlightTab(Tab, flight_tab_class):
                              data["stabilizer.pitch"])
 
     def connected(self, linkURI):
-        lg = LogConfig("Stabalizer", 100)
+        # IMU & THRUST
+        lg = LogConfig("Stabalizer", 50)
         lg.addVariable(LogVariable("stabilizer.roll", "float"))
         lg.addVariable(LogVariable("stabilizer.pitch", "float"))
         lg.addVariable(LogVariable("stabilizer.yaw", "float"))
@@ -202,7 +225,9 @@ class FlightTab(Tab, flight_tab_class):
             logger.warning("Could not setup logconfiguration after "
                            "connection!")
 
-        lg = LogConfig("Motors", 100)
+
+        # MOTOR
+        lg = LogConfig("Motors", 50)
         lg.addVariable(LogVariable("motor.m1", "uint32_t"))
         lg.addVariable(LogVariable("motor.m2", "uint32_t"))
         lg.addVariable(LogVariable("motor.m3", "uint32_t"))
@@ -216,6 +241,34 @@ class FlightTab(Tab, flight_tab_class):
         else:
             logger.warning("Could not setup logconfiguration after "
                            "connection!")
+            
+        # BARO
+        lg = LogConfig("Baro", 50)
+        lg.addVariable(LogVariable("baro.asl", "float"))
+        lg.addVariable(LogVariable("baro.aslLong", "float"))
+        lg.addVariable(LogVariable("baro.aslRaw", "float"))
+        lg.addVariable(LogVariable("baro.temp", "float"))
+
+        self.log = self.helper.cf.log.create_log_packet(lg)
+        if (self.log is not None):
+            self.log.dataReceived.add_callback(self._baro_data_signal.emit)
+            self.log.error.add_callback(self.loggingError)
+            self.log.start()
+        else:
+            logger.warning("Could not setup logconfiguration after "
+                           "connection!")            
+        # HOVER
+        lg = LogConfig("Hover", 50)
+        lg.addVariable(LogVariable("hover.target", "float"))
+
+        self.log = self.helper.cf.log.create_log_packet(lg)
+        if (self.log is not None):
+            self.log.dataReceived.add_callback(self._hover_data_signal.emit)
+            self.log.error.add_callback(self.loggingError)
+            self.log.start()
+        else:
+            logger.warning("Could not setup logconfiguration after "
+                           "connection!")                        
 
     def disconnected(self, linkURI):
         self.ai.setRollPitch(0, 0)
@@ -227,6 +280,9 @@ class FlightTab(Tab, flight_tab_class):
         self.actualPitch.setText("")
         self.actualYaw.setText("")
         self.actualThrust.setText("")
+        self.actualASL.setText("")
+        self.targetASL.setText("Not Set")
+        self.targetASL.setEnabled(False)
 
     def minMaxThrustChanged(self):
         self.helper.inputDeviceReader.set_thrust_limits(
diff --git a/lib/cfclient/ui/tabs/PlotTab.py b/lib/cfclient/ui/tabs/PlotTab.py
index fcefae2..c7a72f0 100644
--- a/lib/cfclient/ui/tabs/PlotTab.py
+++ b/lib/cfclient/ui/tabs/PlotTab.py
@@ -64,7 +64,7 @@ class PlotTab(Tab, plot_tab_class):
     logDataSignal = pyqtSignal(object)
 
     colors = [QtCore.Qt.green, QtCore.Qt.blue, QtCore.Qt.magenta,
-              QtCore.Qt.red, QtCore.Qt.black]
+              QtCore.Qt.red, QtCore.Qt.black, QtCore.Qt.cyan,QtCore.Qt.yellow]
 
     dsList = []
 
diff --git a/lib/cfclient/ui/tabs/flightTab.ui b/lib/cfclient/ui/tabs/flightTab.ui
index eea1dc0..4158e24 100644
--- a/lib/cfclient/ui/tabs/flightTab.ui
+++ b/lib/cfclient/ui/tabs/flightTab.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1142</width>
-    <height>701</height>
+    <width>1228</width>
+    <height>916</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,582 +15,609 @@
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="groupBox_2">
-       <property name="title">
-        <string>Basic Flight Control</string>
+    <widget class="QSplitter" name="splitter_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QWidget" name="">
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMaximumSize</enum>
        </property>
-       <layout class="QHBoxLayout" name="horizontalLayout_3">
-        <item>
-         <layout class="QGridLayout" name="gridLayout_3">
-          <item row="1" column="1">
-           <widget class="QComboBox" name="flightModeCombo">
-            <property name="minimumSize">
-             <size>
-              <width>150</width>
-              <height>0</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>150</width>
-              <height>16777215</height>
-             </size>
-            </property>
-            <property name="toolTip">
-             <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select what flightmode to use:&lt;/p&gt;&lt;p&gt; * Safe prevents crashing&lt;/p&gt;&lt;p&gt; * Crazy does not prevent crashing :)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-            </property>
-            <property name="editable">
-             <bool>false</bool>
-            </property>
-            <property name="currentIndex">
-             <number>0</number>
-            </property>
-            <item>
-             <property name="text">
-              <string>Normal</string>
-             </property>
+       <item>
+        <widget class="QGroupBox" name="groupBox_2">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>320</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>320</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="title">
+          <string>Basic Flight Control</string>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_3">
+          <item>
+           <layout class="QGridLayout" name="gridLayout_3">
+            <item row="1" column="1">
+             <widget class="QComboBox" name="flightModeCombo">
+              <property name="minimumSize">
+               <size>
+                <width>150</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="maximumSize">
+               <size>
+                <width>150</width>
+                <height>16777215</height>
+               </size>
+              </property>
+              <property name="toolTip">
+               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select what flightmode to use:&lt;/p&gt;&lt;p&gt; * Safe prevents crashing&lt;/p&gt;&lt;p&gt; * Crazy does not prevent crashing :)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+              </property>
+              <property name="editable">
+               <bool>false</bool>
+              </property>
+              <property name="currentIndex">
+               <number>0</number>
+              </property>
+              <item>
+               <property name="text">
+                <string>Normal</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>Advanced</string>
+               </property>
+              </item>
+             </widget>
             </item>
-            <item>
-             <property name="text">
-              <string>Advanced</string>
-             </property>
+            <item row="0" column="1">
+             <spacer name="verticalSpacer_3">
+              <property name="orientation">
+               <enum>Qt::Vertical</enum>
+              </property>
+              <property name="sizeType">
+               <enum>QSizePolicy::Maximum</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>0</width>
+                <height>0</height>
+               </size>
+              </property>
+             </spacer>
             </item>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <spacer name="verticalSpacer_3">
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-            <property name="sizeType">
-             <enum>QSizePolicy::Maximum</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>0</width>
-              <height>0</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item row="2" column="0">
-           <widget class="QLabel" name="label_5">
-            <property name="text">
-             <string>Thrust mode</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="1">
-           <widget class="QComboBox" name="thrustModeCombo">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <item>
-             <property name="text">
-              <string>Linear</string>
-             </property>
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_5">
+              <property name="text">
+               <string>Thrust mode</string>
+              </property>
+             </widget>
             </item>
-            <item>
-             <property name="text">
-              <string>Quadratic</string>
-             </property>
+            <item row="2" column="1">
+             <widget class="QComboBox" name="thrustModeCombo">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <item>
+               <property name="text">
+                <string>Linear</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>Quadratic</string>
+               </property>
+              </item>
+             </widget>
             </item>
-           </widget>
-          </item>
-          <item row="3" column="0">
-           <widget class="QLabel" name="label_2">
-            <property name="text">
-             <string>Roll Trim</string>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="1">
-           <widget class="QDoubleSpinBox" name="targetCalRoll">
-            <property name="minimum">
-             <double>-20.000000000000000</double>
-            </property>
-            <property name="maximum">
-             <double>20.000000000000000</double>
-            </property>
-            <property name="singleStep">
-             <double>0.200000000000000</double>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="1">
-           <widget class="QDoubleSpinBox" name="targetCalPitch">
-            <property name="minimum">
-             <double>-20.000000000000000</double>
-            </property>
-            <property name="maximum">
-             <double>20.000000000000000</double>
-            </property>
-            <property name="singleStep">
-             <double>0.200000000000000</double>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="0">
-           <widget class="QLabel" name="label_3">
-            <property name="text">
-             <string>Pitch Trim</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_4">
-            <property name="minimumSize">
-             <size>
-              <width>100</width>
-              <height>0</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Flight mode</string>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="1">
-           <widget class="QCheckBox" name="crazyflieXModeCheckbox">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="text">
-             <string>Crazyflie X-mode</string>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="0">
-           <widget class="QCheckBox" name="clientXModeCheckbox">
-            <property name="text">
-             <string>Client X-mode</string>
-            </property>
-           </widget>
-          </item>
-          <item row="6" column="0">
-           <widget class="QRadioButton" name="angularPidRadioButton">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="text">
-             <string>Attitide control</string>
-            </property>
-            <property name="checked">
-             <bool>true</bool>
-            </property>
-           </widget>
-          </item>
-          <item row="6" column="1">
-           <widget class="QRadioButton" name="ratePidRadioButton">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="text">
-             <string>Rate control</string>
-            </property>
-           </widget>
+            <item row="3" column="0">
+             <widget class="QLabel" name="label_2">
+              <property name="text">
+               <string>Roll Trim</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="1">
+             <widget class="QDoubleSpinBox" name="targetCalRoll">
+              <property name="minimum">
+               <double>-20.000000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>20.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.200000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="1">
+             <widget class="QDoubleSpinBox" name="targetCalPitch">
+              <property name="minimum">
+               <double>-20.000000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>20.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.200000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0">
+             <widget class="QLabel" name="label_3">
+              <property name="text">
+               <string>Pitch Trim</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="label_4">
+              <property name="minimumSize">
+               <size>
+                <width>100</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="text">
+               <string>Flight mode</string>
+              </property>
+             </widget>
+            </item>
+            <item row="5" column="1">
+             <widget class="QCheckBox" name="crazyflieXModeCheckbox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="text">
+               <string>Crazyflie X-mode</string>
+              </property>
+             </widget>
+            </item>
+            <item row="5" column="0">
+             <widget class="QCheckBox" name="clientXModeCheckbox">
+              <property name="text">
+               <string>Client X-mode</string>
+              </property>
+             </widget>
+            </item>
+            <item row="6" column="0">
+             <widget class="QRadioButton" name="angularPidRadioButton">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="text">
+               <string>Attitide control</string>
+              </property>
+              <property name="checked">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="6" column="1">
+             <widget class="QRadioButton" name="ratePidRadioButton">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="text">
+               <string>Rate control</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
           </item>
          </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="groupBox_3">
-       <property name="title">
-        <string>Advanced Flight Control</string>
-       </property>
-       <layout class="QHBoxLayout" name="horizontalLayout_4">
-        <item>
-         <layout class="QGridLayout" name="gridLayout_4">
-          <item row="2" column="0">
-           <widget class="QLabel" name="label_9">
-            <property name="text">
-             <string>Max thrust (%)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_7">
-            <property name="layoutDirection">
-             <enum>Qt::LeftToRight</enum>
-            </property>
-            <property name="text">
-             <string>Max angle/rate</string>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="0">
-           <widget class="QLabel" name="label">
-            <property name="text">
-             <string>Min thrust (%)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="0">
-           <widget class="QLabel" name="label_26">
-            <property name="text">
-             <string>Thrust lowering slewrate (%/sec)</string>
-            </property>
-            <property name="wordWrap">
-             <bool>true</bool>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="0">
-           <widget class="QLabel" name="label_31">
-            <property name="text">
-             <string>SlewLimit (%)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_32">
-            <property name="text">
-             <string>Max Yaw angle/rate</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="1">
-           <widget class="QDoubleSpinBox" name="maxThrust"/>
-          </item>
-          <item row="3" column="1">
-           <widget class="QDoubleSpinBox" name="minThrust"/>
-          </item>
-          <item row="4" column="1">
-           <widget class="QDoubleSpinBox" name="slewEnableLimit"/>
-          </item>
-          <item row="5" column="1">
-           <widget class="QDoubleSpinBox" name="thrustLoweringSlewRateLimit"/>
-          </item>
-          <item row="1" column="1">
-           <widget class="QSpinBox" name="maxYawRate">
-            <property name="minimum">
-             <number>0</number>
-            </property>
-            <property name="maximum">
-             <number>500</number>
-            </property>
-            <property name="value">
-             <number>0</number>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QSpinBox" name="maxAngle">
-            <property name="minimum">
-             <number>0</number>
-            </property>
-            <property name="maximum">
-             <number>500</number>
-            </property>
-            <property name="value">
-             <number>0</number>
-            </property>
-           </widget>
+        </widget>
+       </item>
+       <item>
+        <widget class="QGroupBox" name="groupBox_3">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>320</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>320</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="title">
+          <string>Advanced Flight Control</string>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_4">
+          <item>
+           <layout class="QGridLayout" name="gridLayout_4">
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_9">
+              <property name="text">
+               <string>Max thrust (%)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="0">
+             <widget class="QLabel" name="label_7">
+              <property name="layoutDirection">
+               <enum>Qt::LeftToRight</enum>
+              </property>
+              <property name="text">
+               <string>Max angle/rate</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0">
+             <widget class="QLabel" name="label">
+              <property name="text">
+               <string>Min thrust (%)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="5" column="0">
+             <widget class="QLabel" name="label_26">
+              <property name="text">
+               <string>Thrust lowering slewrate (%/sec)</string>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0">
+             <widget class="QLabel" name="label_31">
+              <property name="text">
+               <string>SlewLimit (%)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="label_32">
+              <property name="text">
+               <string>Max Yaw angle/rate</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <widget class="QDoubleSpinBox" name="maxThrust"/>
+            </item>
+            <item row="3" column="1">
+             <widget class="QDoubleSpinBox" name="minThrust"/>
+            </item>
+            <item row="4" column="1">
+             <widget class="QDoubleSpinBox" name="slewEnableLimit"/>
+            </item>
+            <item row="5" column="1">
+             <widget class="QDoubleSpinBox" name="thrustLoweringSlewRateLimit"/>
+            </item>
+            <item row="1" column="1">
+             <widget class="QSpinBox" name="maxYawRate">
+              <property name="minimum">
+               <number>0</number>
+              </property>
+              <property name="maximum">
+               <number>500</number>
+              </property>
+              <property name="value">
+               <number>0</number>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <widget class="QSpinBox" name="maxAngle">
+              <property name="minimum">
+               <number>0</number>
+              </property>
+              <property name="maximum">
+               <number>500</number>
+              </property>
+              <property name="value">
+               <number>0</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
           </item>
          </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <spacer name="verticalSpacer">
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>403</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout_3">
-     <property name="sizeConstraint">
-      <enum>QLayout::SetDefaultConstraint</enum>
-     </property>
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="title">
-        <string>Flight Data</string>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>403</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="">
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetDefaultConstraint</enum>
        </property>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
+       <item>
+        <widget class="QGroupBox" name="groupBox">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+           <horstretch>2</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="title">
+          <string>Flight Data</string>
+         </property>
          <layout class="QGridLayout" name="gridLayout">
-          <item row="0" column="1">
-           <spacer name="horizontalSpacer">
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>40</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item row="0" column="3">
-           <layout class="QVBoxLayout" name="verticalLayout_4"/>
-          </item>
           <item row="0" column="0">
-           <widget class="QTextEdit" name="textEdit">
-            <property name="documentTitle">
-             <string/>
-            </property>
-            <property name="html">
-             <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-        <item>
-         <layout class="QGridLayout" name="gridLayout_5">
-          <item row="0" column="6">
-           <widget class="QLabel" name="label_6">
-            <property name="text">
-             <string>Thrust</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="9" rowspan="5">
-           <widget class="QProgressBar" name="actualM2">
-            <property name="maximum">
-             <number>65535</number>
-            </property>
-            <property name="value">
-             <number>0</number>
-            </property>
+           <widget class="QSplitter" name="splitter">
             <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
-           </widget>
-          </item>
-          <item row="1" column="10" rowspan="5">
-           <widget class="QProgressBar" name="actualM3">
-            <property name="maximum">
-             <number>65535</number>
-            </property>
-            <property name="value">
-             <number>0</number>
-            </property>
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="2">
-           <widget class="QLineEdit" name="targetASL">
-            <property name="text">
-             <string/>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_16">
-            <property name="text">
-             <string>Thrust</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="2">
-           <widget class="QLineEdit" name="targetThrust"/>
-          </item>
-          <item row="1" column="6" rowspan="5">
-           <widget class="QProgressBar" name="thrustProgress">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Maximum" vsizetype="Expanding">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="sizeIncrement">
-             <size>
-              <width>0</width>
-              <height>0</height>
-             </size>
-            </property>
-            <property name="maximum">
-             <number>65600</number>
-            </property>
-            <property name="value">
-             <number>24</number>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-            <property name="invertedAppearance">
-             <bool>false</bool>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="9">
-           <widget class="QLabel" name="M2label">
-            <property name="text">
-             <string>M2</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="11">
-           <widget class="QLabel" name="M4label">
-            <property name="text">
-             <string>M4</string>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="4">
-           <widget class="QLineEdit" name="actualRoll"/>
-          </item>
-          <item row="2" column="2">
-           <widget class="QLineEdit" name="targetPitch"/>
-          </item>
-          <item row="5" column="0">
-           <widget class="QLabel" name="label_17">
-            <property name="text">
-             <string>ASL</string>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="0">
-           <widget class="QLabel" name="label_12">
-            <property name="text">
-             <string>Roll</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="4">
-           <widget class="QLineEdit" name="actualThrust"/>
-          </item>
-          <item row="1" column="8" rowspan="5">
-           <widget class="QProgressBar" name="actualM1">
-            <property name="maximum">
-             <number>65535</number>
-            </property>
-            <property name="value">
-             <number>0</number>
-            </property>
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="4">
-           <widget class="QLabel" name="label_15">
-            <property name="text">
-             <string>Actual</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="0">
-           <widget class="QLabel" name="label_11">
-            <property name="text">
-             <string>Pitch</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="2">
-           <widget class="QLabel" name="label_14">
-            <property name="text">
-             <string>Target</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="4">
-           <widget class="QLineEdit" name="actualASL">
-            <property name="text">
-             <string/>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="2">
-           <widget class="QLineEdit" name="targetRoll"/>
-          </item>
-          <item row="4" column="4">
-           <widget class="QLineEdit" name="actualYaw"/>
-          </item>
-          <item row="4" column="2">
-           <widget class="QLineEdit" name="targetYaw"/>
-          </item>
-          <item row="2" column="4">
-           <widget class="QLineEdit" name="actualPitch"/>
-          </item>
-          <item row="4" column="0">
-           <widget class="QLabel" name="label_13">
-            <property name="text">
-             <string>Yaw</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="12" rowspan="6">
-           <layout class="QGridLayout" name="gridLayout_7"/>
-          </item>
-          <item row="1" column="11" rowspan="5">
-           <widget class="QProgressBar" name="actualM4">
-            <property name="maximum">
-             <number>65535</number>
-            </property>
-            <property name="value">
-             <number>0</number>
-            </property>
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="8">
-           <widget class="QLabel" name="M1label">
-            <property name="text">
-             <string>M1</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="10">
-           <widget class="QLabel" name="M3label">
-            <property name="text">
-             <string>M3</string>
-            </property>
-           </widget>
-          </item>
-          <item row="6" column="6" colspan="6">
-           <widget class="QLabel" name="emergency_stop_label">
-            <property name="text">
-             <string/>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
+            <widget class="QWidget" name="layoutWidget">
+             <layout class="QVBoxLayout" name="verticalLayout_4"/>
+            </widget>
+            <widget class="QWidget" name="">
+             <layout class="QGridLayout" name="gridLayout_5" rowstretch="0,3,3,3,3,3" rowminimumheight="1,1,1,1,1,1">
+              <property name="sizeConstraint">
+               <enum>QLayout::SetMinimumSize</enum>
+              </property>
+              <property name="horizontalSpacing">
+               <number>6</number>
+              </property>
+              <property name="verticalSpacing">
+               <number>0</number>
+              </property>
+              <item row="5" column="0">
+               <widget class="QLabel" name="label_17">
+                <property name="text">
+                 <string>ASL</string>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="4">
+               <widget class="QLineEdit" name="actualPitch"/>
+              </item>
+              <item row="1" column="8" rowspan="5">
+               <widget class="QProgressBar" name="actualM1">
+                <property name="maximum">
+                 <number>65535</number>
+                </property>
+                <property name="value">
+                 <number>0</number>
+                </property>
+                <property name="orientation">
+                 <enum>Qt::Vertical</enum>
+                </property>
+               </widget>
+              </item>
+              <item row="1" column="10" rowspan="5">
+               <widget class="QProgressBar" name="actualM3">
+                <property name="maximum">
+                 <number>65535</number>
+                </property>
+                <property name="value">
+                 <number>0</number>
+                </property>
+                <property name="orientation">
+                 <enum>Qt::Vertical</enum>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="6">
+               <widget class="QLabel" name="label_6">
+                <property name="text">
+                 <string>Thrust</string>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="5" column="4">
+               <widget class="QLineEdit" name="actualASL">
+                <property name="text">
+                 <string/>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="2">
+               <widget class="QLabel" name="label_14">
+                <property name="text">
+                 <string>Target</string>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="2">
+               <widget class="QLineEdit" name="targetRoll"/>
+              </item>
+              <item row="1" column="6" rowspan="5">
+               <widget class="QProgressBar" name="thrustProgress">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Maximum" vsizetype="Expanding">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="sizeIncrement">
+                 <size>
+                  <width>0</width>
+                  <height>0</height>
+                 </size>
+                </property>
+                <property name="maximum">
+                 <number>65600</number>
+                </property>
+                <property name="value">
+                 <number>24</number>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+                <property name="orientation">
+                 <enum>Qt::Vertical</enum>
+                </property>
+                <property name="invertedAppearance">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="1" column="0">
+               <widget class="QLabel" name="label_16">
+                <property name="text">
+                 <string>Thrust</string>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="8">
+               <widget class="QLabel" name="M1label">
+                <property name="text">
+                 <string>M1</string>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="0">
+               <widget class="QLabel" name="label_12">
+                <property name="text">
+                 <string>Roll</string>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="10">
+               <widget class="QLabel" name="M3label">
+                <property name="text">
+                 <string>M3</string>
+                </property>
+               </widget>
+              </item>
+              <item row="4" column="2">
+               <widget class="QLineEdit" name="targetYaw"/>
+              </item>
+              <item row="1" column="9" rowspan="5">
+               <widget class="QProgressBar" name="actualM2">
+                <property name="maximum">
+                 <number>65535</number>
+                </property>
+                <property name="value">
+                 <number>0</number>
+                </property>
+                <property name="orientation">
+                 <enum>Qt::Vertical</enum>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="2">
+               <widget class="QLineEdit" name="targetPitch"/>
+              </item>
+              <item row="2" column="0">
+               <widget class="QLabel" name="label_11">
+                <property name="text">
+                 <string>Pitch</string>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="4">
+               <widget class="QLabel" name="label_15">
+                <property name="text">
+                 <string>Actual</string>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="4" column="4">
+               <widget class="QLineEdit" name="actualYaw"/>
+              </item>
+              <item row="0" column="9">
+               <widget class="QLabel" name="M2label">
+                <property name="text">
+                 <string>M2</string>
+                </property>
+               </widget>
+              </item>
+              <item row="1" column="11" rowspan="5">
+               <widget class="QProgressBar" name="actualM4">
+                <property name="maximum">
+                 <number>65535</number>
+                </property>
+                <property name="value">
+                 <number>0</number>
+                </property>
+                <property name="orientation">
+                 <enum>Qt::Vertical</enum>
+                </property>
+               </widget>
+              </item>
+              <item row="1" column="2">
+               <widget class="QLineEdit" name="targetThrust"/>
+              </item>
+              <item row="0" column="11">
+               <widget class="QLabel" name="M4label">
+                <property name="text">
+                 <string>M4</string>
+                </property>
+               </widget>
+              </item>
+              <item row="1" column="4">
+               <widget class="QLineEdit" name="actualThrust"/>
+              </item>
+              <item row="0" column="12" rowspan="6">
+               <layout class="QGridLayout" name="gridLayout_7"/>
+              </item>
+              <item row="4" column="0">
+               <widget class="QLabel" name="label_13">
+                <property name="text">
+                 <string>Yaw</string>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="4">
+               <widget class="QLineEdit" name="actualRoll"/>
+              </item>
+              <item row="5" column="2">
+               <widget class="QLineEdit" name="targetASL">
+                <property name="text">
+                 <string/>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </widget>
            </widget>
           </item>
          </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
    </item>
   </layout>
  </widget>
diff --git a/lib/cfclient/ui/widgets/ai.py b/lib/cfclient/ui/widgets/ai.py
index a50c399..39a975f 100644
--- a/lib/cfclient/ui/widgets/ai.py
+++ b/lib/cfclient/ui/widgets/ai.py
@@ -43,6 +43,9 @@ class AttitudeIndicator(QtGui.QWidget):
 
         self.roll = 0
         self.pitch = 0
+        self.hover = False
+        self.hoverASL = 0.0
+        self.hoverTargetASL = 0.0
 
         self.setMinimumSize(30, 30)
         # self.setMaximumSize(240,240)
@@ -54,6 +57,15 @@ class AttitudeIndicator(QtGui.QWidget):
     def setPitch(self, pitch):
         self.pitch = pitch
         self.repaint()
+        
+    def setHover(self, target):        
+        self.hoverTargetASL = target
+        self.hover = target>0
+        self.repaint()
+        
+    def setBaro(self, asl):
+        self.hoverASL = asl;
+        self.repaint()
 
     def setRollPitch(self, roll, pitch):
         self.roll = roll
@@ -127,6 +139,49 @@ class AttitudeIndicator(QtGui.QWidget):
         qp.setBrush(QtGui.QColor(0, 0, 0))
         qp.setPen(pen)
         qp.drawLine(0, h / 2, w, h / 2)
+        
+        
+        
+        # Draw Hover vs Target
+        
+        qp.setWorldMatrixEnabled(False)
+        
+        pen = QtGui.QPen(QtGui.QColor(255, 255, 255), 2,
+                         QtCore.Qt.SolidLine)
+        qp.setBrush(QtGui.QColor(255, 255, 255))
+        qp.setPen(pen)
+        fh = max(7,h/50)
+        font = QtGui.QFont('Sans', fh, QtGui.QFont.Light)
+        qp.setFont(font)
+        qp.resetTransform()
+      
+        
+
+        
+        qp.translate(0,h/2)      
+        if not self.hover:  
+            qp.drawText(w-fh*10, fh/2, str(round(self.hoverASL,2)))  # asl
+               
+        
+        if self.hover:
+            qp.drawText(w-fh*10, fh/2, str(round(self.hoverTargetASL,2)))  # target asl (center)    
+            diff = round(self.hoverASL-self.hoverTargetASL,2)
+            pos_y = -h/6*diff
+            
+            # cap to +- 2.8m
+            if diff<-2.8:
+                pos_y = -h/6*-2.8
+            elif diff>2.8:
+                pos_y= -h/6*2.8
+            else:
+                pos_y = -h/6*diff
+            qp.drawText(w-fh*3.8, pos_y+fh/2, str(diff)) # difference from target (moves up and down +- 2.8m)        
+            qp.drawLine(w-fh*4.5,0,w-fh*4.5,pos_y) # vertical line     
+            qp.drawLine(w-fh*4.7,0,w-fh*4.5,0) # left horizontal line
+            qp.drawLine(w-fh*4.2,pos_y,w-fh*4.5,pos_y) #right horizontal line
+        
+        
+        
 
 
 if __name__ == "__main__":
@@ -142,7 +197,13 @@ if __name__ == "__main__":
 
         def updateRoll(self, roll):
             self.wid.setRoll((roll / 10.0) - 180.0)
-
+        
+        def updateTarget(self, target):
+            self.wid.setHover(500+target/10.)
+        def updateBaro(self, asl):
+            self.wid.setBaro(500+asl/10.)           
+        
+        
         def initUI(self):
 
             vbox = QtGui.QVBoxLayout()
@@ -151,9 +212,9 @@ if __name__ == "__main__":
             sld.setFocusPolicy(QtCore.Qt.NoFocus)
             sld.setRange(0, 3600)
             sld.setValue(1800)
-
             vbox.addWidget(sld)
-
+            
+            
             self.wid = AttitudeIndicator()
 
             sld.valueChanged[int].connect(self.updateRoll)
@@ -166,15 +227,29 @@ if __name__ == "__main__":
             sldPitch.setFocusPolicy(QtCore.Qt.NoFocus)
             sldPitch.setRange(0, 180)
             sldPitch.setValue(90)
-
             sldPitch.valueChanged[int].connect(self.updatePitch)
-
             hbox.addWidget(sldPitch)
+            
+            sldASL = QtGui.QSlider(QtCore.Qt.Vertical, self)
+            sldASL.setFocusPolicy(QtCore.Qt.NoFocus)
+            sldASL.setRange(-200, 200)
+            sldASL.setValue(0)
+            sldASL.valueChanged[int].connect(self.updateBaro)
+            
+            sldT = QtGui.QSlider(QtCore.Qt.Vertical, self)
+            sldT.setFocusPolicy(QtCore.Qt.NoFocus)
+            sldT.setRange(-200, 200)
+            sldT.setValue(0)
+            sldT.valueChanged[int].connect(self.updateTarget)
+            
+            hbox.addWidget(sldT)  
+            hbox.addWidget(sldASL)
+                      
 
             self.setLayout(hbox)
 
-            self.setGeometry(300, 300, 210, 210)
-            self.setWindowTitle('Atitude Indicator')
+            self.setGeometry(50, 50, 510, 510)
+            self.setWindowTitle('Attitude Indicator')
             self.show()
 
         def changeValue(self, value):
diff --git a/lib/cfclient/ui/widgets/plotwidget.py b/lib/cfclient/ui/widgets/plotwidget.py
index fd9cdc3..537b342 100644
--- a/lib/cfclient/ui/widgets/plotwidget.py
+++ b/lib/cfclient/ui/widgets/plotwidget.py
@@ -108,11 +108,11 @@ class PlotWidget(QtGui.QWidget, plot_widget_class):
         self.zoomOutBtn.clicked.connect(self.zoomOut)
 
     def zoomIn(self):
-        self.zoom = self.zoom + 0.2
+        self.zoom = self.zoom * 1.2
         self.fpw.setZoom(self.zoom)
 
     def zoomOut(self):
-        self.zoom = self.zoom - 0.2
+        self.zoom = self.zoom / 1.2
         if self.zoom < 0.1:
             self.zoom = 0.1
         self.fpw.setZoom(self.zoom)
diff --git a/lib/cflib/crazyflie/commander.py b/lib/cflib/crazyflie/commander.py
index 4d86e15..8d7757e 100644
--- a/lib/cflib/crazyflie/commander.py
+++ b/lib/cflib/crazyflie/commander.py
@@ -71,6 +71,4 @@ class Commander():
         pk = CRTPPacket()
         pk.port = CRTPPort.COMMANDER
         pk.data = struct.pack('<fffH?', roll, -pitch, yaw, thrust, hover)
-        if hover:
-            print "-->",hover,thrust
         self._cf.send_packet(pk)
-- 
GitLab