Index: /trunk/include/FlairFilter/Ahrs.h
===================================================================
--- /trunk/include/FlairFilter/Ahrs.h	(revision 6)
+++ /trunk/include/FlairFilter/Ahrs.h	(revision 6)
@@ -0,0 +1,181 @@
+/*!
+ * \file Ahrs.h
+ * \brief Abstract class for AHRS
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/01/14
+ * \version 4.0
+ */
+
+#ifndef AHRS_H
+#define AHRS_H
+
+#include <IODevice.h>
+#include <DataPlot.h>
+
+namespace flair {
+    namespace core {
+        class Euler;
+        class Vector3D;
+        class ImuData;
+        class Quaternion;
+        class AhrsData;
+    }
+    namespace gui {
+        class Tab;
+        class DataPlot1D;
+    }
+    namespace sensor {
+        class Imu;
+    }
+}
+
+class Ahrs_impl;
+
+namespace flair { namespace filter {
+    /*! \class Ahrs
+    *
+    * \brief Abstract class for AHRS
+    *
+    * Use this class to define a custom AHRS. This class is child
+    * of an Imu class, which will provide measurements. \n
+    *
+    */
+    class Ahrs : public core::IODevice {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an Ahrs.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            Ahrs(const sensor::Imu* parent,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Ahrs();
+
+            /*!
+            * \brief Get parent Imu
+            *
+            * This function is identical to (Imu*)Parent()
+            */
+            const sensor::Imu *GetImu(void) const;
+
+            /*!
+            * \brief Get ahrs datas
+            *
+            * \return AhrsData
+            */
+            const core::AhrsData *GetDatas(void) const;
+
+            /*!
+            * \brief Lock the graphical user interface
+            *
+            * When locked, parameters cannot be modified.
+            *
+            */
+            void LockUserInterface(void) const;
+
+            /*!
+            * \brief Unlock the graphical user interface
+            *
+            */
+            void UnlockUserInterface(void) const;
+
+            /*!
+            * \brief Use default plot
+            *
+            * Plot the datas defined in imudata,
+            * and datas defined in Imu::imudata.
+            *
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief Add plot
+            *
+            * Add plot of an AhrsData to the default plot
+            *
+            * \param ahrsData ahrs datas to plot
+            * \param color color to use
+            */
+            void AddPlot(const core::AhrsData *ahrsData,gui::DataPlot::Color_t color);
+
+            /*!
+            * \brief Roll plot
+            *
+            * Use this plot to add own curves.
+            *
+            * \return plot
+            *
+            */
+            gui::DataPlot1D *RollPlot(void)const ;
+
+            /*!
+            * \brief Pitch plot
+            *
+            * Use this plot to add own curves.
+            *
+            * \return plot
+            *
+            */
+            gui::DataPlot1D *PitchPlot(void) const;
+
+            /*!
+            * \brief Yaw plot
+            *
+            * Use this plot to add own curves.
+            *
+            * \return plot
+            *
+            */
+            gui::DataPlot1D *YawPlot(void) const;
+
+            /*!
+            * \brief Rotation speed around x axis plot
+            *
+            * Use this plot to add own curves.
+            *
+            * \return plot
+            *
+            */
+            gui::DataPlot1D *WXPlot(void) const;
+
+            /*!
+            * \brief Rotation speed around y axis plot
+            *
+            * Use this plot to add own curves.
+            *
+            * \return plot
+            *
+            */
+            gui::DataPlot1D *WYPlot(void) const;
+
+            /*!
+            * \brief Rotation speed around z axis plot
+            *
+            * Use this plot to add own curves.
+            *
+            * \return plot
+            *
+            */
+            gui::DataPlot1D *WZPlot(void) const;
+
+        protected:
+            /*!
+            * \brief Get ahrs datas
+            *
+            * \param ahrsData ahrs datas
+            */
+            void GetDatas(core::AhrsData **ahrsData) const;
+
+        private:
+            class Ahrs_impl *pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // AHRS_H
Index: /trunk/include/FlairFilter/ButterworthLowPass.h
===================================================================
--- /trunk/include/FlairFilter/ButterworthLowPass.h	(revision 6)
+++ /trunk/include/FlairFilter/ButterworthLowPass.h	(revision 6)
@@ -0,0 +1,103 @@
+/*!
+ * \file ButterworthLowPass.h
+ * \brief Class defining a Butterworth low pass filter
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/12/10
+ * \version 4.0
+ */
+
+#ifndef BUTTERWORTHLOWPASS_H
+#define BUTTERWORTHLOWPASS_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class LayoutPosition;
+    }
+}
+
+class ButterworthLowPass_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class ButterworthLowPass
+    *
+    * \brief Class defining a Butterworth low pass filter
+    */
+    class ButterworthLowPass : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ButterworthLowPass at position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            * The filter is automatically updated when parent's
+            * IODevice::ProcessUpdate is called.
+            *
+            * \param parent parent
+            * \param position position to display settings
+            * \param name name
+            * \param order order of the filter
+            */
+            ButterworthLowPass(const IODevice* parent,const gui::LayoutPosition* position,std::string name,int order);
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ButterworthLowPass at position. \n
+            * The ButterworthLowPass will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            * The filter is updated manually with UpdateFrom method. \n
+            *
+            * \param position position to display settings
+            * \param name name
+            * \param order order of the filter
+            */
+            ButterworthLowPass(const gui::LayoutPosition* position,std::string name,int order);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ButterworthLowPass();
+
+            /*!
+            * \brief Output value
+            *
+            * \return filtered output
+            */
+            float Output(void) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * \return filtered output
+            */
+            core::cvmatrix* Matrix(void)const ;
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data);
+
+        private:
+
+            class ButterworthLowPass_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // BUTTERWORTHLOWPASS_H
Index: /trunk/include/FlairFilter/ControlLaw.h
===================================================================
--- /trunk/include/FlairFilter/ControlLaw.h	(revision 6)
+++ /trunk/include/FlairFilter/ControlLaw.h	(revision 6)
@@ -0,0 +1,118 @@
+/*!
+ * \file ControlLaw.h
+ * \brief Base class for control law
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/04/30
+ * \version 4.0
+ */
+
+#ifndef CONTROLLAW_H
+#define CONTROLLAW_H
+
+#include <IODevice.h>
+
+namespace flair {
+    namespace gui {
+        class LayoutPosition;
+    }
+    namespace core {
+        class cvmatrix;
+    }
+}
+
+namespace flair { namespace filter {
+    /*! \class ControlLaw
+    *
+    * \brief Base class for control law
+    * input must be created by reimplemented class.\n
+    * output is created by this class, it is of size (nb_out,1) and type float.\n
+    * see constructor for nb_out
+    */
+    class ControlLaw : public core::IODevice {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a ControlLaw
+            *
+            * \param parent parent
+            * \param name name
+            * \param nb_out number of output
+            */
+            ControlLaw(const core::Object* parent,std::string name,uint32_t nb_out=1);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ControlLaw();
+
+            /*!
+            * \brief Output value
+            *
+            * \param index output index, between 0 and nb_out-1
+            *
+            * \return output value
+            */
+            float Output(uint32_t index=0) const;
+
+            /*!
+            * \brief Use default plot
+            *
+            * Plot the output value at given position. \n
+            * Only Output(1,1) is plotted. \n
+            * In case of a mutliple output ControlLaw, this function should be reimplemented. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display plot
+            */
+            virtual void UseDefaultPlot(const gui::LayoutPosition* position);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented class must fill input matrix before calling this.
+            *
+            * \param time time of the update
+            */
+            void Update(core::Time time);
+
+            /*!
+            * \brief Reset the internal state of the control law
+            *
+            * Doesn't do anything by default
+            *
+            */
+            virtual void Reset() {};
+
+        protected:
+            /*!
+            * \brief input matrix
+            *
+            * This matrix must be created by the reimplemented class.
+            *
+            */
+            core::cvmatrix *input;
+
+            /*!
+            * \brief output matrix
+            *
+            * This matrix is created by this class. Its size is (nb_out,1) and its type
+            * is io_data::Float.
+            *
+            */
+            core::cvmatrix *output;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            virtual void UpdateFrom(const core::io_data *data)=0;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // CONTROLLAW_H
Index: /trunk/include/FlairFilter/EulerDerivative.h
===================================================================
--- /trunk/include/FlairFilter/EulerDerivative.h	(revision 6)
+++ /trunk/include/FlairFilter/EulerDerivative.h	(revision 6)
@@ -0,0 +1,96 @@
+/*!
+ * \file EulerDerivative.h
+ * \brief Class defining an euler derivative
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/05/01
+ * \version 4.0
+ */
+
+#ifndef EULERDERIVATIVE_H
+#define EULERDERIVATIVE_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class LayoutPosition;
+    }
+}
+
+class EulerDerivative_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class EulerDerivative
+    *
+    * \brief Class defining an euler derivative
+    */
+
+    class EulerDerivative : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an EulerDerivative at given position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            * The filter is automatically updated when parent's
+            * IODevice::ProcessUpdate is called. \n
+            * The optional init_value parameters allow to specify
+            * the size of the input datas and its inital values.
+            * If unspecified, a 1*1 size is used, and values are
+            * initialized with 0.
+            *
+            * \param parent parent
+            * \param position position to display settings
+            * \param name name
+            * \param init_value initial value
+            */
+            EulerDerivative(const core::IODevice* parent,const gui::LayoutPosition* position,std::string name,const core::cvmatrix* init_value=NULL);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~EulerDerivative();
+
+            /*!
+            * \brief Output value
+            *
+            * \param row row element
+            * \param col column element
+            *
+            * \return element value
+            */
+            float Output(int row, int col) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * \return filtered output
+            */
+            core::cvmatrix *Matrix(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);
+
+            class EulerDerivative_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // EULERDERIVATIVE_H
Index: /trunk/include/FlairFilter/Gx3_25_ahrs.h
===================================================================
--- /trunk/include/FlairFilter/Gx3_25_ahrs.h	(revision 6)
+++ /trunk/include/FlairFilter/Gx3_25_ahrs.h	(revision 6)
@@ -0,0 +1,65 @@
+/*!
+ * \file Gx3_25_ahrs.h
+ * \brief Class for 3dmgx3-25 ahrs
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/01/16
+ * \version 4.0
+ */
+
+#ifndef GX3_25_AHRS_H
+#define GX3_25_AHRS_H
+
+#include <Ahrs.h>
+#include <Gx3_25_imu.h>
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class Gx3_25_ahrs
+    *
+    * \brief Class for 3dmgx3-25 ahrs
+    *
+    * This class constructs a Gx3_25_imu as Imu of this Ahrs.
+    */
+    class Gx3_25_ahrs : public Ahrs
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an Ahrs for 3dmgx3-25
+            *
+            * \param parent parent
+            * \param name name
+            * \param serialport Imu SerialPort
+            * \param command command for the Gx3_25_imu continuous mode
+            * \param priority priority of the Gx3_25_imu Thread
+            */
+            Gx3_25_ahrs(const core::FrameworkManager* parent,std::string name,core::SerialPort *serialport,sensor::Gx3_25_imu::Command_t command,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Gx3_25_ahrs();
+
+            /*!
+            * \brief Start Gx3_25_imu Thread
+            *
+            */
+            void Start(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);
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // GX3_25_AHRS_H
Index: /trunk/include/FlairFilter/JoyReference.h
===================================================================
--- /trunk/include/FlairFilter/JoyReference.h	(revision 6)
+++ /trunk/include/FlairFilter/JoyReference.h	(revision 6)
@@ -0,0 +1,200 @@
+/*!
+ * \file JoyReference.h
+ * \brief Class creating references from a joystick
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2012/08/29
+ * \version 4.0
+ */
+
+#ifndef JOYREFERENCE_H
+#define JOYREFERENCE_H
+
+#include <IODevice.h>
+#include <stdint.h>
+
+namespace flair
+{
+    namespace core {
+        class Quaternion;
+        class AhrsData;
+    }
+    namespace gui {
+        class LayoutPosition;
+    }
+}
+
+class JoyReference_impl;
+
+namespace flair { namespace filter {
+    /*! \class JoyReference
+    *
+    * \brief Class creating references from a joystick
+    */
+    class JoyReference : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a JoyReference at given position. \n
+            * The JoyReference will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            * JoyReference compute reference in quaternion, wz, altitude and altitude speed.
+            *
+            * \param position position
+            * \param name name
+            */
+            JoyReference(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~JoyReference();
+
+            /*!
+            * \brief Set roll axis value
+            *
+            * \param value value
+            */
+            void SetRollAxis(float value);
+
+            /*!
+            * \brief Set pitch axis value
+            *
+            * \param value value
+            */
+            void SetPitchAxis(float value);
+
+            /*!
+            * \brief Set yaw axis value
+            *
+            * \param value value
+            */
+            void SetYawAxis(float value);
+
+            /*!
+            * \brief Set thrust axis value
+            *
+            * \param value value
+            */
+            void SetAltitudeAxis(float value);
+
+            /*!
+            * \brief Get orientation reference
+            *
+            * \return reference
+            */
+            core::AhrsData* GetReferenceOrientation(void) const;
+
+            /*!
+            * \brief Get z reference
+            *
+            * \return reference
+            */
+            float ZRef(void) const;
+
+            /*!
+            * \brief Get z derivative reference
+            *
+            * \return reference
+            */
+            float DzRef(void) const;
+
+            /*!
+            * \brief Get roll trim
+            *
+            * \return trim value
+            */
+            float RollTrim(void) const;
+
+            /*!
+            * \brief Get pitch trim
+            *
+            * \return trim value
+            */
+            float PitchTrim(void) const;
+
+            /*!
+            * \brief Set yaw reference
+            *
+            * Yaw part of the output quaternion is obtained by integrating the wz desired angular speed.\n
+            * This method reset the yaw.
+            *
+            * \param value value
+            */
+            void SetYawRef(float value);
+
+            /*!
+            * \brief Set yaw reference
+            *
+            * Yaw part of the output quaternion is obtained by integrating the wz desired angular speed.\n
+            * This method reset the yaw.
+            *
+            * \param value value, only the yaw part of the quaternion is used
+            */
+            void SetYawRef(core::Quaternion const &value);
+
+            /*!
+            * \brief Set z reference
+            *
+            * Altitude of the output is obtained by integrating the vz desired altitude speed.\n
+            * This method reset z.
+            *
+            * \param value value
+            */
+            void SetZRef(float value);
+
+            /*!
+            * \brief Trim up roll
+            *
+            * Roll trim value is increased by one
+            */
+            void RollTrimUp(void);
+
+            /*!
+            * \brief Trim down roll
+            *
+            * Roll trim value is decreased by one
+            */
+            void RollTrimDown(void);
+
+            /*!
+            * \brief Trim up pitch
+            *
+            * Pitch trim value is increased by one
+            */
+            void PitchTrimUp(void);
+
+            /*!
+            * \brief Trim down pitch
+            *
+            * Pitch trim value is decreased by one
+            */
+            void PitchTrimDown(void);
+
+            /*!
+            * \brief Update references
+            *
+            * Calls UpdateFrom with values entered manually.
+            *
+            * \param time time
+            */
+            void Update(core::Time time);
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data);
+
+            class JoyReference_impl* pimpl_;
+    };
+} // end namespace sensor
+} // end namespace flair
+
+#endif // JOYREFERENCE_H
Index: /trunk/include/FlairFilter/LowPassFilter.h
===================================================================
--- /trunk/include/FlairFilter/LowPassFilter.h	(revision 6)
+++ /trunk/include/FlairFilter/LowPassFilter.h	(revision 6)
@@ -0,0 +1,96 @@
+/*!
+ * \file LowPassFilter.h
+ * \brief Class defining a first order low pass filter
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/05/01
+ * \version 4.0
+ */
+
+#ifndef LOWPASSFILTER_FILTER_H
+#define LOWPASSFILTER_FILTER_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class Layout;
+        class LayoutPosition;
+    }
+}
+
+class LowPassFilter_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class LowPassFilter
+    *
+    * \brief Class defining a first order low pass filter
+    */
+    class LowPassFilter : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a LowPassFilter at position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            * The filter is automatically updated when parent's
+            * IODevice::ProcessUpdate is called. \n
+            * The optional init_value parameters allow to specify
+            * the size of the input datas and its inital values.
+            * If unspecified, a 1*1 size is used, and values are
+            * initialized with 0.
+            *
+            * \param parent parent
+            * \param position position to display settings
+            * \param name name
+            * \param init_value initial value
+            */
+            LowPassFilter(const core::IODevice* parent,const gui::LayoutPosition* position,std::string name,const core::cvmatrix* init_value=NULL);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~LowPassFilter();
+
+            /*!
+            * \brief Output value
+            *
+            * \param row row element
+            * \param col column element
+            *
+            * \return element value
+            */
+            float Output(int row, int col) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * \return filtered output
+            */
+            core::cvmatrix* Matrix(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);
+
+            class LowPassFilter_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // LOWPASSFILTER_FILTER_H
Index: /trunk/include/FlairFilter/NestedSat.h
===================================================================
--- /trunk/include/FlairFilter/NestedSat.h	(revision 6)
+++ /trunk/include/FlairFilter/NestedSat.h	(revision 6)
@@ -0,0 +1,98 @@
+/*!
+ * \file NestedSat.h
+ * \brief  Class defining a PID with saturations
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/04/15
+ * \version 4.0
+ */
+
+#ifndef NESTEDSAT_H
+#define NESTEDSAT_H
+
+#include <ControlLaw.h>
+
+namespace flair
+{
+    namespace gui
+    {
+        class Layout;
+        class LayoutPosition;
+    }
+}
+
+class NestedSat_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class NestedSat
+    *
+    * \brief  Class defining a PID with saturations
+    *
+    * The output of this control law is calculated
+    * as follows: \n
+    * p_ref=Sat(p_ref,k*sat_ref) \n
+    * d_ref=Sat[(p_ref-p)*kp,k*sat_dref] \n
+    * law=Sat[(d-d_ref)*kd,sat_u] \n
+    * where p, p_ref and d are input values (see SetValues()), \n
+    * where sat_ref, sat_dref and sat_u are settings availables on the ground station, \n
+    * where k is a conversion factor (see ConvertSatFromDegToRad()).
+    */
+    class NestedSat : public ControlLaw
+    {
+        friend class ::NestedSat_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a NestedSat at given place position. \n
+            * The NestedSat will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display settings
+            * \param name name
+            */
+            NestedSat(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~NestedSat();
+
+            /*!
+            * \brief Set input values
+            *
+            * \param p_ref proportional reference
+            * \param p proportional value
+            * \param d derivative value
+            */
+            void SetValues(float p_ref,float p,float d);
+
+            /*!
+            * \brief Convert saturation parameters in radians
+            *
+            * If this function is called, saturation parameters
+            * on the ground station will be interpreted as degrees. \n
+            * Thus, an internal conversion from degrees to radians will
+            * be done (k=PI/180).
+            */
+            void ConvertSatFromDegToRad(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);
+
+            NestedSat_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // NESTEDSAT_H
Index: /trunk/include/FlairFilter/Pid.h
===================================================================
--- /trunk/include/FlairFilter/Pid.h	(revision 6)
+++ /trunk/include/FlairFilter/Pid.h	(revision 6)
@@ -0,0 +1,96 @@
+/*!
+ * \file Pid.h
+ * \brief Class defining a PID
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/05/01
+ * \version 4.0
+ */
+
+#ifndef PID_H
+#define PID_H
+
+#include <ControlLaw.h>
+
+namespace flair
+{
+    namespace gui
+    {
+        class LayoutPosition;
+    }
+}
+
+class Pid_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class Pid
+    *
+    * \brief Class defining a PID
+    */
+    class Pid : public ControlLaw
+    {
+        friend class ::Pid_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a PID at given position. \n
+            * The PID will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display settings
+            * \param name name
+            */
+            Pid(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Pid();
+
+            /*!
+            * \brief Reset integral
+            *
+            */
+            void Reset(void);
+
+            /*!
+            * \brief Set input values
+            *
+            * \param p proportional value
+            * \param d derivative value
+            */
+            void SetValues(float p,float d);
+
+            /*!
+            * \brief Use default plot
+            *
+            * Plot the output values at position. \n
+            * Plot consists of 4 curves: proportional part,
+            * derivative part, integral part and
+            * the sum of the three. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display plot
+            */
+            void UseDefaultPlot(const gui::LayoutPosition* 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);
+
+            Pid_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // PID_H
Index: /trunk/include/FlairFilter/PidThrust.h
===================================================================
--- /trunk/include/FlairFilter/PidThrust.h	(revision 6)
+++ /trunk/include/FlairFilter/PidThrust.h	(revision 6)
@@ -0,0 +1,136 @@
+/*!
+ * \file PidThrust.h
+ * \brief Class defining a Pid for Thrust
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/11/07
+ * \version 4.0
+ */
+
+#ifndef PIDTHRUST_H
+#define PIDTHRUST_H
+
+#include <ControlLaw.h>
+
+namespace flair
+{
+    namespace gui
+    {
+        class LayoutPosition;
+    }
+}
+
+class PidThrust_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class PidThrust
+    *
+    * \brief Class defining a Pid for Thrust.\n
+    * This Pid as an extra offset for compensating gravity.
+    */
+    class PidThrust : public ControlLaw
+    {
+        friend class ::PidThrust_impl;
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a PidThrust at given position
+            * The PidThrust will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display settings
+            * \param name name
+            */
+            PidThrust(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~PidThrust();
+
+            /*!
+            * \brief Reset integral and offset to 0
+            *
+            */
+            void Reset(void);
+
+            /*!
+            * \brief Reset integral to 0
+            *
+            */
+            void ResetI(void);
+
+            /*!
+            * \brief Reset offset to 0
+            *
+            */
+            void ResetOffset(void);
+
+            /*!
+            * \brief Set offset to specified value in ground station
+            *
+            */
+            void SetOffset(void);
+
+            /*!
+            * \brief Get offset
+            *
+            * \return current offset
+            */
+            float GetOffset(void);
+
+            /*!
+            * \brief Step up the offset according to specified value in ground station
+            *
+            * \return false if offset is at its maximum (1) value, true otherwise
+            */
+            bool OffsetStepUp(void);
+
+            /*!
+            * \brief Step down the offset according to specified value in ground station
+            *
+            * \return false if offset is at its minimum (specified in ground station) value, true otherwise
+            */
+            bool OffsetStepDown(void);
+
+            /*!
+            * \brief Set input values
+            *
+            * \param p proportional value
+            * \param d derivative value
+            */
+            void SetValues(float p,float d);
+
+            /*!
+            * \brief Use default plot
+            *
+            * Plot the output values at position. \n
+            * Plot consists of 4 curves: proportional part,
+            * derivative part, integral part and
+            * the sum of the three. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display plot
+            */
+            void UseDefaultPlot(const gui::LayoutPosition* 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);
+
+            PidThrust_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // PIDTHRUST_H
Index: /trunk/include/FlairFilter/SimuAhrs.h
===================================================================
--- /trunk/include/FlairFilter/SimuAhrs.h	(revision 6)
+++ /trunk/include/FlairFilter/SimuAhrs.h	(revision 6)
@@ -0,0 +1,64 @@
+/*!
+ * \file SimuAhrs.h
+ * \brief Class for a simulation Ahrs
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/02/07
+ * \version 4.0
+ */
+
+#ifndef SIMUAHRS_H
+#define SIMUAHRS_H
+
+#include <Ahrs.h>
+#include <stdint.h>
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class SimuAhrs
+    *
+    * \brief Class for a simulation Ahrs
+    *
+    * This class constructs a SimuImu as Imu of this Ahrs.
+    */
+    class SimuAhrs : public filter::Ahrs
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a simulation Ahrs.
+            *
+            * \param parent parent
+            * \param name name
+            * \param dev_id number id of the simulated Ahrs
+            * \param priority priority of the SimuImu Thread
+            */
+            SimuAhrs(const core::FrameworkManager* parent,std::string name,uint32_t dev_id,uint8_t priority);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~SimuAhrs();
+
+             /*!
+            * \brief Start SimuImu Thread
+            *
+            */
+            void Start(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);
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // SIMUAHRS_H
Index: /trunk/include/FlairFilter/TrajectoryGenerator1D.h
===================================================================
--- /trunk/include/FlairFilter/TrajectoryGenerator1D.h	(revision 6)
+++ /trunk/include/FlairFilter/TrajectoryGenerator1D.h	(revision 6)
@@ -0,0 +1,153 @@
+/*!
+ * \file TrajectoryGenerator1D.h
+ * \brief Class generating a trajectory in 1D
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2011/05/01
+ * \version 4.0
+ */
+
+#ifndef TRAJECTORYGENERATOR1D_H
+#define TRAJECTORYGENERATOR1D_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+    }
+    namespace gui
+    {
+        class LayoutPosition;
+    }
+}
+
+class TrajectoryGenerator1D_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class TrajectoryGenerator1D
+    *
+    * \brief Class generating a trajectory in 1D
+    *
+    * This class generates position and velocity references, given
+    * an absolute maximum velocity and an absolute acceleration. \n
+    * When trajectory is started (see StartTraj()), position and velocity will increase
+    * at the given acceleration. If the maximum velocity is reached,
+    * velocity will not increase anymore. Then, velocity will decrease according
+    * to the given acceleration until velocity is null and final position is reached. \n
+    * Manual inputs can be introduced using SetPositionOffset() and SetSpeedOffset().
+    *
+    */
+    class TrajectoryGenerator1D : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a TrajectoryGenerator1D at given position. \n
+            * The TrajectoryGenerator1D will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display settings
+            * \param name name
+            * \param unit unit of the position (for exemple m, deg, etc). Its only used for display on ground station.
+            */
+            TrajectoryGenerator1D(const gui::LayoutPosition* position,std::string name,std::string unit="");
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~TrajectoryGenerator1D();
+
+            /*!
+            * \brief Start trajectory
+            *
+            * \param start_pos start position
+            * \param end_pos end position
+            */
+            void StartTraj(float start_pos,float end_pos);
+
+            /*!
+            * \brief Stop trajectory
+            *
+            */
+            void StopTraj(void);
+
+            /*!
+            * \brief Reset
+            *
+            * Reset all outputs to 0. This can be done only when IsRunning()==false.
+            *
+            */
+            void Reset(void);
+
+            /*!
+            * \brief Is trajectory running?
+            *
+            * \return true if trajectory is running
+            */
+            bool IsRunning(void) const;
+
+            /*!
+            * \brief Set position offset
+            *
+            * \param value position offset
+            */
+            void SetPositionOffset(float value);
+
+            /*!
+            * \brief Set speed offset
+            *
+            * \param value speed offset
+            */
+            void SetSpeedOffset(float value);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Uses values specified by StartTraj(),
+            * SetPositionOffset() and SetSpeedOffset().
+            *
+            * \param time time of the update
+            */
+            void Update(core::Time time);
+
+            /*!
+            * \brief Position
+            *
+            */
+            float Position(void) const;
+
+            /*!
+            * \brief Speed
+            *
+            */
+            float Speed(void) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * \return matrix
+            */
+            core::cvmatrix *Matrix(void) const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice. Nothing to do in this IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            TrajectoryGenerator1D_impl* pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // TRAJECTORYGENERATOR1D_H
Index: /trunk/include/FlairFilter/TrajectoryGenerator2DCircle.h
===================================================================
--- /trunk/include/FlairFilter/TrajectoryGenerator2DCircle.h	(revision 6)
+++ /trunk/include/FlairFilter/TrajectoryGenerator2DCircle.h	(revision 6)
@@ -0,0 +1,156 @@
+/*!
+ * \file TrajectoryGenerator2DCircle.h
+ * \brief Class generating a circle trajectory in 2D
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/04/08
+ * \version 4.0
+ */
+
+#ifndef TRAJECTORYGENERATOR2DCIRCLE_H
+#define TRAJECTORYGENERATOR2DCIRCLE_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+        class Vector2D;
+    }
+    namespace gui
+    {
+        class LayoutPosition;
+    }
+}
+
+class TrajectoryGenerator2DCircle_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class TrajectoryGenerator2DCircle
+    *
+    * \brief Class generating a circle trajectory in 2D
+    *
+    * This class generates position and velocity references, given
+    * a maximum velocity and an absolute acceleration, for a circle. \n
+    * When trajectory is started (StartTraj), position and velocity will increase
+    * at the given acceleration untill maximum velocity is reached. \n
+    * When trajectory is asked to be finished (see FinishTraj()), position
+    * and velocity will decrease at the given acceleration untill null velocity is reached. \n
+    * Position and velocity of the center of the circle can be manually changed
+    * through SetCenter() and SetCenterSpeed().
+    */
+    class TrajectoryGenerator2DCircle : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a TrajectoryGenerator2DCircle at position. \n
+            * The TrajectoryGenerator2DCircle will automatically be child of position->getLayout() Layout. After calling this function,
+            * position will be deleted as it is no longer usefull. \n
+            *
+            * \param position position to display settings
+            * \param name name
+            */
+            TrajectoryGenerator2DCircle(const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~TrajectoryGenerator2DCircle();
+
+            /*!
+            * \brief Start trajectory
+            *
+            * \param start_pos start position
+            * \param nb_lap number of laps, -1 for infinite
+            */
+            void StartTraj(const core::Vector2D &start_pos,float nb_lap=-1);
+
+            /*!
+            * \brief Stop trajectory
+            *
+            * Stop abruptly the trajectory.
+            */
+            void StopTraj(void);
+
+            /*!
+            * \brief Finish trajectory
+            *
+            * Finish smoothly the trajectory.
+            */
+            void FinishTraj(void);
+
+            /*!
+            * \brief Set center position
+            *
+            * \param value center position
+            */
+            void SetCenter(const core::Vector2D &value);
+
+            /*!
+            * \brief Set center speed
+            *
+            * \param value center speed
+            */
+            void SetCenterSpeed(const core::Vector2D &value);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Uses values specified by StartTraj(),
+            * SetCenter() and SetCenterSpeed().
+            *
+            * \param time time of the update
+            */
+            void Update(core::Time time);
+
+            /*!
+            * \brief Position
+            *
+            * \param point returned position
+            */
+            void GetPosition(core::Vector2D &point) const;
+
+            /*!
+            * \brief Speed
+            *
+            * \param point returned speed
+            */
+            void GetSpeed(core::Vector2D &point) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * \return matrix
+            */
+            core::cvmatrix *Matrix(void) const;
+
+            /*!
+            * \brief Is trajectory running?
+            *
+            * \return true if trajectory is running
+            */
+            bool IsRunning(void) const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice. Nothing to do in this IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data){};
+
+            TrajectoryGenerator2DCircle_impl* pimpl_;
+
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // TRAJECTORYGENERATOR2DCIRCLE_H
Index: /trunk/include/FlairFilter/UavMultiplex.h
===================================================================
--- /trunk/include/FlairFilter/UavMultiplex.h	(revision 6)
+++ /trunk/include/FlairFilter/UavMultiplex.h	(revision 6)
@@ -0,0 +1,220 @@
+/*!
+ * \file UavMultiplex.h
+ * \brief Class defining uav multiplexing
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/04/11
+ * \version 4.0
+ */
+
+#ifndef UAVMULTIPLEX_H
+#define UAVMULTIPLEX_H
+
+#include <IODevice.h>
+#include <stdint.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class FrameworkManager;
+        class io_data;
+    }
+    namespace gui
+    {
+        class TabWidget;
+        class Layout;
+    }
+}
+
+class UavMultiplex_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class UavMultiplex
+    *
+    * \brief Class defining uav multiplexing
+    */
+    class UavMultiplex : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct a uav multiplexing
+            *
+            * \param parent parent
+            * \param name name
+            */
+            UavMultiplex(const core::FrameworkManager* parent,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~UavMultiplex();
+
+            /*!
+            * \brief Set roll torque
+            *
+            * roll torque is placed in input(0,0)
+            *
+            * \param value value between -1 and 1
+            */
+            void SetRoll(float value);
+
+            /*!
+            * \brief Set pitch torque
+            *
+            * pitch torque is placed in input(1,0)
+            *
+            * \param value value between -1 and 1
+            */
+            void SetPitch(float value);
+
+            /*!
+            * \brief Set yaw torque
+            *
+            * yaw torque is placed in input(2,0)
+            *
+            * \param value value between -1 and 1
+            */
+            void SetYaw(float value);
+
+            /*!
+            * \brief Set thrust
+            *
+            * thrust is placed in input(3,0)
+            *
+            * \param value value between 0 and 1
+            */
+            void SetThrust(float value);
+
+            /*!
+            * \brief Set roll trim
+            *
+            * trim is placed in input(4,0)
+            *
+            * \param value value
+            */
+            void SetRollTrim(float value);
+
+            /*!
+            * \brief Set pitch trim
+            *
+            * trim is placed in input(5,0)
+            *
+            * \param value value
+            */
+            void SetPitchTrim(float value);
+
+            /*!
+            * \brief Set yaw trim
+            *
+            * trim is placed in input(6,0)
+            *
+            * \param value value
+            */
+            void SetYawTrim(float value);
+
+            /*!
+            * \brief Update using provided datas
+            *
+            * Uses values specified by Set*().
+            *
+            * \param time time of the update
+            */
+            void Update(core::Time time);
+
+            /*!
+            * \brief Lock user interface
+            *
+            * User interface will be grayed out.\n
+            * Use it do disallow changes when flying.
+            *
+            */
+            void LockUserInterface(void) const;
+
+            /*!
+            * \brief Unlock user interface
+            *
+            * User interface will be enabled.\n
+            *
+            */
+            void UnlockUserInterface(void) const;
+
+            /*!
+            * \brief Layout
+            *
+            * Layout to place custom widgets.\n
+            *
+            * \return the layout
+            */
+            gui::Layout* GetLayout(void) const;
+
+            /*!
+            * \brief Use default plot
+            *
+            * Derived class can implement this function do draw default plot.
+            *
+            */
+            virtual void UseDefaultPlot(void){};
+
+            /*!
+            * \brief Motors count
+            *
+            * This function must be reimplemented, in order to get the number of motors.
+            *
+            * \return motors count
+            */
+            virtual uint8_t MotorsCount(void) const=0;
+
+            /*!
+            * \brief Multiplex value
+            *
+            * Get the mutliplexed value of a motor, if SetMultiplexComboBox() was used.\n
+            *
+            * \param index index of the motor, from 0 to MotorsCount()
+            * \return multiplexed index of the motor
+            */
+            int MultiplexValue(int index) const;
+
+            /*!
+            * \brief Get TabWidget
+            *
+            * Usefull to add tabs.\n
+            *
+            * \return the TabWidget
+            */
+            gui::TabWidget* GetTabWidget(void) const;
+
+        protected:
+            /*!
+            * \brief Set multiplex ComboBox
+            *
+            * Draws a ComboBox to define motor multiplexing. \n
+            * This is used to change the order of the output motors.
+            *
+            * \param name description of the motor (ex front left)
+            * \param index index of the motor, from 0 to MotorsCount()
+            */
+            void SetMultiplexComboBox(std::string name,int index);
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * This function is automatically called by ProcessUpdate()
+            * of the Object::Parent's if its Object::ObjectType is "IODevice". \n
+            * This function must be reimplemented, in order to process the data from the parent.
+            *
+            * \param data data from the parent to process
+            */
+            virtual void UpdateFrom(const core::io_data *data)=0;
+
+            UavMultiplex_impl *pimpl_;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // UAVMULTIPLEX_H
Index: /trunk/include/FlairFilter/X4X8Multiplex.h
===================================================================
--- /trunk/include/FlairFilter/X4X8Multiplex.h	(revision 6)
+++ /trunk/include/FlairFilter/X4X8Multiplex.h	(revision 6)
@@ -0,0 +1,104 @@
+/*!
+ * \file X4X8Multiplex.h
+ * \brief Class defining X4 and X8 multiplexing
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/04/10
+ * \version 4.0
+ */
+
+#ifndef X4X8MULTIPLEX_H
+#define X4X8MULTIPLEX_H
+
+#include <UavMultiplex.h>
+
+class X4X8Multiplex_impl;
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class X4X8Multiplex
+    *
+    * \brief Class defining X4 and X8 multiplexing
+    *
+    * The output order of the motors can be changed through ground station.
+    */
+    class X4X8Multiplex : public UavMultiplex
+    {
+        friend class ::X4X8Multiplex_impl;
+
+        public:
+             /*!
+            \enum UavType_t
+            \brief type of UAV
+            */
+            typedef enum {
+                X4,/*!< 4 motors: front left, front right, rear left, rear right */
+                X8/*!< 8 motors: top front left, top front right, top rear left, top rear right, bottom front left, bottom front right, bottom rear left, bottom rear right */
+                } UavType_t;
+
+            /*!
+            \enum MotorNames_t
+            \brief Motor names
+            */
+            typedef enum {
+                TopFrontLeft=0,/*!< Top front left, X4 or X8 */
+                TopFrontRight=1,/*!< Top front right, X4 or X8 */
+                TopRearLeft=2,/*!< Top rear left, X4 or X8 */
+                TopRearRight=3,/*!< Top rear right, X4 or X8 */
+                BottomFrontLeft=4,/*!< Bottom front left, X8 */
+                BottomFrontRight=5,/*!< Bottom front right, X8 */
+                BottomRearLeft=6,/*!< Bottom rear left, X8 */
+                BottomRearRight=7,/*!< Bottom rear right, X8 */
+                } MotorNames_t;
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct a X4 and X8 multiplexing
+            *
+            * \param parent parent
+            * \param name name
+            * \param type type
+            */
+            X4X8Multiplex(const core::FrameworkManager* parent,std::string name,UavType_t type);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~X4X8Multiplex();
+
+            /*!
+            * \brief Use default plot
+            *
+            * Plot the output values.
+            *
+            */
+            void UseDefaultPlot(void);
+
+            /*!
+            * \brief Motors count
+            *
+            * Reimplemented from UavMultiplex.
+            *
+            * \return motors count
+            */
+            uint8_t MotorsCount(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);
+
+            X4X8Multiplex_impl *pimpl_;
+
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // X4X8MULTIPLEX_H
