Index: trunk/include/FlairSensorActuator/AfroBldc.h
===================================================================
--- trunk/include/FlairSensorActuator/AfroBldc.h	(revision 4)
+++ trunk/include/FlairSensorActuator/AfroBldc.h	(revision 4)
@@ -0,0 +1,100 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file AfroBldc.h
+ * \brief Class for Mikrokopter's blctrlv2
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2015/06/15
+ * \version 4.0
+ */
+
+#ifndef AFROBLDC_H
+#define AFROBLDC_H
+
+#include "Bldc.h"
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class I2cPort;
+    }
+    namespace sensor
+    {
+        class BatteryMonitor;
+    }
+}
+
+class AfroBldc_impl;
+
+namespace flair
+{
+namespace actuator
+{
+    /*! \class AfroBldc
+    *
+    * \brief Class for Mikrokopter's blctrlv2
+    *
+    * blctrlv2 drivers can also monitor the battery level. See GetBatteryMonitor().
+    */
+    class AfroBldc : public Bldc
+    {
+        friend class ::AfroBldc_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a AfroBldc.
+            *
+            * \param parent parent
+            * \param layout layout
+            * \param name name
+            * \param motors_count number of motors
+            * \param i2cport I2cPort
+            */
+            AfroBldc(const core::IODevice* parent,gui::Layout* layout,std::string name,uint8_t motors_count,core::I2cPort* i2cport);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~AfroBldc();
+
+            /*!
+            * \brief Has speed measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has speed measurement
+            */
+            bool HasSpeedMeasurement(void) const{return false;};
+
+            /*!
+            * \brief Has current measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has current measurement
+            */
+            bool HasCurrentMeasurement(void) const{return false;};
+
+        private:
+            /*!
+            * \brief Set motors values
+            *
+            * Reimplemented from Bldc. \n
+            * Values size must be the same as MotorsCount()
+            *
+            * \param values motor values
+            */
+            void SetMotors(float* values);
+
+            class AfroBldc_impl* pimpl_;
+    };
+} // end namespace actuator
+} // end namespace flair
+#endif // AFROBLDC_H
Index: trunk/include/FlairSensorActuator/BatteryMonitor.h
===================================================================
--- trunk/include/FlairSensorActuator/BatteryMonitor.h	(revision 4)
+++ trunk/include/FlairSensorActuator/BatteryMonitor.h	(revision 4)
@@ -0,0 +1,89 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file BatteryMonitor.h
+ * \brief Base class for battery monitor
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/01/24
+ * \version 4.0
+ */
+
+#ifndef BATTERYMONITOR_H
+#define BATTERYMONITOR_H
+
+#include <GroupBox.h>
+
+namespace flair
+{
+    namespace gui
+    {
+        class LayoutPosition;
+        class Label;
+        class DoubleSpinBox;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+
+    /*! \class BatteryMonitor
+    *
+    * \brief Base class for battery monitor
+    */
+
+    class BatteryMonitor : public gui::GroupBox
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a BatteryMonitor at given position.
+            *
+            * \param position position
+            * \param name name
+            */
+            BatteryMonitor(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~BatteryMonitor();
+
+            /*!
+            * \brief Is batteru low?
+            *
+            * \return true if battery is below threshold
+            *
+            */
+            bool IsBatteryLow(void) const;
+
+            /*!
+            * \brief Set battery value
+            *
+            * \param battery value
+            *
+            */
+            void SetBatteryValue(float value);
+
+            /*!
+            * \brief Get battery voltage
+            *
+            * \return battery voltage
+            *
+            */
+            float GetVoltage(void) const;
+
+        private:
+            float batteryvalue;
+            gui::DoubleSpinBox *battery_thresh;
+            gui::Label *battery;
+    };
+} // end namespace sensor
+} // end namespace flair
+
+#endif // BATTERYMONITOR_H
Index: trunk/include/FlairSensorActuator/BlCtrlV2.h
===================================================================
--- trunk/include/FlairSensorActuator/BlCtrlV2.h	(revision 4)
+++ trunk/include/FlairSensorActuator/BlCtrlV2.h	(revision 4)
@@ -0,0 +1,107 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file BlCtrlV2.h
+ * \brief Class for Mikrokopter's blctrlv2
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/09/13
+ * \version 4.0
+ */
+
+#ifndef BLCTRLV2_H
+#define BLCTRLV2_H
+
+#include "Bldc.h"
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class I2cPort;
+    }
+    namespace sensor
+    {
+        class BatteryMonitor;
+    }
+}
+
+class BlCtrlV2_impl;
+
+namespace flair
+{
+namespace actuator
+{
+    /*! \class BlCtrlV2
+    *
+    * \brief Class for Mikrokopter's blctrlv2
+    *
+    * blctrlv2 drivers can also monitor the battery level. See GetBatteryMonitor().
+    */
+    class BlCtrlV2 : public Bldc
+    {
+        friend class ::BlCtrlV2_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a BlCtrlV2.
+            *
+            * \param parent parent
+            * \param layout layout
+            * \param name name
+            * \param motors_count number of motors
+            * \param i2cport I2cPort
+            */
+            BlCtrlV2(const core::IODevice* parent,gui::Layout* layout,std::string name,uint8_t motors_count,core::I2cPort* i2cport);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~BlCtrlV2();
+
+            /*!
+            * \brief Get battery monitor
+            *
+            * \return BatteryMonitor
+            */
+            sensor::BatteryMonitor* GetBatteryMonitor(void) const;
+
+            /*!
+            * \brief Has speed measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has speed measurement
+            */
+            bool HasSpeedMeasurement(void) const{return true;};
+
+            /*!
+            * \brief Has current measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has current measurement
+            */
+            bool HasCurrentMeasurement(void) const{return true;};
+
+        private:
+            /*!
+            * \brief Set motors values
+            *
+            * Reimplemented from Bldc. \n
+            * Values size must be the same as MotorsCount()
+            *
+            * \param values motor values
+            */
+            void SetMotors(float* values);
+
+            class BlCtrlV2_impl* pimpl_;
+    };
+} // end namespace actuator
+} // end namespace flair
+#endif // BLCTRLV2_H
Index: trunk/include/FlairSensorActuator/BlCtrlV2_x4_speed.h
===================================================================
--- trunk/include/FlairSensorActuator/BlCtrlV2_x4_speed.h	(revision 4)
+++ trunk/include/FlairSensorActuator/BlCtrlV2_x4_speed.h	(revision 4)
@@ -0,0 +1,119 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2013/04/29
+//  filename:   BlCtrlV2_x4_speed.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    objet integrant les moteurs i2c, controle en vitesse
+//
+//
+/*********************************************************************/
+
+
+#ifndef BLCTRLV2_X4_SPEED_H
+#define BLCTRLV2_X4_SPEED_H
+
+#include <IODevice.h>
+#include <Thread.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+        class FrameworkManager;
+        class I2cPort;
+
+    }
+    namespace gui
+    {
+        class TabWidget;
+        class Tab;
+        class SpinBox;
+        class DoubleSpinBox;
+        class ComboBox;
+        class PushButton;
+        class GroupBox;
+    }
+}
+
+namespace flair
+{
+namespace actuator
+{
+    class BlCtrlV2_x4_speed : public core::Thread,public core::IODevice
+    {
+
+        public:
+            BlCtrlV2_x4_speed(core::FrameworkManager* parent,std::string name,core::I2cPort* i2cport,uint8_t base_address,uint8_t priority);
+            ~BlCtrlV2_x4_speed();
+            void UseDefaultPlot(void);
+            void LockUserInterface(void);
+            void UnlockUserInterface(void);
+            void SetEnabled(bool status);
+            void SetUroll(float value);
+            void SetUpitch(float value);
+            void SetUyaw(float value);
+            void SetUgaz(float value);
+            void SetRollTrim(float value);
+            void SetPitchTrim(float value);
+            void SetYawTrim(float value);
+            void SetGazTrim(float value);
+            float TrimValue(void);
+            int StartValue(void);
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(core::io_data *data){};
+            void WriteValue(uint16_t value);
+            float GetSpeed(void);
+            void StartTest(void);
+            void StopTest(void);
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+            void Update(void);
+            gui::Tab* main_tab;
+            gui::TabWidget* tab;
+            gui::GroupBox* reglages_groupbox;
+            gui::SpinBox *min,*max,*test;
+            gui::PushButton *button_avg,*button_avd,*button_arg,*button_ard;
+            gui::ComboBox *av_g,*av_d,*ar_g,*ar_d,*pas;
+            gui::DoubleSpinBox *trim,*kp,*ki;
+            gui::SpinBox *start_value,*poles;
+            core::Time start_time,flight_start_time;
+            int time_sec;
+            float speed_av_g,speed_av_d,speed_ar_g,speed_ar_d;
+            float int_av_g,int_av_d,int_ar_g,int_ar_d;
+
+            //matrix
+            core::cvmatrix *input;
+            core::cvmatrix *output;
+
+            int tested_motor;
+            core::I2cPort* i2cport;
+            uint8_t slave_address;
+
+            bool enabled;
+
+            uint16_t SatPWM(float vel_cons,uint16_t min,uint16_t max);
+    };
+} // end namespace actuator
+} // end namespace flair
+#endif // BLCTRLV2_X4_SPEED_H
Index: trunk/include/FlairSensorActuator/Bldc.h
===================================================================
--- trunk/include/FlairSensorActuator/Bldc.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Bldc.h	(revision 4)
@@ -0,0 +1,191 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Bldc.h
+ * \brief Base class for brushless motors drivers
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/11/14
+ * \version 4.0
+ */
+
+#ifndef BLDC_H
+#define BLDC_H
+
+#include <IODevice.h>
+#include <stdint.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class Layout;
+        class TabWidget;
+    }
+}
+
+class Bldc_impl;
+
+namespace flair
+{
+namespace actuator
+{
+    /*! \class Bldc
+    *
+    * \brief Base class for brushless motors drivers
+    */
+    class Bldc : public core::IODevice
+    {
+        friend class ::Bldc_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Bldc.
+            *
+            * \param parent parent
+            * \param layout layout
+            * \param name name
+            * \param motors_count number of motors
+            */
+            Bldc(const core::IODevice* parent,gui::Layout* layout,std::string name,uint8_t motors_count);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Bldc. \n
+            * This contructor must only be called for a simulated device.
+            *
+            * \param parent parent
+            * \param name name
+            * \param motors_count number of motors
+            */
+            Bldc(const core::Object* parent,std::string name,uint8_t motors_count);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Bldc();
+
+            /*!
+            * \brief Lock user interface
+            *
+            */
+            void LockUserInterface(void) const;
+
+            /*!
+            * \brief Unlock user interface
+            *
+            */
+            void UnlockUserInterface(void) const;
+
+            /*!
+            * \brief Use default plot
+            *
+            * \param tabwidget TabWidget to draw plots
+            */
+            void UseDefaultPlot(gui::TabWidget* tabwidget);
+
+            /*!
+            * \brief Output from motors
+            *
+            * First column is real speed if available, secund column is current if available
+            *
+            */
+            core::cvmatrix *Output(void) const;
+
+            /*!
+            * \brief Motors count
+            *
+            * \return number of motors
+            */
+            uint8_t MotorsCount(void) const;
+
+            /*!
+            * \brief Enable motors
+            *
+            * \param true to enable all motors
+            */
+            void SetEnabled(bool status);
+
+            /*!
+            * \brief Are motors enabled?
+            *
+            * \return true if motors are enabled
+            */
+            bool AreEnabled(void) const;
+
+            /*!
+            * \brief Set motor power
+            *
+            * Changes the power (from 0 to 1) of a specific motor. \n
+            * By default power is set to 1 for each motor which has no effect. \n
+            * A value <1 will decrease the power of a motor sent to the reimplemented Bldc class through SetMotors. \n
+            * The power value is applied after applying saturation between min value and max value.
+            * So the resulting value cannot be higher than max value
+            * but it can be lower than min value.
+            *
+            * \param motor_id id of the motor
+            * \param value power value (from 0 to 1)
+            *
+            */
+            void SetPower(int motor_id,float value);
+
+            /*!
+            * \brief Layout
+            *
+            * This the same Layout as passed to the constructor
+            *
+            * \return a Layout
+            */
+            gui::Layout* GetLayout(void) const;
+
+            /*!
+            * \brief Has speed measurement
+            *
+            * \return true if it has speed measurement
+            */
+            virtual bool HasSpeedMeasurement(void) const=0;
+
+            /*!
+            * \brief Has current measurement
+            *
+            * \return true if it has current measurement
+            */
+            virtual bool HasCurrentMeasurement(void) const=0;
+
+        protected:
+            core::cvmatrix *output;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data);
+
+            /*!
+            * \brief Set motors values
+            *
+            * values size must be the same as MotorsCount()
+            *
+            * \param values set motors values
+            */
+            virtual void SetMotors(float* values)=0;
+
+            class Bldc_impl* pimpl_;
+    };
+} // end namespace actuator
+} // end namespace framewor
+#endif // BLDC_H
Index: trunk/include/FlairSensorActuator/Camera.h
===================================================================
--- trunk/include/FlairSensorActuator/Camera.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Camera.h	(revision 4)
@@ -0,0 +1,147 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Camera.h
+ * \brief Base class for Camera
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/03/06
+ * \version 4.0
+ */
+
+#ifndef CAMERA_H
+#define CAMERA_H
+
+#include <IODevice.h>
+#include <stdint.h>
+#include <cvimage.h>
+
+namespace flair
+{
+    namespace gui
+    {
+        class GroupBox;
+        class Tab;
+        class TabWidget;
+        class Picture;
+        class GridLayout;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class Camera
+    *
+    * \brief Base class for Camera
+    *
+    * Use this class to define a custom Camera.
+    *
+    */
+    class Camera : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Camera.
+            *
+            * \param parent parent
+            * \param name name
+            * \param width width
+            * \param height height
+            * \param format image format
+            */
+            Camera(const core::FrameworkManager* parent,std::string name,uint16_t width,uint16_t height,core::cvimage::Type::Format format);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Camera. \n
+            * This contructor must only be called for a simulated device.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            Camera(const core::IODevice* parent,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Camera();
+
+            /*!
+            * \brief Use default plot
+            *
+            * \param image image to display
+            */
+            void UseDefaultPlot(const core::cvimage *image);
+
+            /*!
+            * \brief get Layout
+            *
+            * \return a Layout available
+            */
+            gui::GridLayout* GetLayout(void) const;
+
+            /*!
+            * \brief plot tab
+            *
+            * \return plot tab
+            */
+            gui::Tab* GetPlotTab(void) const;
+
+            /*!
+            * \brief Save picture to file
+            *
+            * \param filename filename
+            */
+            void SaveToFile(std::string filename) const;
+
+            /*!
+            * \brief Width
+            *
+            * \return width
+            */
+            uint16_t Width(void) const;
+
+            /*!
+            * \brief Height
+            *
+            * \return height
+            */
+            uint16_t Height(void) const;
+
+             /*!
+            * \brief Output matrix
+            *
+            * Output matrix is of the same size as declared in constructor. \n
+            *
+            * \return the output matrix
+            */
+            core::cvimage* Output(void);
+
+            core::DataType const &GetOutputDataType() const;
+
+        protected:
+            /*!
+            * \brief get GroupBox
+            *
+            * \return a GroupBox available
+            */
+            gui::GroupBox* GetGroupBox(void) const;
+
+            core::cvimage *output;
+
+        private:
+            gui::Tab *main_tab,*sensor_tab,*plot_tab;
+            gui::TabWidget *tab;
+            gui::GroupBox* setup_groupbox;
+            gui::GridLayout* setup_layout;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // CAMERA_H
Index: trunk/include/FlairSensorActuator/Controller.h
===================================================================
--- trunk/include/FlairSensorActuator/Controller.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Controller.h	(revision 4)
@@ -0,0 +1,88 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2015/05/27
+//  filename:   Controller.h
+//
+//  author:     Gildas Bayard
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Utility classes for controllers
+//
+//
+/*********************************************************************/
+
+#ifndef CONTROLLER_H
+#define CONTROLLER_H
+
+#include <Object.h>
+#include <string.h>
+
+namespace flair {
+    namespace core {
+        class Message;
+    }
+}
+
+namespace flair { namespace sensor {
+
+    enum class ControllerAction {
+        SetLedOn,
+        SetLedOff,
+        Rumble,
+        FlashLed,
+        Exit
+    };
+
+    class RumbleMessage: public core::Message {
+    public:
+        RumbleMessage(unsigned int leftForce,unsigned int leftTimeout,unsigned int rightForce,unsigned int rightTimeout);
+        unsigned int GetLeftForce() const;
+        unsigned int GetLeftTimeout() const;
+        unsigned int GetRightForce() const;
+        unsigned int GetRightTimeout() const;
+        void SetLeftForce(unsigned int leftForce);
+        void SetLeftTimeout(unsigned int leftTimeout);
+        void SetRightForce(unsigned int rightForce);
+        void SetRightTimeout(unsigned int rightTimeout);
+    private:
+        static const unsigned int leftForceOffset=sizeof(ControllerAction);
+        static const unsigned int leftTimeoutOffset=sizeof(ControllerAction)+sizeof(unsigned int);
+        static const unsigned int rightForceOffset=sizeof(ControllerAction)+2*sizeof(unsigned int);
+        static const unsigned int rightTimeoutOffset=sizeof(ControllerAction)+3*sizeof(unsigned int);
+    };
+
+    class SwitchLedMessage: public core::Message {
+    public:
+        SwitchLedMessage(bool isOn,unsigned int ledId);
+        bool IsOn() const;
+        unsigned int GetLedId() const;
+        void SetOn();
+        void SetOff();
+        void SetLedId(unsigned int ledId);
+    private:
+        static const unsigned int isOnOffset=sizeof(ControllerAction);
+        static const unsigned int ledIdOffset=sizeof(ControllerAction)+sizeof(bool);
+    };
+
+    class FlashLedMessage: public core::Message {
+    public:
+        FlashLedMessage(unsigned int ledId,unsigned int onTime,unsigned int offTime);
+        unsigned int GetLedId() const;
+        unsigned int GetOnTime() const;
+        unsigned int GetOffTime() const;
+        void SetLedId(unsigned int ledId);
+        void SetOnTime(unsigned int onTime);
+        void SetOffTime(unsigned int offTime);
+    private:
+        static const unsigned int ledIdOffset=sizeof(ControllerAction);
+        static const unsigned int onTimeOffset=sizeof(ControllerAction)+sizeof(unsigned int);
+        static const unsigned int offTimeOffset=sizeof(ControllerAction)+2*sizeof(unsigned int);
+    };
+
+}}
+
+#endif // CONTROLLER_H
Index: trunk/include/FlairSensorActuator/Gps.h
===================================================================
--- trunk/include/FlairSensorActuator/Gps.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Gps.h	(revision 4)
@@ -0,0 +1,240 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Gps.h
+ * \brief Base class for GPS
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/08/23
+ * \version 4.0
+ */
+
+#ifndef GPS_H
+#define GPS_H
+
+#include <IODevice.h>
+#include <nmea/nmea.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+        class FrameworkManager;
+        class GeoCoordinate;
+        class Vector3D;
+    }
+    namespace gui
+    {
+        class Layout;
+        class DataPlot1D;
+        class Tab;
+        class TabWidget;
+        class PushButton;
+        class Map;
+        class Label;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class Gps
+    *
+    * \brief Base class for GPS
+    */
+    class Gps : public core::IODevice
+    {
+        public:
+            /*!
+            \enum FixQuality_t
+            \brief Fix qualty indicators
+            */
+            enum class FixQuality_t {
+                Invalid=0,/*!< invalid */
+                Gps=1,/*!< Gps */
+                DGps=2,/*!< Differential Gps */
+                Pps=3,/*!< Pps */
+                Rtk=4,/*!< RTK */
+                RtkFloat=5,/*!< RTK float */
+                Estimated=6,/*!< Estimated */
+                Manual=7,/*!< Manual */
+                Simulation=8,/*!< Simulation */
+                };
+
+            /*!
+            \enum NMEAFlags_t
+            \brief NMEA flags
+            */
+            enum NMEAFlags_t {
+                GGA=0x01,/*!< GGA */
+                VTG=0x02,/*!< VTG */
+                GST=0x04,/*!< GST */
+                };
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Gps.
+            *
+            * \param parent parent
+            * \param name name
+            * \param NMEAFlags NMEA sentances to enable
+            */
+            Gps(const core::FrameworkManager* parent,std::string name,NMEAFlags_t NMEAFlags);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Gps();
+
+            /*!
+            * \brief Use default plot
+            *
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief East plot
+            *
+            * \return east plot
+            */
+            gui::DataPlot1D* EPlot(void) const;
+
+            /*!
+            * \brief North plot
+            *
+            * \return north plot
+            */
+            gui::DataPlot1D* NPlot(void) const;
+
+            /*!
+            * \brief Up plot
+            *
+            * \return up plot
+            */
+            gui::DataPlot1D* UPlot(void) const;
+
+            /*!
+            * \brief East velocity plot
+            *
+            * \return east velocity plot
+            */
+            gui::DataPlot1D* VEPlot(void) const;
+
+            /*!
+            * \brief North velocity plot
+            *
+            * \return north velocity plot
+            */
+            gui::DataPlot1D* VNPlot(void) const;
+
+            /*!
+            * \brief Main tab
+            *
+            * \return main tab
+            */
+            gui::TabWidget* GetTab(void) const;
+
+            /*!
+            * \brief Setup Layout
+            *
+            * \return setup Layout
+            */
+            gui::Layout* GetLayout(void) const;
+
+            /*!
+            * \brief Plot tab
+            *
+            * \return plot Tab
+            */
+            gui::Tab* GetPlotTab(void) const;
+
+            /*!
+            * \brief Number of used satellites
+            *
+            * \return number of used satellites
+            */
+            uint16_t NbSat(void) const;
+
+            /*!
+            * \brief Fix Quality
+            *
+            * \return fix quality
+            */
+            FixQuality_t FixQuality(void) const;
+
+            /*!
+            * \brief Set reference for ENU coordinates
+            *
+            * The actual position is used as reference to calculate
+            * ENU coordinates.
+            *
+            * \return fix quality
+            */
+            void SetRef(void);
+
+            /*!
+            * \brief Get ENU position
+            *
+            * \param point to store position
+            */
+            void GetENUPosition(core::Vector3D *point);
+
+        protected:
+            /*!
+            * \brief Parse a NMEA frame
+            *
+            * This function must be called by the reimplemented class. \n
+            * When a frame is parsed, GPS datas are filled.
+            *
+            * \param frame NMEA frame
+            * \param frame_size frame size
+            *
+            */
+            void parseFrame(const char *frame, int frame_size);
+
+            NMEAFlags_t NMEAFlags;
+
+        protected:
+            core::GeoCoordinate *position;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            gui::Tab *main_tab,*sensor_tab;
+            gui::TabWidget* tab;
+            gui::PushButton *button_ref;
+            gui::DataPlot1D* e_plot;
+            gui::DataPlot1D* n_plot;
+            gui::DataPlot1D* u_plot;
+            gui::DataPlot1D* ve_plot;
+            gui::DataPlot1D* vn_plot;
+            gui::Tab* plot_tab;
+            gui::Map *map;
+            gui::Label *nb_sat_label,*fix_label;
+            uint16_t nb_sat;
+            FixQuality_t fix;
+            bool take_ref;
+            nmeaINFO info;
+            nmeaPARSER parser;
+            nmeaGPGGA pack;
+            nmeaPOS pos;
+            double lat_ref,long_ref,alt_ref;
+
+            //matrix
+            core::cvmatrix *output;
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // GPS_H
Index: trunk/include/FlairSensorActuator/Gx3_25_imu.h
===================================================================
--- trunk/include/FlairSensorActuator/Gx3_25_imu.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Gx3_25_imu.h	(revision 4)
@@ -0,0 +1,88 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Gx3_25_imu.h
+ * \brief Class for 3dmgx3-25 Imu
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/08/19
+ * \version 4.0
+ */
+
+#ifndef GX3_25_IMU_H
+#define GX3_25_IMU_H
+
+#include <Imu.h>
+#include <Thread.h>
+
+namespace flair {
+    namespace core {
+        class FrameworkManager;
+        class SerialPort;
+    }
+}
+
+class Gx3_25_imu_impl;
+
+namespace flair { namespace sensor {
+    /*! \class Gx3_25_imu
+    *
+    * \brief Class for 3dmgx3-25 Imu
+    */
+    class Gx3_25_imu : public Imu, public core::Thread {
+        friend class ::Gx3_25_imu_impl;
+
+        public:
+            /*!
+            \enum Command_t
+            \brief Command for the continuous mode
+            */
+            enum Command_t{
+                EulerAnglesAndAngularRates=0xcf,/*!< Euler angles and angular rates */
+                AccelerationAngularRateAndOrientationMatrix=0xc8,/*!< Acceleration, angular rate and orientation matrix */
+                };
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Gx3_25_imu.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport SerialPort
+            * \param command command for continuous mode
+            * \param priority priority of the Thread
+            */
+            Gx3_25_imu(const core::FrameworkManager* parent,std::string name,core::SerialPort *serialport,Command_t command,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Gx3_25_imu();
+
+        private:
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            class Gx3_25_imu_impl* pimpl_;
+    };
+} // end namespace sensor
+} // end namespace flair
+
+#endif // GX3_25_IMU_H
Index: trunk/include/FlairSensorActuator/HokuyoUTM30Lx.h
===================================================================
--- trunk/include/FlairSensorActuator/HokuyoUTM30Lx.h	(revision 4)
+++ trunk/include/FlairSensorActuator/HokuyoUTM30Lx.h	(revision 4)
@@ -0,0 +1,175 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file HokuyoUTM30Lx.h
+ * \brief Classe intégrant le telemetre laser Hokuyo UTM 30lx
+ * \author César Richard, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/07/22
+ * \version 1.0
+ */
+
+#ifndef HOKUYOUTM30LX_H
+#define HOKUYOUTM30LX_H
+
+#include <Thread.h>
+#include <LaserRangeFinder.h>
+#include <Mutex.h>
+
+#include <queue>
+#include <vector>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+        class FrameworkManager;
+        class SerialPort;
+        class Mutex;
+    }
+    namespace gui
+    {
+        class Tab;
+        class TabWidget;
+        class RangeFinderPlot;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class HokuyoUTM30Lx
+    *
+    * \brief Classe intégrant le telemetre laser Hokuyo UTM 30lx
+    */
+    class HokuyoUTM30Lx : public core::Thread, public LaserRangeFinder
+    {
+        public:
+
+             /*!
+            * \brief Constructor
+            *
+            * Construct a Hokuyo UTM30-Lx.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport serialport
+            * \param priority priority of the Thread
+            */
+            HokuyoUTM30Lx(const core::FrameworkManager* parent,std::string name,core::SerialPort *serialport,uint8_t priority);
+            void getMesure(int startStep, int endStep,int clusterCount, int interval, int scanNumber=0);
+            core::cvmatrix* getDatas(void);
+
+            /*!
+            * \brief Use default plot
+            *
+            */
+            void UseDefaultPlot(void);
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~HokuyoUTM30Lx();
+
+        private:
+            core::SerialPort *serialport;
+            core::Mutex* bufRetMut;
+            core::Mutex* sendingCmdMut;
+            gui::Tab* main_tab;
+            gui::TabWidget* tab;
+            gui::RangeFinderPlot* plot;
+
+            //matrix
+            core::cvmatrix *output;
+
+			std::queue<std::string> bufRet;
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+            /*!
+            * \brief Send a command
+            * \param command Command to send (see Hokuyo UTM 30-LX doc for more informations)
+            * \return Return code
+            */
+            std::string sendCommand(std::string command);
+            /*!
+            * \brief Start the laser
+            *
+            */
+            void startLaser(void);
+            /*!
+            * \brief Stop the laser
+            *
+            */
+			void stopLaser(void);
+			/*!
+            * \brief Stop and reset the laser's settings
+            *
+            */
+		    void resetConfig(void);
+		    /*!
+            * \brief Decode incomming datas
+            * \param datas Datas to decode
+            * \param startStep Set the first mesured point
+            * Decode mesured points from incoming datas and fill the output matrix
+            */
+		    void decodeDatas(std::vector<std::string> datas, int startStep);
+            /*!
+            * \brief Explode a string into a vector
+            * \param str The string to explode
+            * \param delimiter The character separating elements
+            * \return A vector containing the elements
+            */
+			static std::vector<std::string> explode(const std::string str, char delimiter);
+			/*!
+            * \brief Calculate the checksum
+            * \param code Data from which calculate
+            * \param byte Data's size
+            * \return A character corresponding to the code's checksum
+            */
+			static int encodeSum(const char* code, int byte);
+			/*!
+            * \brief Check if a data correspond to its checksum
+            * \param data Datas to check
+            */
+			static bool checkSum(std::string data);
+			/*!
+            * \brief Decode datas using the 2 character encoding
+            * \param data Datas to decode
+            * \return Decoded datas
+            */
+			static float decode2car(const char* data);
+			/*!
+            * \brief Decode datas using the 3 character encoding
+            * \param data Datas to decode
+            * \return Decoded datas
+            */
+			static float decode3car(const char* data);
+			/*!
+            * \brief Decode datas using the 4 character encoding
+            * \param data Datas to decode
+            * \return Decoded datas
+            */
+			static float decode4car(const char* data);
+
+			/*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // HOKUYOUTM30LX_H
Index: trunk/include/FlairSensorActuator/HostEthController.h
===================================================================
--- trunk/include/FlairSensorActuator/HostEthController.h	(revision 4)
+++ trunk/include/FlairSensorActuator/HostEthController.h	(revision 4)
@@ -0,0 +1,108 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2015/03/30
+//  filename:   HostEthController.h
+//
+//  author:     Gildas Bayard
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Base class for host side remote controls that talks to target side through ethernet connection
+//
+//
+/*********************************************************************/
+
+#ifndef HOSTETHCONTROLLER_H
+#define HOSTETHCONTROLLER_H
+
+#include <IODevice.h>
+#include <Thread.h>
+#include <stdint.h>
+
+namespace flair {
+    namespace core {
+        class FrameworkManager;
+        class cvmatrix;
+        class TcpSocket;
+        class Socket;
+        class Mutex;
+    }
+    namespace gui {
+        class Tab;
+        class TabWidget;
+        class DataPlot1D;
+    }
+}
+
+namespace flair { namespace sensor {
+    enum class ControllerAction;
+
+    /*! \class HostEthController
+    *
+    * \brief Base Class for host side remote controls that talks to target side through ethernet connection
+    *
+    * There are 2 communication channels:
+    *   - 1 connection with the ground station to display the values. Output for analog sticks is normalized in the range [-1, 1] (float values)
+    *   - 1 connection with the target to send the controller values (and receive controller state modification requests)
+    */
+    class HostEthController : public core::Thread, public core::IODevice {
+    public:
+        HostEthController(const core::FrameworkManager* parent,std::string name,std::string address,int port,uint32_t period=10,uint32_t _bitsPerAxis=7,uint8_t priority=0);
+        ~HostEthController();
+        void DrawUserInterface();
+    protected:
+        std::string controllerName;
+        core::TcpSocket *controlSocket; //connection to the target
+        core::Socket *dataSocket;
+        std::string targetAddress;
+        int targetPort;
+        gui::Tab *tab;
+        gui::TabWidget *tabWidget;
+        virtual bool IsDataFrameReady() { return true;};
+        virtual void CompleteDataFrameGrab() {};
+//        int8_t *datas;
+//        uint8_t dataSize;
+        char *dataFrameBuffer;
+        size_t dataFrameSize;
+        virtual void ProcessMessage(core::Message *controllerAction) {};
+
+        virtual std::string GetAxisDescription(unsigned int axis);
+        virtual void GetAxisData()=0; //responsible for getting the axis data from the hardware
+        unsigned int axisNumber;
+        core::cvmatrix* axis;
+        gui::DataPlot1D **axisPlot;
+        uint32_t bitsPerAxis;
+        uint32_t nativeBitsPerAxis;
+
+        virtual std::string GetButtonDescription(unsigned int button);
+        virtual void GetButtonData()=0; //responsible for getting the button data from the hardware
+        unsigned int buttonNumber;
+        core::cvmatrix* button;
+        uint8_t buttonOffset;
+        bool meaningfulDataAvailable;
+
+    private:
+        class DataSender : public core::Thread {
+        public:
+            DataSender(Object* parent,HostEthController* hostEthController,std::string name,uint8_t priority=0);
+            void Run();
+        private:
+            HostEthController* hostEthController;
+        };
+        DataSender *dataSender;
+
+        bool ControllerInitialization();
+        bool ConnectedWithTarget();
+        void SendControllerInfo();
+        void Run();
+        void BuildDataFrame();
+        bool writeBits(uint16_t value,uint8_t valueSizeInBits,char *buffer,uint8_t offsetInBits);
+        core::Mutex *connectionEstablishedMutex;
+    };
+
+}}
+
+#endif // HOSTETHCONTROLLER_H
Index: trunk/include/FlairSensorActuator/Imu.h
===================================================================
--- trunk/include/FlairSensorActuator/Imu.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Imu.h	(revision 4)
@@ -0,0 +1,144 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Imu.h
+ * \brief Base class for Imu
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/01/16
+ * \version 4.0
+ */
+
+#ifndef IMU_H
+#define IMU_H
+
+#include <IODevice.h>
+
+namespace flair {
+    namespace core {
+        class ImuData;
+        class OneAxisRotation;
+    }
+    namespace gui {
+        class Tab;
+        class TabWidget;
+        class GroupBox;
+        class Layout;
+        class DataPlot1D;
+    }
+}
+
+class Ahrs_impl;
+
+namespace flair { namespace sensor {
+    /*! \class Imu
+    *
+    * \brief Base class for Imu
+    *
+    * Use this class to define a custom Imu.
+    *
+    */
+    class Imu : public core::IODevice {
+        friend class ::Ahrs_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an Imu.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            Imu(const core::FrameworkManager *parent,std::string name);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct an Imu. \n
+            * This contructor must only be called for a simulated device.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            Imu(const core::IODevice *parent,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Imu();
+
+            /*!
+            * \brief Setup Layout
+            *
+            * \return setup Layout
+            */
+            gui::Layout *GetLayout(void) const;
+
+            /*!
+            * \brief Lock user interface
+            *
+            */
+            void LockUserInterface(void) const;
+
+            /*!
+            * \brief Unlock user interface
+            *
+            */
+            void UnlockUserInterface(void) const;
+
+            /*!
+            * \brief Use default plot
+            *
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief Plot tab
+            *
+            * \return plot Tab
+            */
+            gui::Tab *GetPlotTab(void) const;
+
+        protected:
+            /*!
+            * \brief Setup GroupBox
+            *
+            * \return setup GroupBox
+            */
+            gui::GroupBox *GetGroupBox(void) const;
+
+            /*!
+            * \brief UpdateImu
+            *
+            * The reimplemented class must call this function as soon as IMU datas are available. \n
+            * It handles the data rotation if it was defined.
+            *
+            */
+            void UpdateImu();
+
+            /*!
+            * \brief Get imu datas
+            *
+            * \param imuData imu datas
+            */
+            void GetDatas(core::ImuData **imuData) const;
+
+
+        private:
+            gui::Tab *mainTab,*sensorTab,*plotTab;
+            gui::TabWidget* tab;
+            gui::GroupBox *setupGroupbox;
+            core::OneAxisRotation* rotation;
+            core::ImuData *imuData;
+
+            gui::DataPlot1D *axPlot,*ayPlot,*azPlot;
+            gui::DataPlot1D *gxPlot,*gyPlot,*gzPlot;
+            gui::DataPlot1D *mxPlot,*myPlot,*mzPlot;
+    };
+} // end namespace sensor
+} // end namespace flair
+
+#endif // IMU_H
Index: trunk/include/FlairSensorActuator/LaserRangeFinder.h
===================================================================
--- trunk/include/FlairSensorActuator/LaserRangeFinder.h	(revision 4)
+++ trunk/include/FlairSensorActuator/LaserRangeFinder.h	(revision 4)
@@ -0,0 +1,140 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file LaserRangeFinder.h
+ * \brief Classe generique des telemetres laser
+ * \author César RICHARD, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/07/22
+ * \version 1.0
+ */
+
+#ifndef LASERRANGEFINDER_H
+#define LASERRANGEFINDER_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class cvmatrix;
+
+    }
+    namespace gui
+    {
+        class Tab;
+        class TabWidget;
+        class GroupBox;
+        class Layout;
+        class RangeFinderPlot;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class LaserRangeFinder
+    *
+    * \brief Classe generique intégrant les telemetres laser
+    */
+    class LaserRangeFinder : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Laser Range Finder.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            LaserRangeFinder(const core::FrameworkManager* parent,std::string name);
+            /*!
+            * \brief Constructor
+            *
+            * Construct a UsRangeFinder. Simulation part.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            LaserRangeFinder(const core::IODevice* parent,std::string name);
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~LaserRangeFinder();
+
+            /*!
+            * \brief Use default plot
+            *
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief Plot
+            *
+            * \return DataPlot1D
+            */
+            gui::RangeFinderPlot* GetPlot(void) const;
+
+            /*!
+            * \brief Setup Layout
+            *
+            * \return a Layout available
+            */
+            gui::Layout* GetLayout(void) const;
+
+            /*!
+            * \brief Plot tab
+            *
+            * \return plot Tab
+            */
+            gui::Tab* GetPlotTab(void) const;
+
+            /*!
+            * \brief Value
+            *
+            * \return output value
+            */
+            float Value(void) const;
+
+        protected:
+        /*!
+            * \brief Output matrix
+            *
+            * \return output matrix
+            */
+            core::cvmatrix *output;
+
+            /*!
+            * \brief Setup GroupBox
+            *
+            * \return a GroupBox available
+            */
+            gui::GroupBox* GetGroupBox(void) const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            gui::Tab* main_tab;
+            gui::TabWidget *tab;
+            gui::GroupBox* setup_groupbox;
+            gui::Tab* sensor_tab;
+            gui::RangeFinderPlot* plot;
+            gui::Tab* plot_tab;
+
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // LASERRANGEFINDER_H
Index: trunk/include/FlairSensorActuator/Mb800.h
===================================================================
--- trunk/include/FlairSensorActuator/Mb800.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Mb800.h	(revision 4)
@@ -0,0 +1,81 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Mb800.h
+ * \brief Class for mb800 gps receiver
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/08/23
+ * \version 4.0
+ */
+
+#ifndef MB800_H
+#define MB800_H
+
+#include <Thread.h>
+#include <Gps.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class SerialPort;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class Mb800
+    *
+    * \brief Class for mb800 gps receiver
+    */
+    class Mb800 : public core::Thread, public Gps
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Mb800.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport serialport
+            * \param NMEAFlags NMEA sentances to enable
+            * \param priority priority of the Thread
+            */
+            Mb800(const core::FrameworkManager* parent,std::string name,core::SerialPort *serialport,Gps::NMEAFlags_t NMEAFlags,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Mb800();
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            void Sync(void);
+            core::SerialPort *serialport;
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // MB800_H
Index: trunk/include/FlairSensorActuator/Novatel.h
===================================================================
--- trunk/include/FlairSensorActuator/Novatel.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Novatel.h	(revision 4)
@@ -0,0 +1,81 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Novatel.h
+ * \brief Class for Novatel gps receiver
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/08/23
+ * \version 4.0
+ */
+
+#ifndef Novatel_H
+#define Novatel_H
+
+#include <Thread.h>
+#include <Gps.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class SerialPort;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class Novatel
+    *
+    * \brief Class for Novatel gps receiver
+    */
+    class Novatel : public core::Thread, public Gps
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Novatel.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport serialport
+            * \param NMEAFlags NMEA sentances to enable
+            * \param priority priority of the Thread
+            */
+            Novatel(const core::FrameworkManager* parent,std::string name,core::SerialPort *serialport,Gps::NMEAFlags_t NMEAFlags,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Novatel();
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            core::SerialPort *serialport;
+            void Sync(void);
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // Novatel_H
Index: trunk/include/FlairSensorActuator/ParrotBatteryMonitor.h
===================================================================
--- trunk/include/FlairSensorActuator/ParrotBatteryMonitor.h	(revision 4)
+++ trunk/include/FlairSensorActuator/ParrotBatteryMonitor.h	(revision 4)
@@ -0,0 +1,68 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file ParrotBatteryMonitor.h
+ * \brief Parrot battery monitor
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/01/24
+ * \version 4.0
+ */
+
+#ifndef PARROTBATTERYMONITOR_H
+#define PARROTBATTERYMONITOR_H
+
+#include <BatteryMonitor.h>
+#include <Thread.h>
+
+namespace flair
+{
+namespace gui
+{
+    class Layout;
+}
+namespace core
+{
+    class Unix_I2cPort;
+}
+
+namespace sensor
+{
+    /*! \class ParrotBatteryMonitor
+    *
+    * \brief Parrot battery monitor
+    */
+    class ParrotBatteryMonitor : public core::Thread,public BatteryMonitor
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ParrotBatteryMonitor at given position.
+            *
+            * \param position position
+            * \param name name
+            */
+            ParrotBatteryMonitor(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ParrotBatteryMonitor();
+
+        private:
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            core::Unix_I2cPort* port;
+    };
+}; // end namespace sensor
+}; // end namespace flair
+#endif // PARROTBATTERYMONITOR_H
Index: trunk/include/FlairSensorActuator/ParrotBldc.h
===================================================================
--- trunk/include/FlairSensorActuator/ParrotBldc.h	(revision 4)
+++ trunk/include/FlairSensorActuator/ParrotBldc.h	(revision 4)
@@ -0,0 +1,96 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file ParrotBldc.h
+ * \brief Class for Ardrone 2 Bldc
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/12/19
+ * \version 4.0
+ */
+
+#ifndef PARROTBLDC_H
+#define PARROTBLDC_H
+
+#include "Bldc.h"
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class cvmatrix;
+        class SerialPort;
+    }
+    namespace gui
+    {
+        class Layout;
+    }
+}
+
+class ParrotBldc_impl;
+
+namespace flair
+{
+namespace actuator
+{
+    /*! \class ParrotBldc
+    *
+    * \brief Class for Ardrone 2 Bldc
+    */
+    class ParrotBldc : public Bldc
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ParrotBldc.
+            *
+            * \param parent parent
+            * \param layout layout
+            * \param name name
+            * \param serialport serialport
+            */
+            ParrotBldc(const core::IODevice* parent,gui::Layout* layout,std::string name,core::SerialPort* serialport);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ParrotBldc();
+
+            /*!
+            * \brief Has speed measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has speed measurement
+            */
+            bool HasSpeedMeasurement(void) const{return false;};
+
+            /*!
+            * \brief Has current measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has current measurement
+            */
+            bool HasCurrentMeasurement(void) const{return false;};
+
+        private:
+            /*!
+            * \brief Set motors values
+            *
+            * Reimplemented from Bldc. \n
+            * Values size must be the same as MotorsCount()
+            *
+            * \param values motor values
+            */
+            void SetMotors(float* value);
+
+            class ParrotBldc_impl* pimpl_;
+    };
+} // end namespace actuator
+} // end namespace framewor
+#endif // PARROTBLDC_H
Index: trunk/include/FlairSensorActuator/ParrotCamH.h
===================================================================
--- trunk/include/FlairSensorActuator/ParrotCamH.h	(revision 4)
+++ trunk/include/FlairSensorActuator/ParrotCamH.h	(revision 4)
@@ -0,0 +1,145 @@
+/*!
+ * \file ParrotCamH.h
+ * \brief Class for ardrone2 horizontal camera
+ * \author Guillaume Sanahuja
+ * \date 2014/07/16
+ * \version 4.0
+ */
+
+#ifndef PARROTCAMH_H
+#define PARROTCAMH_H
+
+#include "V4LCamera.h"
+
+struct regval_list {
+  uint16_t reg_num;
+  uint16_t size;
+  uint32_t value;
+};
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class I2cPort;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class ParrotCamH
+    *
+    * \brief Class for ardrone2 horizontal cameraH
+    */
+    class ParrotCamH : public V4LCamera
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ParrotCamH.
+            *
+            * \param parent parent
+            * \param name name
+            * \param width width
+            * \param height height
+            * \param priority priority of the Thread
+            */
+            ParrotCamH(const core::FrameworkManager* parent,std::string name,uint16_t width,uint16_t height,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ParrotCamH();
+
+        private:
+            /*!
+            * \brief Set Gain
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetGain(float value);
+
+            /*!
+            * \brief Set Exposure
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetExposure(float value);
+
+
+            /*!
+            * \brief Set Auto Exposure
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value
+            */
+            void SetAutoExposure(bool value);
+
+            /*!
+            * \brief Set Brightness
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetBrightness(float value);
+
+            /*!
+            * \brief Set Contrast
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetContrast(float value);
+
+            /*!
+            * \brief Set Saturation
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetSaturation(float value);
+
+            /*!
+            * \brief Set Hue
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetHue(float value);
+
+
+
+            void mt9m114_detect(void);
+            void mt9m114_init(void);
+            int mt9m114_reset(void);
+            int mt9m114_errata_1(void);
+            int mt9m114_errata_2(void);
+            int mt9m114_PLL_settings(void);
+            int mt9m114_write_array(struct regval_list *vals);
+            int mt9m114_sensor_optimization(void);
+            int soc1040_read_reg(uint16_t reg, uint32_t *val,uint16_t data_length);
+            int soc1040_write_reg(uint16_t reg,uint32_t val, uint16_t data_length);
+            int check_uvc_status(const char* funcName);
+            int mt9m114_refresh(void);
+            int mt9m114_wait_num_frames(uint16_t numFrames);
+            int poll_command_register_bit(uint16_t bit_mask);
+            core::I2cPort* i2cport;
+            struct regval_list *wh_regval_list;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // PARROTCAMH_H
Index: trunk/include/FlairSensorActuator/ParrotCamV.h
===================================================================
--- trunk/include/FlairSensorActuator/ParrotCamV.h	(revision 4)
+++ trunk/include/FlairSensorActuator/ParrotCamV.h	(revision 4)
@@ -0,0 +1,139 @@
+/*!
+ * \file ParrotCamV.h
+ * \brief Class for ardrone2 horizontal camera
+ * \author Guillaume Sanahuja
+ * \date 2014/07/16
+ * \version 4.0
+ */
+
+#ifndef PARROTCAMV_H
+#define PARROTCAMV_H
+
+#define   CMATRIX_LEN 6
+
+#include "V4LCamera.h"
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class I2cPort;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class ParrotCamV
+    *
+    * \brief Class for ardrone2 horizontal cameraH
+    */
+    class ParrotCamV : public V4LCamera
+    {
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ParrotCamV.
+            *
+            * \param parent parent
+            * \param name name
+            * \param priority priority of the Thread
+            */
+            ParrotCamV(const core::FrameworkManager* parent,std::string name,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ParrotCamV();
+
+        private:
+            /*!
+            * \brief Set Gain
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetGain(float value);
+
+            /*!
+            * \brief Set Auto Gain
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value
+            */
+            void SetAutoGain(bool value);
+
+            /*!
+            * \brief Set Exposure
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetExposure(float value);
+
+            /*!
+            * \brief Set Auto Exposure
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value
+            */
+            void SetAutoExposure(bool value);
+
+            /*!
+            * \brief Set Brightness
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetBrightness(float value);
+
+            /*!
+            * \brief Set Saturation
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetSaturation(float value);
+
+            /*!
+            * \brief Set Hue
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetHue(float value);
+
+            /*!
+            * \brief Set Contrast
+            *
+            * Reimplemented from V4LCamera class
+            *
+            * \param value value between 0 and 1
+            */
+            void SetContrast(float value);
+
+            int ov7670_write(uint8_t reg,uint8_t value);
+            int ov7670_read(uint8_t reg,uint8_t* value);
+            unsigned char ov7670_abs_to_sm(uint8_t v);
+            int ov7670_store_cmatrix(int matrix[CMATRIX_LEN]);
+            void ov7670_calc_cmatrix(int matrix[CMATRIX_LEN]);
+            float hue,sat;
+            core::I2cPort* i2cport;
+            //cmatrix for V4L2_MBUS_FMT_UYVY8_2X8
+            int cmatrix[CMATRIX_LEN]= { 128, -128, 0, -34, -94, 128 };
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // PARROTCAMV_H
Index: trunk/include/FlairSensorActuator/ParrotGps.h
===================================================================
--- trunk/include/FlairSensorActuator/ParrotGps.h	(revision 4)
+++ trunk/include/FlairSensorActuator/ParrotGps.h	(revision 4)
@@ -0,0 +1,81 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file ParrotGps.h
+ * \brief Class for Ardrone 2 gps receiver
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/06/04
+ * \version 4.0
+ */
+
+#ifndef PARROTGPS_H
+#define PARROTGPS_H
+
+#include <Thread.h>
+#include <Gps.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class SerialPort;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class ParrotGps
+    *
+    * \brief Class for Ardrone 2 gps receiver
+    */
+    class ParrotGps : public core::Thread, public Gps
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Novatel.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport serialport
+            * \param NMEAFlags NMEA sentances to enable
+            * \param priority priority of the Thread
+            */
+            ParrotGps(const core::FrameworkManager* parent,std::string name,core::SerialPort *serialport,Gps::NMEAFlags_t NMEAFlags,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ParrotGps();
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            core::SerialPort *serialport;
+            void Sync(void);
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // PARROTGPS_H
Index: trunk/include/FlairSensorActuator/ParrotNavBoard.h
===================================================================
--- trunk/include/FlairSensorActuator/ParrotNavBoard.h	(revision 4)
+++ trunk/include/FlairSensorActuator/ParrotNavBoard.h	(revision 4)
@@ -0,0 +1,122 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file ParrotNavBoard.h
+ * \brief Class for ArDrone 2 sensors
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/12/19
+ * \version 4.0
+ */
+
+//thanks to Paparazzi (https://wiki.paparazziuav.org) for the struct nav_struct
+
+#ifndef PARROTNAVBOARD_H
+#define PARROTNAVBOARD_H
+
+#include <Thread.h>
+
+namespace flair {
+    namespace core {
+        class FrameworkManager;
+        class cvmatrix;
+        class ImuData;
+        class SerialPort;
+    }
+}
+
+namespace flair { namespace sensor {
+    class Imu;
+    class UsRangeFinder;
+
+    /*! \class ParrotNavBoard
+    *
+    * \brief Class for ArDrone 2 sensors
+    */
+    class ParrotNavBoard : public core::Thread {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ParrotNavBoard.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport serialport
+            * \param priority priority of the Thread
+            */
+            ParrotNavBoard(const core::FrameworkManager* parent,std::string name,core::SerialPort* serialport,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ParrotNavBoard();
+
+            /*!
+            * \brief Use default plot
+            *
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief Get Imu
+            *
+            * \return Associated Imu
+            */
+            Imu* GetImu(void) const;
+
+            /*!
+            * \brief Get UsRangeFinder
+            *
+            * \return Associated UsRangeFinder
+            */
+            UsRangeFinder* GetUsRangeFinder(void) const;
+
+        private:
+            typedef struct nav_struct
+            {
+                uint16_t size;                // +0x00 Size of the following data (always 0x3a)
+                uint16_t seq;                 // +0x02 Sequence number, increases every update
+                uint16_t acc[3];              // +0x04 Raw data (10-bit) of the accelerometers multiplied by 4
+                int16_t gyro[3];             // +0x0A Raw data for the gyros, 12-bit A/D converted voltage of the gyros. X,Y=IDG, Z=Epson
+                uint16_t acc_temp;            // +0x10 Accs temperature -- startup value 120 @ 25C, rising to 143
+                uint16_t gyro_temp;           // +0x12 XYGyro temperature (IDG), 12-bit A/D converted voltage of IDG's temperature sensor -- startup value 1532 @ 25C, rising to 1572
+                uint16_t us_echo;             // +0x14 bit15=1 echo pulse transmitted, bit14-0 first echo. Value 30 = 1cm. min value: 784 = 26cm
+                uint16_t us_echo_start;       // +0x16 Array with starts of echos (8 array values @ 25Hz, 9 values @ 22.22Hz)
+                uint16_t us_echo_end;         // +0x18 Array with ends of echos   (8 array values @ 25Hz, 9 values @ 22.22Hz)
+                uint16_t us_association_echo; // +0x1a Ultrasonic parameter -- echo number starting with 0. max value 3758. examples: 0,1,2,3,4,5,6,7  ; 0,1,2,3,4,86,6,9
+                uint16_t us_distance_echo;    // +0x1c Ultrasonic parameter -- no clear pattern
+                uint16_t us_courbe_temps;     // +0x1e Ultrasonic parameter -- counts up from 0 to approx 24346 in 192 sample cycles of which 12 cylces have value 0
+                uint16_t us_courbe_valeur;    // +0x20 Ultrasonic parameter -- value between 0 and 4000, no clear pattern. 192 sample cycles of which 12 cylces have value 0
+                uint16_t us_courbe_ref;       // +0x22 Ultrasonic parameter -- coutns down from 4000 to 0 in 192 sample cycles of which 12 cylces have value 0
+                uint16_t nb_echo;
+                uint32_t sum_echo;
+                int16_t gradient;
+                uint16_t flag_echo_ini;
+                int32_t pressure;
+                int16_t temprature_pressure;
+                int16_t mag[3];
+                uint16_t checksum;
+            } __attribute__ ((packed)) nav_struct;
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            uint16_t Checksum(const uint8_t *data) const;
+            void computeDatas(nav_struct* nav,core::Time time);
+
+            Imu* imu;
+            UsRangeFinder* us;
+            core::SerialPort* serialport;
+    };
+} // end namespace sensor
+} // end namespace flair
+
+#endif // PARROTNAVBOARD_H
Index: trunk/include/FlairSensorActuator/Ps3Eye.h
===================================================================
--- trunk/include/FlairSensorActuator/Ps3Eye.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Ps3Eye.h	(revision 4)
@@ -0,0 +1,68 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Ps3Eye.h
+ * \brief Class for Ps3Eye camera
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2012/01/19
+ * \version 4.0
+ */
+
+#ifndef PS3EYE_H
+#define PS3EYE_H
+
+#include "V4LCamera.h"
+
+namespace flair
+{
+    namespace core
+    {
+        class cvimage;
+        class FrameworkManager;
+    }
+    namespace gui
+    {
+        class GridLayout;
+        class DoubleSpinBox;
+        class CheckBox;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class Ps3Eye
+    *
+    * \brief Class for Ps3Eye camera
+    */
+    class Ps3Eye : public V4LCamera
+    {
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Ps3Eye.
+            *
+            * \param parent parent
+            * \param name name
+            * \param camera_index index of the camera, ie /dev/videox
+            * \param priority priority of the Thread
+            */
+            Ps3Eye(const core::FrameworkManager* parent,std::string name,int camera_index,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Ps3Eye();
+
+        private:
+    };
+} // end namespace sensor
+} // end namespace flair
+
+#endif // PS3EYE_H
Index: trunk/include/FlairSensorActuator/RadioReceiver.h
===================================================================
--- trunk/include/FlairSensorActuator/RadioReceiver.h	(revision 4)
+++ trunk/include/FlairSensorActuator/RadioReceiver.h	(revision 4)
@@ -0,0 +1,104 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file RadioReceiver.h
+ * \brief Base class for radio receiver
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/07/08
+ * \version 4.0
+ */
+
+#ifndef RADIORECEIVER_H
+#define RADIORECEIVER_H
+
+#include <IODevice.h>
+#include <stdint.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class Tab;
+        class TabWidget;
+        class Layout;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class RadioReceiver
+    *
+    * \brief Base class for radio receiver
+    */
+    class RadioReceiver : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a RadioReceiver.
+            *
+            * \param parent parent
+            * \param name name
+            * \param nb_channels number of supported channels
+            */
+            RadioReceiver(const core::FrameworkManager* parent,std::string name,unsigned int nb_channels);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~RadioReceiver();
+
+            /*!
+            * \brief get channel value
+            *
+            * \param id channel id
+            * \return value of the channel, between 0 and 1.
+            *  Returns -1 if channel is out of bound
+            */
+            float ChannelValue(unsigned int id) const;
+
+            /*!
+            * \brief Is transmitter connected?
+            *
+            * \return true if transmitter is connected
+            */
+            bool IsConnected(void) const;
+
+            /*!
+            * \brief Setup Layout
+            *
+            * \return a Layout available
+            */
+            gui::Layout* GetLayout(void) const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            core::cvmatrix *output;
+            bool is_connected;
+            unsigned int nb_channels;
+            gui::Tab* main_tab;
+            gui::TabWidget* tab;
+            gui::Tab* setup_tab;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // RADIORECEIVER_H
Index: trunk/include/FlairSensorActuator/SimuBldc.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuBldc.h	(revision 4)
+++ trunk/include/FlairSensorActuator/SimuBldc.h	(revision 4)
@@ -0,0 +1,119 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuBldc.h
+ * \brief Class for a simulation bldc
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/02/07
+ * \version 4.0
+ */
+
+#ifndef SIMUBLDC_H
+#define SIMUBLDC_H
+
+#include <Bldc.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class SharedMem;
+        class IODevice;
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class DoubleSpinBox;
+        class Layout;
+    }
+}
+
+namespace flair
+{
+namespace actuator
+{
+    /*! \class SimuBldc
+    *
+    * \brief Class for a simulation bldc
+    *
+    */
+    class SimuBldc : public Bldc
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuBldc. Control part.
+            *
+            * \param parent parent
+            * \param layout layout
+            * \param name name
+            * \param motors_count number of motors
+            * \param dev_id device id
+            */
+            SimuBldc(const core::IODevice* parent,gui::Layout* layout,std::string name,uint8_t motors_count,uint32_t dev_id);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuBldc. Simulation part.
+            *
+            * \param parent parent
+            * \param name name
+            * \param motors_count number of motors
+            * \param dev_id device id
+            */
+            SimuBldc(const core::Object* parent,std::string name,uint8_t motors_count,uint32_t dev_id);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuBldc();
+
+            /*!
+            * \brief Get motors speeds.
+            *
+            * This function should only be used for the simulation part.
+            *
+            * \param value array to store motors speeds
+            */
+            void GetSpeeds(float* value) const;
+
+            /*!
+            * \brief Has speed measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has speed measurement
+            */
+            bool HasSpeedMeasurement(void) const{return false;};
+
+            /*!
+            * \brief Has current measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has current measurement
+            */
+            bool HasCurrentMeasurement(void) const{return false;};
+
+        private:
+            /*!
+            * \brief Set motors values
+            *
+            * Reimplemented from Bldc. \n
+            * Values size must be the same as MotorsCount()
+            *
+            * \param values motor values
+            */
+            void SetMotors(float* value);
+
+            core::SharedMem *shmem;
+            gui::DoubleSpinBox *k;
+    };
+} // end namespace actuator
+} // end namespace flair
+#endif // SIMUBLDC_H
Index: trunk/include/FlairSensorActuator/SimuCamera.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuCamera.h	(revision 4)
+++ trunk/include/FlairSensorActuator/SimuCamera.h	(revision 4)
@@ -0,0 +1,110 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuCamera.h
+ * \brief Class for a simulation camera
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/03/06
+ * \version 4.0
+ */
+
+#ifndef SIMUCAMERA_H
+#define SIMUCAMERA_H
+
+#include <Camera.h>
+#include <Thread.h>
+#include <cxcore.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class SharedMem;
+    }
+    namespace gui
+    {
+        class SpinBox;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class SimuCamera
+    *
+    * \brief Class for a simulation camera
+    */
+    class SimuCamera : public core::Thread, public Camera
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuCamera. Control part.
+            *
+            * \param parent parent
+            * \param name name
+            * \param width width
+            * \param height height
+            * \param channels number of channels
+            * \param dev_id device id
+            * \param priority priority of the Thread
+            */
+            SimuCamera(const core::FrameworkManager* parent,std::string name,uint16_t width,uint16_t height,uint8_t channels,uint32_t dev_id,uint8_t priority);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuCamera. Simulation part.\n
+            * The Thread of this class should not be run.
+            *
+            * \param parent parent
+            * \param name name
+            * \param width width
+            * \param height height
+            * \param channels number of channels
+            * \param dev_id device id
+            */
+            SimuCamera(const core::IODevice* parent,std::string name,uint16_t width,uint16_t height,uint8_t channels,uint32_t dev_id);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuCamera();
+
+        protected:
+            /*!
+            * \brief SharedMem to access datas
+            *
+            */
+            core::SharedMem *shmem;
+
+        private:
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            gui::SpinBox *data_rate;
+            size_t buf_size;
+            IplImage* img;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUCAMERA_H
Index: trunk/include/FlairSensorActuator/SimuGps.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuGps.h	(revision 4)
+++ trunk/include/FlairSensorActuator/SimuGps.h	(revision 4)
@@ -0,0 +1,76 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuGps.h
+ * \brief Class for a simulation GPS
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/08/23
+ * \version 4.0
+ */
+
+#ifndef SIMUGPS_H
+#define SIMUGPS_H
+
+#include <Thread.h>
+#include <Gps.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class SimuGps
+    *
+    * \brief Class for a simulation GPS
+    */
+    class SimuGps : public core::Thread, public Gps
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Novatel.
+            *
+            * \param parent parent
+            * \param name name
+            * \param NMEAFlags NMEA sentances to enable
+            * \param priority priority of the Thread
+            */
+            SimuGps(const core::FrameworkManager* parent,std::string name,Gps::NMEAFlags_t NMEAFlags,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuGps();
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+    };
+} // end namespace sensor
+} // end namespace framewor
+#endif // SIMUGPS_H
Index: trunk/include/FlairSensorActuator/SimuImu.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuImu.h	(revision 4)
+++ trunk/include/FlairSensorActuator/SimuImu.h	(revision 4)
@@ -0,0 +1,99 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuImu.h
+ * \brief Class for a simulation Imu
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/02/07
+ * \version 4.0
+ */
+
+#ifndef SIMUIMU_H
+#define SIMUIMU_H
+
+#include <Imu.h>
+#include <Thread.h>
+
+namespace flair {
+    namespace core     {
+        class SharedMem;
+        class AhrsData;
+    }
+    namespace gui {
+        class SpinBox;
+    }
+}
+
+namespace flair { namespace sensor {
+    /*! \class SimuImu
+    *
+    * \brief Class for a simulation Imu
+    */
+    class SimuImu : public Imu, public core::Thread {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuImu. Control part.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id device id
+            * \param priority priority of the Thread
+            */
+            SimuImu(const core::FrameworkManager* parent,std::string name,uint32_t dev_id,uint8_t priority);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuImu. Simulation part.\n
+            * The Thread of this class should not be run.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id device id
+            */
+            SimuImu(const core::IODevice* parent,std::string name,uint32_t dev_id);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuImu();
+
+        private:
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data);
+
+            typedef struct {
+                float q0;
+                float q1;
+                float q2;
+                float q3;
+                float wx;
+                float wy;
+                float wz;
+            } imu_states_t;
+            gui::SpinBox *data_rate;
+            core::SharedMem *shmem;
+            core::AhrsData *ahrsData;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUIMU_H
Index: trunk/include/FlairSensorActuator/SimuLaser.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuLaser.h	(revision 4)
+++ trunk/include/FlairSensorActuator/SimuLaser.h	(revision 4)
@@ -0,0 +1,101 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuUs.h
+ * \brief Class for a simulation UsRangeFinder
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/02/07
+ * \version 4.0
+ */
+
+#ifndef SIMULASER_H
+#define SIMULASER_H
+
+#include <LaserRangeFinder.h>
+#include <Thread.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class SharedMem;
+    }
+    namespace gui
+    {
+        class SpinBox;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class SimuUs
+    *
+    * \brief Class for a simulation UsRangeFinder
+    */
+    class SimuLaser : public core::Thread, public LaserRangeFinder
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuUs. Control part.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id device id
+            * \param priority priority of the Thread
+            */
+            SimuLaser(const core::FrameworkManager* parent,std::string name,uint32_t dev_id,uint8_t priority);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuUs. Simulation part.\n
+            * The Thread of this class should not be run.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id device id
+            */
+            SimuLaser(const core::IODevice* parent,std::string name,uint32_t dev_id);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuLaser();
+
+        protected:
+            /*!
+            * \brief SharedMem to access datas
+            *
+            */
+            core::SharedMem *shmem;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            gui::SpinBox *data_rate;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMULASER_H
Index: trunk/include/FlairSensorActuator/SimuUs.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuUs.h	(revision 4)
+++ trunk/include/FlairSensorActuator/SimuUs.h	(revision 4)
@@ -0,0 +1,101 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuUs.h
+ * \brief Class for a simulation UsRangeFinder
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/02/07
+ * \version 4.0
+ */
+
+#ifndef SIMUUS_H
+#define SIMUUS_H
+
+#include <UsRangeFinder.h>
+#include <Thread.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class SharedMem;
+    }
+    namespace gui
+    {
+        class SpinBox;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class SimuUs
+    *
+    * \brief Class for a simulation UsRangeFinder
+    */
+    class SimuUs : public core::Thread, public UsRangeFinder
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuUs. Control part.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id device id
+            * \param priority priority of the Thread
+            */
+            SimuUs(const core::FrameworkManager* parent,std::string name,uint32_t dev_id,uint8_t priority);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuUs. Simulation part.\n
+            * The Thread of this class should not be run.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id device id
+            */
+            SimuUs(const core::IODevice* parent,std::string name,uint32_t dev_id);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuUs();
+
+        protected:
+            /*!
+            * \brief SharedMem to access datas
+            *
+            */
+            core::SharedMem *shmem;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            gui::SpinBox *data_rate;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUUS_H
Index: trunk/include/FlairSensorActuator/Srf08.h
===================================================================
--- trunk/include/FlairSensorActuator/Srf08.h	(revision 4)
+++ trunk/include/FlairSensorActuator/Srf08.h	(revision 4)
@@ -0,0 +1,107 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Srf08.h
+ * \brief Class for ultra sonic SRF08
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/05/01
+ * \version 4.0
+ */
+
+#ifndef SRF08_H
+#define SRF08_H
+
+#include <Thread.h>
+#include <UsRangeFinder.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class I2cPort;
+    }
+    namespace gui
+    {
+        class SpinBox;;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class Srf08
+    *
+    * \brief Class for ultra sonic SRF08
+    */
+    class Srf08 : public core::Thread, public UsRangeFinder
+    {
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a SimuUs. Control part.
+            *
+            * \param parent parent
+            * \param name name
+            * \param i2cport i2c port
+            * \param address i2c slave address
+            * \param priority priority of the Thread
+            */
+            Srf08(const core::FrameworkManager* parent,std::string name,core::I2cPort* i2cport,uint16_t address,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Srf08();
+
+            /*!
+            * \brief Set Range
+            *
+            * check datasheet for values
+            */
+            void SetRange(void);
+
+            /*!
+            * \brief Set Max Gain
+            *
+            * check datasheet for values
+            */
+            void SetMaxGain(void);
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            void SendEcho(void);
+            void GetEcho(void);
+
+            bool is_init;
+            core::Time echo_time;
+            float z_1,z_2;
+            gui::SpinBox *gain,*range;
+            uint16_t address;
+            core::I2cPort* i2cport;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // SRF08_H
Index: trunk/include/FlairSensorActuator/TargetController.h
===================================================================
--- trunk/include/FlairSensorActuator/TargetController.h	(revision 4)
+++ trunk/include/FlairSensorActuator/TargetController.h	(revision 4)
@@ -0,0 +1,96 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2015/04/14
+//  filename:   TargetController.h
+//
+//  author:     Gildas Bayard
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Base class for target side remote controls
+//
+//
+/*********************************************************************/
+
+#ifndef TARGETCONTROLLER_H
+#define TARGETCONTROLLER_H
+
+#include <IODevice.h>
+#include <Thread.h>
+#include <stdint.h>
+#include <queue>
+
+namespace flair {
+    namespace core {
+        class FrameworkManager;
+        class cvmatrix;
+        class Socket;
+        class io_data;
+    }
+    namespace gui {
+        class Tab;
+        class TabWidget;
+        class DataPlot1D;
+    }
+}
+
+namespace flair { namespace sensor {
+    enum class ControllerAction;
+
+    /*! \class TargetController
+    *
+    * \brief Base Class for target side remote controls
+    *
+    */
+    class TargetController : public core::Thread, public core::IODevice {
+    public:
+        TargetController(const core::FrameworkManager* parent,std::string name,uint8_t priority=0);
+        ~TargetController();
+        //void DrawUserInterface();
+        virtual bool IsConnected() const=0;
+        virtual bool IsDataFrameReady()=0;
+        //axis stuff
+        unsigned int GetAxisNumber() const;
+        virtual std::string GetAxisName(unsigned int axisId) const;
+        float GetAxisValue(unsigned int axisId) const;// always in the range [-1.0,1.0]
+        //button stuff
+        unsigned int GetButtonNumber() const;
+        bool IsButtonPressed(unsigned int buttonId) const;
+        virtual std::string GetButtonName(unsigned int axisId) const;
+        //controller state stuff
+        virtual bool IsControllerActionSupported(ControllerAction action) const {return false;};
+        bool SetLedOn(unsigned int ledId);
+        bool SetLedOff(unsigned int ledId);
+        bool Rumble(unsigned int left_force,unsigned int left_timeout,unsigned int right_force,unsigned int right_timeout);
+        bool FlashLed(unsigned int ledId,unsigned int on_timeout,unsigned int off_timeout);
+        void UpdateFrom(const core::io_data *data){}; //TODO
+        gui::Tab* GetTab(void) const;
+
+    protected:
+        virtual bool ProcessMessage(core::Message *msg)=0;
+        void QueueMessage(core::Message msg);
+        virtual bool ControllerInitialization()=0;// {return true;};
+        //axis stuff
+        unsigned int axisNumber;
+        core::cvmatrix* axis=NULL;
+        virtual void AcquireAxisData(core::cvmatrix &axis)=0; //responsible for getting the axis data from the hardware
+        uint16_t bitsPerAxis;
+        //button stuff
+        unsigned int buttonNumber;
+        core::cvmatrix* button=NULL;
+        virtual void AcquireButtonData(core::cvmatrix &button)=0; //responsible for getting the button data from the hardware
+        //controller state stuff
+        unsigned int ledNumber;
+    private:
+        void Run();
+        std::queue<core::Message *> changeStateQueue;
+        flair::gui::Tab* main_tab;
+        flair::gui::Tab* setup_tab;
+    };
+
+}}
+
+#endif // TARGETCONTROLLER_H
Index: trunk/include/FlairSensorActuator/TargetEthController.h
===================================================================
--- trunk/include/FlairSensorActuator/TargetEthController.h	(revision 4)
+++ trunk/include/FlairSensorActuator/TargetEthController.h	(revision 4)
@@ -0,0 +1,85 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2015/04/14
+//  filename:   TargetEthController.h
+//
+//  author:     Gildas Bayard
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    class that gets remote controls through an ethernet connection.
+//              Typical use case: a remote control is plugged in a workstation and sends remote control
+//              data to a distant target (this class) through Wifi
+//
+//
+/*********************************************************************/
+
+#ifndef TARGETETHCONTROLLER_H
+#define TARGETETHCONTROLLER_H
+
+#include "TargetController.h"
+
+namespace flair {
+    namespace core {
+        class FrameworkManager;
+        class cvmatrix;
+        class TcpSocket;
+        class Socket;
+    }
+    namespace gui {
+        class Tab;
+        class TabWidget;
+        class DataPlot1D;
+    }
+}
+
+namespace flair { namespace sensor {
+    /*! \class TargetController
+    *
+    * \brief Base Class for target side remote controls
+    *
+    */
+    class TargetEthController : public TargetController {
+    public:
+        TargetEthController(const core::FrameworkManager* parent,std::string name,uint16_t port,uint8_t priority=0);
+        ~TargetEthController();
+        //void DrawUserInterface();
+    protected:
+        bool IsConnected() const;
+        //axis stuff
+        std::string GetAxisName(unsigned int axisId) const;
+        //button stuff
+        std::string GetButtonName(unsigned int axisId) const;
+        //controller state stuff
+        bool ProcessMessage(core::Message *msg);
+        bool IsControllerActionSupported(ControllerAction action) const;
+
+        bool IsDataFrameReady();
+        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 hardware
+
+        bool ControllerInitialization();
+
+    private:
+        uint16_t readBits(uint8_t offsetInBits,uint8_t valueSizeInBits,char *buffer,size_t bufferSize);
+        uint8_t getByteOrNull(char *buffer,int byte,size_t bufferSize);
+        uint32_t charBufferToUint32(char *buffer, size_t bufferSize);
+        core::TcpSocket *listeningSocket;
+        int listeningPort;
+        core::TcpSocket *controlSocket=NULL;
+        core::Socket *dataSocket;
+        std::string *axisName=NULL;
+        std::string *buttonName=NULL;
+        size_t dataFrameSize;
+        char *dataFrameBuffer;
+        char *receiveFrameBuffer;
+        size_t receiveCurrentPosition;
+        uint8_t buttonOffset;
+    };
+
+}}
+
+#endif // TARGETCONTROLLER_H
Index: trunk/include/FlairSensorActuator/UsRangeFinder.h
===================================================================
--- trunk/include/FlairSensorActuator/UsRangeFinder.h	(revision 4)
+++ trunk/include/FlairSensorActuator/UsRangeFinder.h	(revision 4)
@@ -0,0 +1,155 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file UsRangeFinder.h
+ * \brief Base class for UsRangeFinder
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/01/22
+ * \version 4.0
+ */
+
+#ifndef USRANGEFINDER_H
+#define USRANGEFINDER_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class Tab;
+        class TabWidget;
+        class GroupBox;
+        class Layout;
+        class DataPlot1D;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class UsRangeFinder
+    *
+    * \brief Base class for UsRangeFinder
+    *
+    * Use this class to define a custom UsRangeFinder.
+    *
+    */
+    class UsRangeFinder : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a UsRangeFinder. Control part.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            UsRangeFinder(const core::FrameworkManager* parent,std::string name);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a UsRangeFinder. Simulation part.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            UsRangeFinder(const core::IODevice* parent,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~UsRangeFinder();
+
+            /*!
+            * \brief Lock user interface
+            *
+            */
+            void LockUserInterface(void) const;
+
+            /*!
+            * \brief Unlock user interface
+            *
+            */
+            void UnlockUserInterface(void) const;
+
+            /*!
+            * \brief Use default plot
+            *
+            * Should no be used for the simulation part.
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief Plot
+            *
+            * \return DataPlot1D
+            */
+            gui::DataPlot1D* GetPlot(void) const;
+
+            /*!
+            * \brief Setup Layout
+            *
+            * \return a Layout available
+            */
+            gui::Layout* GetLayout(void) const;
+
+            /*!
+            * \brief Plot tab
+            *
+            * \return plot Tab
+            */
+            gui::Tab* GetPlotTab(void) const;
+
+            /*!
+            * \brief Value
+            *
+            * \return output value
+            */
+            float Value(void) const;
+
+        protected:
+            /*!
+            * \brief Output matrix
+            *
+            * \return output matrix
+            */
+            core::cvmatrix *output;
+
+            /*!
+            * \brief Setup GroupBox
+            *
+            * \return a GroupBox available
+            */
+            gui::GroupBox* GetGroupBox(void) const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            gui::Tab* main_tab;
+            gui::TabWidget *tab;
+            gui::GroupBox* setup_groupbox;
+            gui::Tab* sensor_tab;
+            gui::DataPlot1D* plot;
+            gui::Tab* plot_tab;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // USRANGEFINDER_H
Index: trunk/include/FlairSensorActuator/V4LCamera.h
===================================================================
--- trunk/include/FlairSensorActuator/V4LCamera.h	(revision 4)
+++ trunk/include/FlairSensorActuator/V4LCamera.h	(revision 4)
@@ -0,0 +1,152 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file V4LCamera.h
+ * \brief Base class for V4l camera
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/07/17
+ * \version 4.0
+ */
+
+#ifndef V4LCamera_H
+#define V4LCamera_H
+
+#include <Thread.h>
+#include "Camera.h"
+#include <highgui.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvimage;
+        class FrameworkManager;
+    }
+    namespace gui
+    {
+        class GridLayout;
+        class DoubleSpinBox;
+        class CheckBox;
+        class Label;
+    }
+}
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class V4LCamera
+    *
+    * \brief Base class for V4l camera
+    */
+    class V4LCamera : public core::Thread, public Camera
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a Camera.
+            *
+            * \param parent parent
+            * \param name name
+            * \param camera_index camera index
+            * \param width width
+            * \param height height
+            * \param format image format
+            * \param priority priority of the Thread
+            */
+            V4LCamera(const core::FrameworkManager* parent,std::string name,uint8_t camera_index,uint16_t width,uint16_t height,core::cvimage::Type::Format format,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~V4LCamera();
+
+        protected:
+            /*!
+            * \brief Set Gain
+            *
+            * \param value value between 0 and 1
+            */
+            virtual void SetGain(float value);
+
+            /*!
+            * \brief Set Auto Gain
+            *
+            * \param value value
+            */
+            virtual void SetAutoGain(bool value);
+
+            /*!
+            * \brief Set Exposure
+            *
+            * \param value value between 0 and 1
+            */
+            virtual void SetExposure(float value);
+
+            /*!
+            * \brief Set Auto Exposure
+            *
+            * \param value value
+            */
+            virtual void SetAutoExposure(bool value);
+
+            /*!
+            * \brief Set Brightness
+            *
+            * \param value value between 0 and 1
+            */
+            virtual void SetBrightness(float value);
+
+            /*!
+            * \brief Set Saturation
+            *
+            * \param value value between 0 and 1
+            */
+            virtual void SetSaturation(float value);
+
+            /*!
+            * \brief Set Hue
+            *
+            * \param value value between 0 and 1
+            */
+            virtual void SetHue(float value);
+
+            /*!
+            * \brief Set Contrast
+            *
+            * \param value value between 0 and 1
+            */
+            virtual void SetContrast(float value);
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            CvCapture* capture;
+
+            gui::Tab* sensor_tab;
+            gui::DoubleSpinBox *bright,*exposure,*gain,*contrast,*hue,*sharpness,*sat;
+            gui::CheckBox *autogain,*awb,*autoexposure;
+            gui::Label *fps;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // V4LCamera_H
Index: trunk/include/FlairSensorActuator/VrpnClient.h
===================================================================
--- trunk/include/FlairSensorActuator/VrpnClient.h	(revision 4)
+++ trunk/include/FlairSensorActuator/VrpnClient.h	(revision 4)
@@ -0,0 +1,114 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file VrpnClient.h
+ * \brief Class to connect to a Vrpn server
+ * \author César Richard, Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/04/03
+ * \version 4.0
+ */
+
+#ifndef VRPNCLIENT_H
+#define VRPNCLIENT_H
+
+#include <Thread.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class SerialPort;
+    }
+    namespace gui
+    {
+        class TabWidget;
+        class Layout;
+    }
+}
+
+class VrpnClient_impl;
+class VrpnObject_impl;
+
+namespace flair
+{
+namespace sensor
+{
+    /*! \class VrpnClient
+    *
+    * \brief Class to connect to a Vrpn server
+    */
+    class VrpnClient:public core::Thread
+    {
+        friend class ::VrpnObject_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a VrpnClient. Connection is done by IP.
+            *
+            * \param parent parent
+            * \param name name
+            * \param address server address
+            * \param us_period Thread period in us
+            * \param priority priority of the Thread
+            */
+            VrpnClient(const core::FrameworkManager* parent,std::string name,std::string address,uint16_t us_period,uint8_t priority);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a VrpnClient. Connection is done by XBee modem.
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport SerialPort for XBee modem
+            * \param us_period Xbee RX timeout in us
+            * \param priority priority of the Thread
+            */
+            VrpnClient(const core::FrameworkManager* parent,std::string name,core::SerialPort* serialport,uint16_t us_period,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~VrpnClient();
+
+            /*!
+            * \brief Setup Layout
+            *
+            * \return a Layout available
+            */
+            gui::Layout* GetLayout(void) const;
+
+            /*!
+            * \brief Setup Tab
+            *
+            * \return a Tab available
+            */
+            gui::TabWidget* GetTabWidget(void) const;
+
+            /*!
+            * \brief Is XBee used?
+            *
+            * \return true if connection is based on XBee modem
+            */
+            bool UseXbee(void) const;
+
+        private:
+            /*!
+            * \brief Run function
+            *
+            * Reimplemented from Thread.
+            *
+            */
+            void Run(void);
+
+            class VrpnClient_impl* pimpl_;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // VRPNCLIENT_H
Index: trunk/include/FlairSensorActuator/VrpnObject.h
===================================================================
--- trunk/include/FlairSensorActuator/VrpnObject.h	(revision 4)
+++ trunk/include/FlairSensorActuator/VrpnObject.h	(revision 4)
@@ -0,0 +1,189 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file VrpnObject.h
+ * \brief Class for VRPN object
+ * \author César Richard, Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/04/03
+ * \version 4.0
+ */
+
+#ifndef VRPNOBJECT_H
+#define VRPNOBJECT_H
+
+#include <IODevice.h>
+#include <stdint.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+        class Vector3D;
+        class Euler;
+        class Quaternion;
+    }
+    namespace gui
+    {
+        class TabWidget;
+        class Tab;
+        class DataPlot1D;
+    }
+}
+
+class VrpnObject_impl;
+class VrpnClient_impl;
+
+namespace flair
+{
+namespace sensor
+{
+    class VrpnClient;
+
+    /*! \class VrpnObject
+    *
+    * \brief Class for VRPN object
+    */
+    class VrpnObject: public core::IODevice
+    {
+        friend class ::VrpnObject_impl;
+        friend class ::VrpnClient_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a VrpnObject. Connection is done by IP.
+            *
+            * \param parent parent
+            * \param name VRPN object name, should be the same as defined in the server
+            * \param tab Tab for the user interface
+            */
+            VrpnObject(const VrpnClient *parent,std::string name,const gui::TabWidget* tab);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a VrpnObject. Connection is done by IP.
+            *
+            * \param parent parent
+            * \param name name
+            * \param id VRPN object id, should be the same as defined in the server
+            * \param tab Tab for the user interface
+            */
+            VrpnObject(const VrpnClient *parent,std::string name,uint8_t id,const gui::TabWidget* tab);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~VrpnObject(void);
+
+            /*!
+            * \brief Plot tab
+            *
+            * \return plot Tab
+            */
+            gui::Tab* GetPlotTab(void) const;
+
+            /*!
+            * \brief Get Last Packet Time
+            *
+            * \return Time of last received packe
+            */
+            core::Time GetLastPacketTime(void) const;
+
+            /*!
+            * \brief Is object tracked?
+            *
+            * \param timeout_ms timeout
+            * \return true if object is tracked during timeout_ms time
+            */
+            bool IsTracked(unsigned int timeout_ms) const;
+
+            /*!
+            * \brief Get Euler angles
+            *
+            * \param euler output datas
+            */
+            void GetEuler(core::Euler &euler) const;
+
+            /*!
+            * \brief Get Quaternion
+            *
+            * \param quaternion output datas
+            */
+            void GetQuaternion(core::Quaternion &quaternion) const;
+            /*!
+            * \brief Get Position
+            *
+            * \param point output datas
+            */
+            void GetPosition(core::Vector3D &point) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * Matrix is of type float and as follows: \n
+            * (0,0) roll (rad) \n
+            * (1,0) pitch (rad) \n
+            * (2,0) yaw (rad) \n
+            * (3,0) x \n
+            * (4,0) y \n
+            * (5,0) z \n
+            *
+            * \return Output metrix
+            */
+            core::cvmatrix *Output(void) const;
+
+            /*!
+            * \brief State matrix
+            *
+            * Matrix is of type float and as follows: \n
+            * (0,0) roll (deg) \n
+            * (1,0) pitch (deg) \n
+            * (2,0) yaw (deg) \n
+            *
+            * \return State metrix
+            */
+            core::cvmatrix *State(void) const;
+
+            /*!
+            * \brief x plot
+            *
+            * \return x plot
+            */
+            gui::DataPlot1D* xPlot(void) const;
+
+            /*!
+            * \brief y plot
+            *
+            * \return y plot
+            */
+            gui::DataPlot1D* yPlot(void) const;
+
+            /*!
+            * \brief z plot
+            *
+            * \return z plot
+            */
+            gui::DataPlot1D* zPlot(void) const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            void mainloop(void);
+            class VrpnObject_impl* pimpl_;
+    };
+} // end namespace sensor
+} // end namespace flair
+#endif // VRPNOBJECT_H
Index: trunk/include/FlairSensorActuator/XBldc.h
===================================================================
--- trunk/include/FlairSensorActuator/XBldc.h	(revision 4)
+++ trunk/include/FlairSensorActuator/XBldc.h	(revision 4)
@@ -0,0 +1,95 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file XBldc.h
+ * \brief Class for Xufo Bldc
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/11/13
+ * \version 4.0
+ */
+
+#ifndef XBLDC_H
+#define XBLDC_H
+
+#include "Bldc.h"
+
+namespace flair
+{
+    namespace core
+    {
+        class IODevice;
+        class I2cPort;
+    }
+    namespace gui
+    {
+        class Layout;
+    }
+}
+
+class XBldc_impl;
+
+namespace flair
+{
+namespace actuator
+{
+    /*! \class XBldc
+    *
+    * \brief Class for Xufo Bldc
+    */
+    class XBldc : public Bldc
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a XBldc.
+            *
+            * \param parent parent
+            * \param layout layout
+            * \param name name
+            * \param i2cport i2cport
+            */
+            XBldc(const core::IODevice* parent,gui::Layout* layout,std::string name,core::I2cPort* i2cport);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~XBldc();
+
+            /*!
+            * \brief Has speed measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has speed measurement
+            */
+            bool HasSpeedMeasurement(void) const{return false;};
+
+            /*!
+            * \brief Has current measurement
+            *
+            * Reimplemented from Bldc. \n
+            *
+            * \return true if it has current measurement
+            */
+            bool HasCurrentMeasurement(void) const{return false;};
+
+        private:
+            /*!
+            * \brief Set motors values
+            *
+            * Reimplemented from Bldc. \n
+            * Values size must be the same as MotorsCount()
+            *
+            * \param values motor values
+            */
+            void SetMotors(float* value);
+
+            class XBldc_impl* pimpl_;
+    };
+} // end namespace actuator
+} // end namespace flair
+#endif // XBLDC_H
