Index: trunk/include/FlairCore/ConnectedSocket.h
===================================================================
--- trunk/include/FlairCore/ConnectedSocket.h	(revision 16)
+++ trunk/include/FlairCore/ConnectedSocket.h	(revision 25)
@@ -100,5 +100,5 @@
 
   //!! See Socket.h for a more generic implementation of network/host endianness
-  //conversion
+  // conversion
   virtual uint16_t NetworkToHost16(uint16_t data) = 0;
   virtual uint16_t HostToNetwork16(uint16_t data) = 0;
Index: trunk/include/FlairCore/IODevice.h
===================================================================
--- trunk/include/FlairCore/IODevice.h	(revision 16)
+++ trunk/include/FlairCore/IODevice.h	(revision 25)
@@ -114,21 +114,20 @@
   virtual DataType const &GetOutputDataType() const;
 
-protected:
-  /*!
-  * \brief Process the childs of type IODevice, and log if needed
-  *
-  * This method must be called after computing datas;
-  * generally at the end of the reimplemented UpdateFrom or after acquiring
-  *datas in case of a sensor. \n
-  * It will call UpdateFrom methods of each child of type IODevice,
-  * and log all datas (this IODevice and its childs)
-  * if logging is enabled (see SetDataToLog(), AddDeviceToLog(),
-  * FrameworkManager::StartLog and FrameworkManager::AddDeviceToLog). \n
-  * If a thread is waiting on this IODevice (see Thread::WaitUpdate), it will be
-  *resumed.
-  *
-  * \param data data to process
-  */
-  void ProcessUpdate(io_data *data);
+            Time lastUpdate;
+        protected:
+            /*!
+            * \brief Process the childs of type IODevice, and log if needed
+            *
+            * This method must be called after computing datas;
+            * generally at the end of the reimplemented UpdateFrom or after acquiring datas in case of a sensor. \n
+            * It will call UpdateFrom methods of each child of type IODevice,
+            * and log all datas (this IODevice and its childs)
+            * if logging is enabled (see SetDataToLog(), AddDeviceToLog(),
+            * FrameworkManager::StartLog and FrameworkManager::AddDeviceToLog). \n
+            * If a thread is waiting on this IODevice (see Thread::WaitUpdate), it will be resumed.
+            *
+            * \param data data to process
+            */
+            void ProcessUpdate(io_data* data);
 
 private:
Index: trunk/include/FlairMeta/MetaDualShock3.h
===================================================================
--- trunk/include/FlairMeta/MetaDualShock3.h	(revision 16)
+++ trunk/include/FlairMeta/MetaDualShock3.h	(revision 25)
@@ -14,5 +14,6 @@
 #define METADUALSHOCK3_H
 
-#include <TargetEthController.h>
+#include <TargetController.h>
+#include <IODevice.h>
 
 namespace flair {
@@ -35,10 +36,10 @@
 * \brief Classe intégrant la manette MetaDualShock3
 */
-class MetaDualShock3 : public sensor::TargetEthController {
+class MetaDualShock3 : public core::IODevice {
   friend class ::MetaDualShock3_impl;
 
 public:
   MetaDualShock3(core::FrameworkManager *parent, std::string name,
-                 uint16_t port, uint8_t priority);
+                 sensor::TargetController *controller);
   ~MetaDualShock3();
   core::AhrsData *GetReferenceOrientation(void) const;
@@ -66,7 +67,9 @@
   void FlashLed(unsigned int ledId, uint8_t on_timeout, uint8_t off_timeout);
 
-private:
-  class MetaDualShock3_impl *pimpl_;
-};
+        private:
+            class MetaDualShock3_impl* pimpl_;
+            void UpdateFrom(const flair::core::io_data *data);
+            sensor::TargetController *controller;
+    };
 } // end namespace meta
 } // end namespace flair
Index: trunk/include/FlairMeta/UavStateMachine.h
===================================================================
--- trunk/include/FlairMeta/UavStateMachine.h	(revision 16)
+++ trunk/include/FlairMeta/UavStateMachine.h	(revision 25)
@@ -101,6 +101,6 @@
   };
 
-  UavStateMachine(meta::Uav *uav, uint16_t ds3Port = 20000);
-  ~UavStateMachine();
+        UavStateMachine(meta::Uav* uav, sensor::TargetController* controller);
+        ~UavStateMachine();
 
   const core::Quaternion &GetCurrentQuaternion(void) const;
@@ -110,12 +110,13 @@
   const meta::Uav *GetUav(void) const;
 
-  void Land(void);
-  void TakeOff(void);
-  void EmergencyStop(void);
-  //! Used to signal an event
-  /*!
-      \param event the event which occured
-  */
-  virtual void SignalEvent(Event_t event);
+        void Land(void);
+        void EmergencyLand(void);
+        void TakeOff(void);
+        void EmergencyStop(void);
+        //! Used to signal an event
+        /*!
+            \param event the event which occured
+        */
+        virtual void SignalEvent(Event_t event);
 
   virtual const core::AhrsData *GetOrientation(void) const;
@@ -262,4 +263,5 @@
 
   meta::Uav *uav;
+  sensor::TargetController *controller;
 
   core::Quaternion currentQuaternion;
@@ -289,5 +291,7 @@
   bool flagBatteryLow;
   bool flagConnectionLost;
+  bool flagCriticalSensorLost;
   bool flagZTrajectoryFinished;
+  bool safeToFly;
   filter::NestedSat *uRoll, *uPitch;
   filter::Pid *uYaw;
Index: trunk/include/FlairSensorActuator/TargetEthController.h
===================================================================
--- trunk/include/FlairSensorActuator/TargetEthController.h	(revision 16)
+++ trunk/include/FlairSensorActuator/TargetEthController.h	(revision 25)
@@ -62,6 +62,6 @@
 
   bool IsDataFrameReady();
-  void AcquireAxisData(core::cvmatrix &axis); // responsible for getting the
-                                              // axis data from the hardware
+  void AcquireAxisData(core::cvmatrix &axis);     // responsible for getting the
+                                                  // axis data from the hardware
   void AcquireButtonData(core::cvmatrix &button); // responsible for getting the
                                                   // button data from the
