Index: trunk/include/FlairCore/FindArgument.h
===================================================================
--- trunk/include/FlairCore/FindArgument.h	(revision 68)
+++ trunk/include/FlairCore/FindArgument.h	(revision 68)
@@ -0,0 +1,8 @@
+#ifndef FINDARGUMENT
+#define FINDARGUMENT
+
+#include <string>
+
+std::string FindArgument(std::string args,std::string arg,bool recquired);
+
+#endif // FINDARGUMENT
Index: trunk/include/FlairCore/FrameworkManager.h
===================================================================
--- trunk/include/FlairCore/FrameworkManager.h	(revision 62)
+++ trunk/include/FlairCore/FrameworkManager.h	(revision 68)
@@ -107,6 +107,7 @@
   *
   * \param log_path path to store logs
-  */
-  void SetupLogger(std::string log_path);
+  * \param stackSize stack size in bytes for logging thread
+  */
+  void SetupLogger(std::string log_path,uint32_t stackSize=1024*32);
 	
 	/*!
Index: trunk/include/FlairCore/Matrix.h
===================================================================
--- trunk/include/FlairCore/Matrix.h	(revision 68)
+++ trunk/include/FlairCore/Matrix.h	(revision 68)
@@ -0,0 +1,215 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Matrix.h
+ * \brief Class defining a matrix
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2018/01/30
+ * \version 4.0
+ */
+
+#ifndef MATRIX_H
+#define MATRIX_H
+
+#include <io_data.h>
+#include <IODataElement.h>
+#include <cvmatrix_descriptor.h>
+
+class Matrix_impl;
+
+namespace flair {
+namespace core {
+
+/*! \class Matrix
+*
+* \brief Class defining a matrix
+* 
+*
+*/
+class Matrix : public io_data {
+public:
+  class Type : public DataType {
+  public:
+    Type(size_t _nbRows, size_t _nbCols, ScalarType const &_elementDataType)
+        : nbRows(_nbRows), nbCols(_nbCols), elementDataType(_elementDataType) {}
+    size_t GetSize() const {
+      return nbRows * nbCols * elementDataType.GetSize();
+    }
+    std::string GetDescription() const { return "matrix"; }
+    size_t GetNbRows() const { return nbRows; }
+    size_t GetNbCols() const { return nbCols; }
+    ScalarType const &GetElementDataType() const { return elementDataType; }
+
+  private:
+    size_t nbRows, nbCols;
+    ScalarType const &elementDataType;
+  };
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct an io_data representing a matrix. \n
+  * It uses a cvmatrix_descriptor to get size and elements' names. \n
+  * Names are used for graphs and logs. \n
+  * All values are initialized to 0.
+  *
+  * \param parent parent
+  * \param descriptor matrix description, it is safe to destroy it after calling this constructor
+  * \param type type of matrix elements
+  * \param name name
+  * \param n number of samples
+  */
+  Matrix(const Object *parent, const cvmatrix_descriptor *descriptor,
+           ScalarType const &elementDataType, std::string name = "",
+           uint32_t n = 1);
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct an io_data representing a matrix. \n
+  * Elements are unamed. \n
+  * All values are initialized to 0.
+  *
+  * \param parent parent
+  * \param rows matrix rows
+  * \param cols matrix cols
+  * \param type type of matrix elements
+  * \param name name
+  * \param n number of samples
+  */
+  Matrix(const Object *parent, uint32_t rows, uint32_t cols,
+           ScalarType const &elementDataType, std::string name = "",
+           uint32_t n = 1);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~Matrix();
+
+  /*!
+  * \brief Element value
+  *
+  * Element is accessed by locking and unlocking the io_data Mutex.
+  *
+  * \param row element row
+  * \param col element col
+  *
+  * \return element value
+  */
+  float Value(uint32_t row, uint32_t col) const;
+
+  /*!
+  * \brief Element value
+  *
+  * Element is not accessed by locking and unlocking the io_data Mutex. \n
+  * Thus, this function should be called with Mutex locked. \n
+  * This function is usefull when multiple successive access are done to the
+  * elments of the matrix. It avoids unnecessary locking and unlocking.
+  *
+  * \param row element row
+  * \param col element col
+  *
+  * \return element value
+  */
+  float ValueNoMutex(uint32_t row, uint32_t col) const;
+
+  /*!
+  * \brief Set element value
+  *
+  * Element is accessed by locking and unlocking the io_data Mutex.
+  *
+  * \param row element row
+  * \param col element col
+  * \param value element value
+  */
+  void SetValue(uint32_t row, uint32_t col, float value);
+
+  /*!
+  * \brief Set element value
+  *
+  * Element is not accessed by locking and unlocking the io_data Mutex. \n
+  * Thus, this function should be called with Mutex locked. \n
+  * This function is usefull when multiple successive access are done to the
+  * elments of the matrix. It avoids unnecessary locking and unlocking.
+  *
+  * \param row element row
+  * \param col element col
+  * \param value element value
+  */
+  void SetValueNoMutex(uint32_t row, uint32_t col, float value);
+
+  /*!
+  * \brief Element name
+  *
+  * If Matrix was created without cvmatrix_descriptor, element name is empty.
+  *
+  * \param row element row
+  * \param col element col
+  *
+  * \return element name
+  */
+  std::string Name(uint32_t row, uint32_t col) const;
+
+  /*!
+  * \brief Element
+  *
+  * Get a pointer to a specific element. This pointer can be used for plotting.
+  *
+  * \param row element row
+  * \param col element col
+  *
+  * \return pointer to the element
+  */
+  IODataElement *Element(uint32_t row, uint32_t col) const;
+
+  /*!
+  * \brief Element
+  *
+  * Get a pointer to a specific element. This pointer can be used for plotting.
+  *\n
+  * This function can be used for a 1D matrix.
+  *
+  * \param index element index
+  *
+  * \return pointer to the element
+  */
+  IODataElement *Element(uint32_t index) const;
+
+  /*!
+  * \brief Number of rows
+  *
+  * \return rows
+  */
+  uint32_t Rows(void) const;
+
+  /*!
+  * \brief Number of colomns
+  *
+  * \return colomns
+  */
+  uint32_t Cols(void) const;
+
+  Type const &GetDataType() const { return dataType; };
+void CopyDatas(char *dst) const;
+private:
+  /*!
+  * \brief Copy datas
+  *
+  * Reimplemented from io_data. \n
+  * See io_data::CopyDatas.
+  *
+  * \param dst destination buffer
+  */
+  //void CopyDatas(char *dst) const;
+
+  class Matrix_impl *pimpl_;
+  Type dataType;
+};
+
+} // end namespace core
+} // end namespace flair
+
+#endif // MATRIX_H
Index: trunk/include/FlairCore/RangeFinderPlot.h
===================================================================
--- trunk/include/FlairCore/RangeFinderPlot.h	(revision 62)
+++ trunk/include/FlairCore/RangeFinderPlot.h	(revision 68)
@@ -20,5 +20,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 }
@@ -61,5 +61,5 @@
                   std::string x_name, float xmin, float xmax,
                   std::string y_name, float ymin, float ymax,
-                  const core::cvmatrix *datas, float start_angle,
+                  const core::Matrix *datas, float start_angle,
                   float end_angle, uint32_t nb_samples);
 
@@ -87,5 +87,5 @@
   void ExtraXmlEvent(void){};
 
-  const core::cvmatrix *datas;
+  const core::Matrix *datas;
 };
 
Index: trunk/include/FlairCore/Thread.h
===================================================================
--- trunk/include/FlairCore/Thread.h	(revision 62)
+++ trunk/include/FlairCore/Thread.h	(revision 68)
@@ -46,7 +46,8 @@
   * \param name name
   * \param priority priority, should be >20 (<20 is reserved for internal use)
+  * \param stackSize stack size in bytes
   */
   Thread(const Object *parent, std::string name,
-         uint8_t priority); // priority>20, for real time only
+         uint8_t priority,uint32_t stackSize=1024*128);
 
   /*!
Index: trunk/include/FlairCore/UsSensorPlot.h
===================================================================
--- trunk/include/FlairCore/UsSensorPlot.h	(revision 68)
+++ trunk/include/FlairCore/UsSensorPlot.h	(revision 68)
@@ -0,0 +1,77 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file UsSensorPlot.h
+ * \brief Class displaying a plot for raw us sensor
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2018/02/21
+ * \version 4.0
+ */
+
+#ifndef USSENSORPLOT_H
+#define USSENSORPLOT_H
+
+#include <DataPlot.h>
+#include <stdint.h>
+
+namespace flair {
+namespace core {
+class Matrix;
+}
+}
+
+namespace flair {
+namespace gui {
+
+class LayoutPosition;
+
+/*! \class UsSensorPlot
+*
+* \brief Class displaying a plot for raw us sensor
+*
+*/
+class UsSensorPlot : private DataPlot {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a plot for raw us sensor at given place position.
+  *
+  * \param position position to display the plot
+  * \param name name
+  * \param y_name name of y axis
+  * \param ymin default ymin of the plot
+  * \param ymax default ymax of the plot
+  * \param datas data matrix, must be 1D
+  * \param peakInfos peak infos, must be 1*4 (first start,first end, second start,second end)
+  */
+  UsSensorPlot(const LayoutPosition *position, std::string name,
+                       std::string y_name,float ymin, float ymax,const core::Matrix *datas,const core::Matrix *peakInfos);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~UsSensorPlot();
+  
+private:
+  /*!
+  * \brief Copy datas to specified buffer
+  *
+  * Reimplemented from SendData.
+  *
+  * \param buf output buffer
+  */
+  void CopyDatas(char *buf) const;
+  
+  const core::Matrix *datas,*peakInfos;
+
+
+};
+
+} // end namespace gui
+} // end namespace flair
+
+#endif // USSENSORPLOT_H
Index: trunk/include/FlairCore/io_data.h
===================================================================
--- trunk/include/FlairCore/io_data.h	(revision 62)
+++ trunk/include/FlairCore/io_data.h	(revision 68)
@@ -116,16 +116,49 @@
 
   /*!
-  * \brief Set data time
-  *
+  * \brief Set data time, also caluculates the delta time based on last call
+  *
+  * TIME_INFINITE represents an unitialized time
+  * 
   * \param time time
   */
   void SetDataTime(Time time);
+  
+  /*!
+  * \brief Set data time and  delta time (thus delta time is not based on last call)
+  *
+  * TIME_INFINITE represents an unitialized time
+  * 
+  * \param time time
+  * \param deltaTime delta time
+  */
+  void SetDataTime(Time time,Time deltaTime);
 
   /*!
   * \brief Data time
   *
+  * TIME_INFINITE represents an unitialized time.
+  * 
   * \return data time
   */
   Time DataTime(void) const;
+  
+  /*!
+  * \brief Data delta time
+  *
+  * TIME_INFINITE represents an unitialized time.
+  * 
+  * \return data delta time
+  */
+  Time DataDeltaTime(void) const;
+  
+  /*!
+  * \brief Get data time and  delta time
+  *
+  * TIME_INFINITE represents an unitialized time
+  * 
+  * \param time time
+  * \param deltaTime delta time
+  */
+  void GetDataTime(Time &time,Time &deltaTime) const;
 
   /*!
Index: trunk/include/FlairFilter/AhrsComplementaryFilter.h
===================================================================
--- trunk/include/FlairFilter/AhrsComplementaryFilter.h	(revision 62)
+++ trunk/include/FlairFilter/AhrsComplementaryFilter.h	(revision 68)
@@ -63,7 +63,4 @@
             void UpdateFrom(const core::io_data *data);
 
-            core::Time previous_time;
-
-            bool isInit;
             core::Quaternion QHat;
             core::Vector3Df BHat;
Index: trunk/include/FlairFilter/ButterworthLowPass.h
===================================================================
--- trunk/include/FlairFilter/ButterworthLowPass.h	(revision 62)
+++ trunk/include/FlairFilter/ButterworthLowPass.h	(revision 68)
@@ -18,5 +18,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -91,5 +91,5 @@
   * \return filtered output
   */
-  core::cvmatrix *Matrix(void) const;
+  core::Matrix *GetMatrix(void) const;
 
   /*!
Index: trunk/include/FlairFilter/ControlLaw.h
===================================================================
--- trunk/include/FlairFilter/ControlLaw.h	(revision 62)
+++ trunk/include/FlairFilter/ControlLaw.h	(revision 68)
@@ -21,5 +21,5 @@
 }
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 }
@@ -88,5 +88,5 @@
   * \brief Reset the internal state of the control law
   *
-  * Doesn't do anything by default
+  * Does nothing by default
   *
   */
@@ -100,5 +100,5 @@
   *
   */
-  core::cvmatrix *input;
+  core::Matrix *input;
 
   /*!
@@ -109,5 +109,5 @@
   *
   */
-  core::cvmatrix *output;
+  core::Matrix *output;
 
 private:
Index: trunk/include/FlairFilter/EulerDerivative.h
===================================================================
--- trunk/include/FlairFilter/EulerDerivative.h	(revision 62)
+++ trunk/include/FlairFilter/EulerDerivative.h	(revision 68)
@@ -18,5 +18,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -56,5 +56,5 @@
   EulerDerivative(const core::IODevice *parent,
                   const gui::LayoutPosition *position, std::string name,
-                  const core::cvmatrix *init_value = NULL);
+                  const core::Matrix *init_value = NULL);
 
   /*!
@@ -79,5 +79,5 @@
   * \return filtered output
   */
-  core::cvmatrix *Matrix(void) const;
+  core::Matrix *GetMatrix(void) const;
 
 private:
Index: trunk/include/FlairFilter/LowPassFilter.h
===================================================================
--- trunk/include/FlairFilter/LowPassFilter.h	(revision 62)
+++ trunk/include/FlairFilter/LowPassFilter.h	(revision 68)
@@ -18,5 +18,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -56,5 +56,5 @@
   LowPassFilter(const core::IODevice *parent,
                 const gui::LayoutPosition *position, std::string name,
-                const core::cvmatrix *init_value = NULL);
+                const core::Matrix *init_value = NULL);
 
   /*!
@@ -79,5 +79,5 @@
   * \return filtered output
   */
-  core::cvmatrix *Matrix(void) const;
+  core::Matrix *GetMatrix(void) const;
 
 private:
Index: trunk/include/FlairFilter/PidThrust.h
===================================================================
--- trunk/include/FlairFilter/PidThrust.h	(revision 62)
+++ trunk/include/FlairFilter/PidThrust.h	(revision 68)
@@ -55,4 +55,14 @@
 
   /*!
+  * \brief Reset the control law
+  * equivalent to:
+  * ResetI();
+  * SetDefaultOffset();
+  * SetValues(0,0);
+  * 
+  */
+  void Reset(void);
+  
+  /*!
   * \brief Reset integral to 0
   *
@@ -78,5 +88,12 @@
   * \return current offset
   */
-  float GetOffset(void);
+  float GetOffset(void) const;
+  
+  /*!
+  * \brief Get intergral part
+  *
+  * \return current integral part
+  */
+  float GetIntegral(void) const;
 
   /*!
Index: trunk/include/FlairFilter/TrajectoryGenerator1D.h
===================================================================
--- trunk/include/FlairFilter/TrajectoryGenerator1D.h	(revision 62)
+++ trunk/include/FlairFilter/TrajectoryGenerator1D.h	(revision 68)
@@ -18,5 +18,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -152,5 +152,5 @@
   * \return matrix
   */
-  core::cvmatrix *Matrix(void) const;
+  core::Matrix *GetMatrix(void) const;
 
 private:
Index: trunk/include/FlairFilter/TrajectoryGenerator2DCircle.h
===================================================================
--- trunk/include/FlairFilter/TrajectoryGenerator2DCircle.h	(revision 62)
+++ trunk/include/FlairFilter/TrajectoryGenerator2DCircle.h	(revision 68)
@@ -19,5 +19,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -131,5 +131,5 @@
   * \return matrix
   */
-  core::cvmatrix *Matrix(void) const;
+  core::Matrix *GetMatrix(void) const;
 
   /*!
Index: trunk/include/FlairMeta/Uav.h
===================================================================
--- trunk/include/FlairMeta/Uav.h	(revision 62)
+++ trunk/include/FlairMeta/Uav.h	(revision 68)
@@ -31,4 +31,5 @@
 		class Camera;
 		class NmeaGps;
+		class PressureSensor;
 	}
 }
@@ -64,4 +65,5 @@
   sensor::Camera *GetHorizontalCamera(void) const;
   sensor::NmeaGps *GetGps(void) const;
+  sensor::PressureSensor *GetPressureSensor(void) const;
 	virtual std::string GetDefaultVrpnAddress(void) const{return "127.0.0.1:3883";}
   virtual bool isReadyToFly(void) const { return true;}
@@ -77,4 +79,5 @@
   void SetHorizontalCamera(const sensor::Camera *verticalCamera);
   void SetGps(const sensor::NmeaGps *gps);
+  void SetPressureSensor(const sensor::PressureSensor *pressureSensor);
 
 private:
@@ -88,4 +91,5 @@
   sensor::BatteryMonitor *battery;
   sensor::Camera *verticalCamera,*horizontalCamera;
+  sensor::PressureSensor *pressureSensor;
 };
 
Index: trunk/include/FlairSensorActuator/BlCtrlV2_x4_speed.h
===================================================================
--- trunk/include/FlairSensorActuator/BlCtrlV2_x4_speed.h	(revision 62)
+++ trunk/include/FlairSensorActuator/BlCtrlV2_x4_speed.h	(revision 68)
@@ -24,5 +24,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 class I2cPort;
 }
@@ -97,6 +97,6 @@
 
   // matrix
-  core::cvmatrix *input;
-  core::cvmatrix *output;
+  core::Matrix *input;
+  core::Matrix *output;
 
   int tested_motor;
Index: trunk/include/FlairSensorActuator/Bldc.h
===================================================================
--- trunk/include/FlairSensorActuator/Bldc.h	(revision 62)
+++ trunk/include/FlairSensorActuator/Bldc.h	(revision 68)
@@ -19,5 +19,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -96,5 +96,5 @@
   *
   */
-  core::cvmatrix *Output(void) const;
+  core::Matrix *Output(void) const;
 
   /*!
@@ -161,5 +161,5 @@
 
 protected:
-  core::cvmatrix *output;
+  core::Matrix *output;
 
 private:
Index: trunk/include/FlairSensorActuator/EmulatedController.h
===================================================================
--- trunk/include/FlairSensorActuator/EmulatedController.h	(revision 62)
+++ trunk/include/FlairSensorActuator/EmulatedController.h	(revision 68)
@@ -21,5 +21,5 @@
 namespace flair {
     namespace core {
-        class cvmatrix;
+        class Matrix;
     }
     namespace gui {
@@ -52,17 +52,17 @@
         bool ProcessMessage(core::Message *msg);
         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
+        void AcquireAxisData(core::Matrix &axis); //responsible for getting the axis data from the hardware
+        void AcquireButtonData(core::Matrix &button); //responsible for getting the button data from the hardware
         bool ControllerInitialization();
 
     private:
         enum class DataType { axis,button };
-        void ComputeControllerData(DataType dataType, core::cvmatrix &data);
-        template<typename T> void fillVectorNoMutex(core::cvmatrix &vector,T data[],unsigned int size);
-        void fillVectorNoMutex(core::cvmatrix &destination,core::cvmatrix &source,unsigned int size);
+        void ComputeControllerData(DataType dataType, core::Matrix &data);
+        template<typename T> void fillVectorNoMutex(core::Matrix &vector,T data[],unsigned int size);
+        void fillVectorNoMutex(core::Matrix &destination,core::Matrix &source,unsigned int size);
         struct StepData {
             unsigned int durationMs; //milliseconds
-            core::cvmatrix *axisData;
-            core::cvmatrix *buttonData;
+            core::Matrix *axisData;
+            core::Matrix *buttonData;
             std::string description;
             void Print();
Index: trunk/include/FlairSensorActuator/HokuyoUTM30Lx.h
===================================================================
--- trunk/include/FlairSensorActuator/HokuyoUTM30Lx.h	(revision 62)
+++ trunk/include/FlairSensorActuator/HokuyoUTM30Lx.h	(revision 68)
@@ -23,5 +23,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 class SerialPort;
 class Mutex;
@@ -56,5 +56,5 @@
   void getMesure(int startStep, int endStep, int clusterCount, int interval,
                  int scanNumber = 0);
-  core::cvmatrix *getDatas(void);
+  core::Matrix *getDatas(void);
 
   /*!
@@ -78,5 +78,5 @@
 
   // matrix
-  core::cvmatrix *output;
+  core::Matrix *output;
 
   std::queue<std::string> bufRet;
Index: trunk/include/FlairSensorActuator/HostEthController.h
===================================================================
--- trunk/include/FlairSensorActuator/HostEthController.h	(revision 62)
+++ trunk/include/FlairSensorActuator/HostEthController.h	(revision 68)
@@ -26,5 +26,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 class TcpSocket;
 class UdpSocket;
@@ -81,5 +81,5 @@
   GetAxisData() = 0; // responsible for getting the axis data from the hardware
   unsigned int axisNumber;
-  core::cvmatrix *axis;
+  core::Matrix *axis;
   gui::DataPlot1D **axisPlot;
   uint32_t bitsPerAxis;
@@ -90,5 +90,5 @@
                                     // from the hardware
   unsigned int buttonNumber;
-  core::cvmatrix *button;
+  core::Matrix *button;
   uint8_t buttonOffset;
   bool meaningfulDataAvailable;
Index: trunk/include/FlairSensorActuator/LaserRangeFinder.h
===================================================================
--- trunk/include/FlairSensorActuator/LaserRangeFinder.h	(revision 62)
+++ trunk/include/FlairSensorActuator/LaserRangeFinder.h	(revision 68)
@@ -19,5 +19,5 @@
 namespace core {
 class FrameworkManager;
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -102,5 +102,5 @@
       * \return output matrix
       */
-  core::cvmatrix *output;
+  core::Matrix *output;
 
   /*!
Index: trunk/include/FlairSensorActuator/PressureSensor.h
===================================================================
--- trunk/include/FlairSensorActuator/PressureSensor.h	(revision 68)
+++ trunk/include/FlairSensorActuator/PressureSensor.h	(revision 68)
@@ -0,0 +1,149 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file PressureSensor.h
+ * \brief Base class for PressureSensor
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2018/02/08
+ * \version 4.0
+ */
+
+#ifndef PRESSURESENSOR_H
+#define PRESSURESENSOR_H
+
+#include <IODevice.h>
+
+namespace flair {
+  namespace core {
+    class Matrix;
+  }
+  namespace gui {
+    class Tab;
+    class TabWidget;
+    class GroupBox;
+    class Layout;
+    class DataPlot1D;
+  }
+}
+
+namespace flair {
+namespace sensor {
+/*! \class PressureSensor
+*
+* \brief Base class for PressureSensor
+*
+* Use this class to define a custom PressureSensor.
+*
+*/
+class PressureSensor : public core::IODevice {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a PressureSensor. Control part.
+	* It will be child of the FrameworkManager.
+	* 
+  * \param name name
+  */
+  PressureSensor(std::string name);
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct a PressureSensor. Simulation part.
+  *
+  * \param parent parent
+  * \param name name
+  */
+  PressureSensor(const core::IODevice *parent, std::string name);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~PressureSensor();
+
+  /*!
+  * \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 in pascal
+  */
+  float Value(void) const;
+
+protected:
+  /*!
+  * \brief Output matrix
+  *
+  * \return output matrix
+  */
+  core::Matrix *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 // PRESSURESENSOR_H
Index: trunk/include/FlairSensorActuator/RadioReceiver.h
===================================================================
--- trunk/include/FlairSensorActuator/RadioReceiver.h	(revision 62)
+++ trunk/include/FlairSensorActuator/RadioReceiver.h	(revision 68)
@@ -19,5 +19,5 @@
 namespace flair {
 namespace core {
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -87,5 +87,5 @@
   void UpdateFrom(const core::io_data *data){};
 
-  core::cvmatrix *output;
+  core::Matrix *output;
   bool is_connected;
   unsigned int nb_channels;
Index: trunk/include/FlairSensorActuator/SimuBldc.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuBldc.h	(revision 62)
+++ trunk/include/FlairSensorActuator/SimuBldc.h	(revision 68)
@@ -20,5 +20,5 @@
 class SharedMem;
 class IODevice;
-class cvmatrix;
+class Matrix;
 }
 namespace gui {
@@ -40,5 +40,5 @@
   * \brief Constructor
   *
-  * Construct a SimuBldc. Control part.
+  * Construct a SimuBldc
   *
   * \param parent parent
@@ -53,31 +53,8 @@
 
   /*!
-  * \brief Constructor
-  *
-  * Construct a SimuBldc. Simulation part.
-  *
-  * \param parent parent
-  * \param name name
-  * \param motors_count number of motors
-  * \param modelId Model id
-  * \param deviceId Bldc id of the Model
-  */
-  SimuBldc(const core::Object *parent, std::string name, uint8_t motors_count,
-           uint32_t modelId,uint32_t deviceId);
-
-  /*!
   * \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;
 
   /*!
@@ -113,4 +90,6 @@
   core::SharedMem *shmem;
   gui::DoubleSpinBox *k;
+  char *buf;
+
 };
 } // end namespace actuator
Index: trunk/include/FlairSensorActuator/SimuCamera.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuCamera.h	(revision 62)
+++ trunk/include/FlairSensorActuator/SimuCamera.h	(revision 68)
@@ -35,5 +35,5 @@
   * \brief Constructor
   *
-  * Construct a SimuCamera. Control part.
+  * Construct a SimuCamera.
 	* It will be child of the FrameworkManager.
   *
@@ -50,20 +50,4 @@
              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 modelId Model id
-  * \param deviceId Camera id of the Model
-  */
-  SimuCamera(const core::IODevice *parent, std::string name, uint16_t width,
-             uint16_t height, uint8_t channels, uint32_t modelId,uint32_t deviceId);
 
   /*!
Index: trunk/include/FlairSensorActuator/SimuGps.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuGps.h	(revision 62)
+++ trunk/include/FlairSensorActuator/SimuGps.h	(revision 68)
@@ -38,5 +38,5 @@
   * \brief Constructor
   *
-  * Construct a simulation GPS. Control part.
+  * Construct a simulation GPS
   * It will be child of the FrameworkManager.
 	* 
@@ -49,17 +49,4 @@
   SimuGps(std::string name,
           NmeaGps::NMEAFlags_t NMEAFlags, uint32_t modelId,uint32_t deviceId,uint8_t priority);
-
-  /*!
-  * \brief Constructor
-  *
-  * Construct a simulation GPS. Simulation part.\n
-  * The Thread of this class should not be run.
-  *
-  * \param parent parent
-  * \param name name
-  * \param modelId Model id
-  * \param deviceId Gps id of the Model
-  */
-  SimuGps(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
 
   /*!
@@ -77,5 +64,5 @@
   * \param data data from the parent to process
   */
-  void UpdateFrom(const core::io_data *data);
+  void UpdateFrom(const core::io_data *data){};
 
   /*!
Index: trunk/include/FlairSensorActuator/SimuImu.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuImu.h	(revision 62)
+++ trunk/include/FlairSensorActuator/SimuImu.h	(revision 68)
@@ -38,5 +38,5 @@
   * \brief Constructor
   *
-  * Construct a SimuImu. Control part.
+  * Construct a SimuImu.
 	* It will be child of the FrameworkManager.
   *
@@ -48,17 +48,4 @@
   SimuImu(std::string name,
           uint32_t modelId,uint32_t deviceId, 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 modelId Model id
-  * \param deviceId Imu id of the Model
-  */
-  SimuImu(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
 
   /*!
@@ -84,5 +71,5 @@
   * \param data data from the parent to process
   */
-  void UpdateFrom(const core::io_data *data);
+  void UpdateFrom(const core::io_data *data){};
 
   typedef struct {
Index: trunk/include/FlairSensorActuator/SimuLaser.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuLaser.h	(revision 62)
+++ trunk/include/FlairSensorActuator/SimuLaser.h	(revision 68)
@@ -37,6 +37,5 @@
   * \brief Constructor
   *
-  * Construct a SimuUs. Control part.
-	* It will be child of the FrameworkManager.
+  * Construct a SimuUs.
   *
   * \param name name
@@ -47,17 +46,4 @@
   SimuLaser(std::string name,
             uint32_t modelId,uint32_t deviceId, 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 modelId Model id
-  * \param deviceId LaserRangeFinder id of the Model
-  */
-  SimuLaser(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
 
   /*!
Index: trunk/include/FlairSensorActuator/SimuUs.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuUs.h	(revision 62)
+++ trunk/include/FlairSensorActuator/SimuUs.h	(revision 68)
@@ -37,5 +37,5 @@
   * \brief Constructor
   *
-  * Construct a SimuUs. Control part.
+  * Construct a SimuUs.
 	* It will be child of the FrameworkManager.
   *
@@ -47,17 +47,4 @@
   SimuUs(std::string name,
          uint32_t modelId,uint32_t deviceId, 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 modelId Model id
-  * \param deviceId UsRangeFinder id of the Model
-  */
-  SimuUs(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
 
   /*!
Index: trunk/include/FlairSensorActuator/TargetController.h
===================================================================
--- trunk/include/FlairSensorActuator/TargetController.h	(revision 62)
+++ trunk/include/FlairSensorActuator/TargetController.h	(revision 68)
@@ -27,5 +27,5 @@
 namespace core {
 class FrameworkManager;
-class cvmatrix;
+class Matrix;
 class Socket;
 class io_data;
@@ -82,6 +82,6 @@
   // axis stuff
   unsigned int axisNumber;
-  core::cvmatrix *axis = NULL;
-  virtual void AcquireAxisData(core::cvmatrix &axis) = 0; // responsible for
+  core::Matrix *axis = NULL;
+  virtual void AcquireAxisData(core::Matrix &axis) = 0; // responsible for
                                                           // getting the axis
                                                           // data from the
@@ -90,6 +90,6 @@
   // button stuff
   unsigned int buttonNumber;
-  core::cvmatrix *button = NULL;
-  virtual void AcquireButtonData(core::cvmatrix &button) = 0; // responsible for
+  core::Matrix *button = NULL;
+  virtual void AcquireButtonData(core::Matrix &button) = 0; // responsible for
                                                               // getting the
                                                               // button data
Index: trunk/include/FlairSensorActuator/TargetEthController.h
===================================================================
--- trunk/include/FlairSensorActuator/TargetEthController.h	(revision 62)
+++ trunk/include/FlairSensorActuator/TargetEthController.h	(revision 68)
@@ -27,5 +27,5 @@
 namespace core {
 class FrameworkManager;
-class cvmatrix;
+class Matrix;
 class TcpSocket;
 class UdpSocket;
@@ -62,7 +62,7 @@
 
   bool IsDataFrameReady();
-  void AcquireAxisData(core::cvmatrix &axis);     // responsible for getting the
+  void AcquireAxisData(core::Matrix &axis);     // responsible for getting the
                                                   // axis data from the hardware
-  void AcquireButtonData(core::cvmatrix &button); // responsible for getting the
+  void AcquireButtonData(core::Matrix &button); // responsible for getting the
                                                   // button data from the
                                                   // hardware
Index: trunk/include/FlairSensorActuator/UsRangeFinder.h
===================================================================
--- trunk/include/FlairSensorActuator/UsRangeFinder.h	(revision 62)
+++ trunk/include/FlairSensorActuator/UsRangeFinder.h	(revision 68)
@@ -17,14 +17,14 @@
 
 namespace flair {
-namespace core {
-class cvmatrix;
-}
-namespace gui {
-class Tab;
-class TabWidget;
-class GroupBox;
-class Layout;
-class DataPlot1D;
-}
+  namespace core {
+    class Matrix;
+  }
+  namespace gui {
+    class Tab;
+    class TabWidget;
+    class GroupBox;
+    class Layout;
+    class DataPlot1D;
+  }
 }
 
@@ -105,4 +105,11 @@
   */
   gui::Tab *GetPlotTab(void) const;
+  
+  /*!
+  * \brief Tab widget
+  *
+  * \return tab widget
+  */
+  gui::TabWidget *GetTabWidget(void) const;
 
   /*!
@@ -119,5 +126,5 @@
   * \return output matrix
   */
-  core::cvmatrix *output;
+  core::Matrix *output;
 
   /*!
Index: trunk/include/FlairSensorActuator/VrpnObject.h
===================================================================
--- trunk/include/FlairSensorActuator/VrpnObject.h	(revision 62)
+++ trunk/include/FlairSensorActuator/VrpnObject.h	(revision 68)
@@ -21,5 +21,5 @@
 namespace flair {
 	namespace core {
-		class cvmatrix;
+		class Matrix;
 		class Quaternion;
 	}
@@ -126,5 +126,5 @@
   * \return Output matrix
   */
-  core::cvmatrix *Output(void) const;
+  core::Matrix *Output(void) const;
 
   /*!
@@ -139,5 +139,5 @@
   * \return State matrix
   */
-  core::cvmatrix *State(void) const;
+  core::Matrix *State(void) const;
 
   /*!
Index: trunk/include/FlairSimulator/SimuBldc.h
===================================================================
--- trunk/include/FlairSimulator/SimuBldc.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuBldc.h	(revision 68)
@@ -0,0 +1,80 @@
+// %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 <IODevice.h>
+
+namespace flair {
+namespace core {
+class SharedMem;
+}
+}
+
+namespace flair {
+namespace actuator {
+/*! \class SimuBldc
+*
+* \brief Class for a simulation bldc
+*
+*/
+class SimuBldc : public core::IODevice {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuBldc
+  *
+  * \param parent parent
+  * \param name name
+  * \param motors_count number of motors
+  * \param modelId Model id
+  * \param deviceId Bldc id of the Model
+  */
+  SimuBldc(const core::Object *parent, std::string name, uint8_t motors_count,
+           uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~SimuBldc();
+
+  /*!
+  * \brief Get motors speeds.
+  *
+  *
+  * \param value array to store motors speeds
+  * \param time time when shared memory was written
+  */
+  void GetSpeeds(float *value,core::Time* time) 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){};
+  std::string ShMemName(uint32_t modelId,uint32_t deviceId);
+  core::SharedMem *shmem;
+  char *buf;
+  uint8_t motors_count;
+
+};
+} // end namespace actuator
+} // end namespace flair
+#endif // SIMUBLDC_H
Index: trunk/include/FlairSimulator/SimuCamera.h
===================================================================
--- trunk/include/FlairSimulator/SimuCamera.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuCamera.h	(revision 68)
@@ -0,0 +1,77 @@
+// %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 <IODevice.h>
+
+namespace flair {
+  namespace core {
+    class SharedMem;
+  }
+}
+
+namespace flair {
+namespace sensor {
+/*! \class SimuCamera
+*
+* \brief Class for a simulation camera
+*/
+class SimuCamera : public core::IODevice {
+public:
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuCamera. 
+  *
+  * \param parent parent
+  * \param name name
+  * \param width width
+  * \param height height
+  * \param channels number of channels
+  * \param modelId Model id
+  * \param deviceId Camera id of the Model
+  */
+  SimuCamera(const core::IODevice *parent, std::string name, uint16_t width,
+             uint16_t height, uint8_t channels, uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~SimuCamera();
+
+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){};
+  
+  std::string ShMemName(uint32_t modelId,uint32_t deviceId);
+
+};
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUCAMERA_H
Index: trunk/include/FlairSimulator/SimuGps.h
===================================================================
--- trunk/include/FlairSimulator/SimuGps.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuGps.h	(revision 68)
@@ -0,0 +1,74 @@
+// %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 <IODevice.h>
+
+namespace flair {
+  namespace core {
+    class SharedMem;
+  }
+}
+
+namespace flair {
+namespace sensor {
+/*! \class SimuGps
+*
+* \brief Class for a simulation GPS
+*/
+class SimuGps : public core::IODevice {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a simulation GPS.
+  *
+  * \param parent parent
+  * \param name name
+  * \param modelId Model id
+  * \param deviceId Gps id of the Model
+  */
+  SimuGps(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \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);
+
+  typedef struct {
+    float e;
+    float n;
+    float u;
+    float ve;
+    float vn;
+  } gps_states_t;
+  
+  std::string ShMemName(uint32_t modelId,uint32_t deviceId);
+
+  core::SharedMem *shmem;
+};
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUGPS_H
Index: trunk/include/FlairSimulator/SimuImu.h
===================================================================
--- trunk/include/FlairSimulator/SimuImu.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuImu.h	(revision 68)
@@ -0,0 +1,82 @@
+// %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 <IODevice.h>
+
+namespace flair {
+  namespace core {
+    class SharedMem;
+  }
+}
+
+namespace flair {
+namespace sensor {
+/*! \class SimuImu
+*
+* \brief Class for a simulation Imu
+*/
+class SimuImu : public core::IODevice {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuImu.
+  *
+  * \param parent parent
+  * \param name name
+  * \param modelId Model id
+  * \param deviceId Imu id of the Model
+  */
+  SimuImu(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~SimuImu();
+
+private:
+  /*!
+  * \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;
+    float ax;
+    float ay;
+    float az;
+    float mx;
+    float my;
+    float mz;
+  } imu_states_t;
+  
+  std::string ShMemName(uint32_t modelId,uint32_t deviceId);
+
+  core::SharedMem *shmem;
+};
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUIMU_H
Index: trunk/include/FlairSimulator/SimuLaser.h
===================================================================
--- trunk/include/FlairSimulator/SimuLaser.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuLaser.h	(revision 68)
@@ -0,0 +1,73 @@
+// %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 flair {
+namespace sensor {
+/*! \class SimuUs
+*
+* \brief Class for a simulation UsRangeFinder
+*/
+class SimuLaser : public core::IODevice {
+public:
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuUs.
+  *
+  * \param parent parent
+  * \param name name
+  * \param modelId Model id
+  * \param deviceId LaserRangeFinder id of the Model
+  */
+  SimuLaser(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \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){};
+
+  std::string ShMemName(uint32_t modelId,uint32_t deviceId);
+};
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMULASER_H
Index: trunk/include/FlairSimulator/SimuUs.h
===================================================================
--- trunk/include/FlairSimulator/SimuUs.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuUs.h	(revision 68)
@@ -0,0 +1,83 @@
+// %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 <IODevice.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::IODevice {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuUs
+  *
+  * \param parent parent
+  * \param name name
+  * \param modelId Model id
+  * \param deviceId UsRangeFinder id of the Model
+  */
+  SimuUs(const core::IODevice *parent, std::string name, uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \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);
+  
+  std::string ShMemName(uint32_t modelId,uint32_t deviceId);
+  gui::SpinBox *data_rate;
+};
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUUS_H
Index: trunk/include/FlairSimulator/X4.h
===================================================================
--- trunk/include/FlairSimulator/X4.h	(revision 62)
+++ trunk/include/FlairSimulator/X4.h	(revision 68)
@@ -26,4 +26,5 @@
 namespace gui {
 class DoubleSpinBox;
+class SpinBox;
 }
 namespace actuator {
@@ -63,4 +64,5 @@
   gui::DoubleSpinBox *f_air_vert, *f_air_lat;
   gui::DoubleSpinBox *j_roll, *j_pitch, *j_yaw;
+  gui::SpinBox *motorTimeout;
 };
 } // end namespace simulator
Index: trunk/include/FlairSimulator/X8.h
===================================================================
--- trunk/include/FlairSimulator/X8.h	(revision 62)
+++ trunk/include/FlairSimulator/X8.h	(revision 68)
@@ -26,4 +26,5 @@
 namespace gui {
 class DoubleSpinBox;
+class SpinBox;
 }
 namespace actuator {
@@ -65,4 +66,5 @@
   gui::DoubleSpinBox *j_roll, *j_pitch, *j_yaw;
   gui::DoubleSpinBox *j_r, *sigma, *S;
+  gui::SpinBox *motorTimeout;
 };
 } // end namespace simulator
Index: trunk/include/FlairVisionFilter/HoughLines.h
===================================================================
--- trunk/include/FlairVisionFilter/HoughLines.h	(revision 62)
+++ trunk/include/FlairVisionFilter/HoughLines.h	(revision 68)
@@ -17,5 +17,5 @@
     namespace core {
         class cvimage;
-        class cvmatrix;
+        class Matrix;
     }
     namespace gui {
@@ -56,5 +56,5 @@
             float GetOrientation(void) const;
             float GetDistance(void) const;
-            core::cvmatrix *Output(void) const;
+            core::Matrix *Output(void) const;
 
         private:
@@ -69,5 +69,5 @@
             float distance,orientation;
             CvMat* linesStorage;
-            core::cvmatrix *output;
+            core::Matrix *output;
     };
 } // end namespace filter
Index: trunk/include/FlairVisionFilter/OpticalFlowSpeed.h
===================================================================
--- trunk/include/FlairVisionFilter/OpticalFlowSpeed.h	(revision 62)
+++ trunk/include/FlairVisionFilter/OpticalFlowSpeed.h	(revision 68)
@@ -17,5 +17,5 @@
     namespace core
     {
-        class cvmatrix;
+        class Matrix;
     }
 }
@@ -71,5 +71,5 @@
             * Second line is speed along y axis. \n
             */
-            core::cvmatrix *Output() const;
+            core::Matrix *Output() const;
 
         private:
@@ -83,5 +83,5 @@
             void UpdateFrom(const core::io_data *data);
 
-            core::cvmatrix *output;
+            core::Matrix *output;
     };
 } // end namespace filter
