Index: trunk/lib/FlairSensorActuator/src/SimuBldc.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuBldc.cpp	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuBldc.cpp	(revision 224)
@@ -50,27 +50,4 @@
 }
 
-SimuBldc::SimuBldc(const Object *parent, string name, uint8_t motors_count,
-                   uint32_t modelId,uint32_t deviceId)
-    : Bldc(parent, name, motors_count) {
-  shmem =
-      new SharedMem(this, ShMemName(modelId, deviceId), motors_count * sizeof(float)+sizeof(Time));
-      
-  buf=(char*)malloc(motors_count * sizeof(float)+sizeof(Time));
-  if(buf==NULL) {
-    Err("error creating buffer\n");
-    return;
-  } 
-  
-  // reset values
-  float *values=(float*)buf;
-  for (int i = 0; i < motors_count; i++) values[i] = 0;
-  Time time=GetTime();
-  memcpy(buf+motors_count * sizeof(float),&time,sizeof(Time));
-
-  shmem->Write(buf, motors_count * sizeof(float)+sizeof(Time));
-  
-  SetIsReady(true);
-}
-
 SimuBldc::~SimuBldc() {
   if(buf!=NULL) free(buf);
@@ -99,14 +76,4 @@
 }
 
-void SimuBldc::GetSpeeds(float *value,Time* time) const {
-  float *values=(float*)buf;
-  shmem->Read(buf, MotorsCount() * sizeof(float)+sizeof(Time));
-  memcpy(time,buf+MotorsCount() * sizeof(float),sizeof(Time));
-
-  for (int i = 0; i < MotorsCount(); i++) {
-    value[i] = values[i];
-  }
-}
-
 } // end namespace sensor
 } // end namespace flair
Index: trunk/lib/FlairSensorActuator/src/SimuBldc.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuBldc.h	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuBldc.h	(revision 224)
@@ -40,5 +40,5 @@
   * \brief Constructor
   *
-  * Construct a SimuBldc. Control part.
+  * Construct a SimuBldc
   *
   * \param parent parent
@@ -53,32 +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
-  * \param time time when shared memory was written
-  */
-  void GetSpeeds(float *value,core::Time* time) const;
 
   /*!
Index: trunk/lib/FlairSensorActuator/src/SimuCamera.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuCamera.cpp	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuCamera.cpp	(revision 224)
@@ -30,5 +30,4 @@
 namespace sensor {
 
-//control part
 SimuCamera::SimuCamera(string name,
                        uint16_t width, uint16_t height, uint8_t channels,
@@ -49,17 +48,4 @@
 }
 
-//simulation part
-SimuCamera::SimuCamera(const IODevice *parent, string name, uint16_t width,
-                       uint16_t height, uint8_t channels, uint32_t modelId,uint32_t deviceId)
-    : Thread(parent, name, 0), Camera(parent,name) {
-
-  buf_size = width * height * channels+sizeof(Time);
-  
-  shmem = new SharedMem((Thread *)this,ShMemName(modelId, deviceId),
-                        buf_size, SharedMem::Type::producerConsumer);
-  shmemReadBuf=NULL;
-  
-  SetIsReady(true);
-}
 
 SimuCamera::~SimuCamera() {
Index: trunk/lib/FlairSensorActuator/src/SimuCamera.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuCamera.h	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuCamera.h	(revision 224)
@@ -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/lib/FlairSensorActuator/src/SimuGps.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuGps.cpp	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuGps.cpp	(revision 224)
@@ -18,5 +18,4 @@
 #include "SimuGps.h"
 #include <FrameworkManager.h>
-#include <GeoCoordinate.h>
 #include <GpsData.h>
 #include <SharedMem.h>
@@ -57,14 +56,4 @@
 
 
-SimuGps::SimuGps(const IODevice *parent, string name, uint32_t modelId,uint32_t deviceId)
-    : NmeaGps(parent, name), Thread(parent, name, 0) {
-  dataRate = NULL;
-
-  shmem = new SharedMem((Thread *)this,ShMemName(modelId, deviceId),
-                        sizeof(gps_states_t));
-  
-  SetIsReady(true);
-}
-
 SimuGps::~SimuGps() {
   SafeStop();
@@ -76,23 +65,4 @@
   dev_name << "simu" <<  modelId << "_gps_" << deviceId;
   return dev_name.str().c_str();
-}
-
-void SimuGps::UpdateFrom(const io_data *data) {
-  if (data != NULL) {
-    Matrix *input = (Matrix *)data;
-    gps_states_t state;
-
-    input->GetMutex();
-    //simulator is ned, convert it to enu
-    //TODO: put simulator in enu?
-    state.e = input->ValueNoMutex(5, 0);//y simulator
-    state.n = input->ValueNoMutex(4, 0);//x simulator
-    state.u = -input->ValueNoMutex(6, 0);//z simulator
-    state.ve = input->ValueNoMutex(11, 0);//vy simulator
-    state.vn = input->ValueNoMutex(10, 0);//vx simulator
-    input->ReleaseMutex();
-
-    shmem->Write((char *)&state, sizeof(gps_states_t));
-  }
 }
 
Index: trunk/lib/FlairSensorActuator/src/SimuGps.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuGps.h	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuGps.h	(revision 224)
@@ -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/lib/FlairSensorActuator/src/SimuImu.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuImu.cpp	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuImu.cpp	(revision 224)
@@ -34,5 +34,4 @@
 namespace sensor {
 
-//Construct a SimuImu. Control part.
 SimuImu::SimuImu(string name, uint32_t modelId,uint32_t deviceId,
                  uint8_t priority)
@@ -42,14 +41,4 @@
   ahrsData = new AhrsData((Imu *)this);
   
-  shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId),
-                        sizeof(imu_states_t));
-  SetIsReady(true);
-}
-
-//Construct a SimuImu. Simulation part.
-SimuImu::SimuImu(const IODevice *parent, string name, uint32_t modelId,uint32_t deviceId)
-    : Imu(parent,name), Thread(parent, name, 0) {
-  dataRate = NULL;
-
   shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId),
                         sizeof(imu_states_t));
@@ -66,29 +55,4 @@
   dev_name << "simu" <<  modelId << "_imu_" << deviceId;
   return dev_name.str().c_str();
-}
-
-void SimuImu::UpdateFrom(const io_data *data) {
-  if (data != NULL) {
-    Matrix *input = (Matrix *)data;
-    imu_states_t state;
-
-    input->GetMutex();
-    state.q0 = input->ValueNoMutex(0, 0);
-    state.q1 = input->ValueNoMutex(1, 0);
-    state.q2 = input->ValueNoMutex(2, 0);
-    state.q3 = input->ValueNoMutex(3, 0);
-    state.wx = input->ValueNoMutex(7, 0);
-    state.wy = input->ValueNoMutex(8, 0);
-    state.wz = input->ValueNoMutex(9, 0);
-    state.ax = input->ValueNoMutex(13, 0);
-    state.ay = input->ValueNoMutex(14, 0);
-    state.az = input->ValueNoMutex(15, 0);
-    state.mx = input->ValueNoMutex(16, 0);
-    state.my = input->ValueNoMutex(17, 0);
-    state.mz = input->ValueNoMutex(18, 0);
-    input->ReleaseMutex();
-
-    shmem->Write((char *)&state, sizeof(imu_states_t));
-  }
 }
 
Index: trunk/lib/FlairSensorActuator/src/SimuImu.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuImu.h	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuImu.h	(revision 224)
@@ -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/lib/FlairSensorActuator/src/SimuLaser.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuLaser.cpp	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuLaser.cpp	(revision 224)
@@ -17,5 +17,4 @@
 #include "SimuLaser.h"
 #include <FrameworkManager.h>
-#include <ImuData.h>
 #include <SpinBox.h>
 #include <GroupBox.h>
@@ -37,13 +36,4 @@
   data_rate =
       new SpinBox(GetGroupBox()->NewRow(), "data rate", " Hz", 1, 500, 1, 50);
-
-  shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId),
-                        360 * sizeof(float));
-  SetIsReady(true);
-}
-
-SimuLaser::SimuLaser(const IODevice *parent, string name, uint32_t modelId,uint32_t deviceId)
-    : Thread(parent, name, 0), LaserRangeFinder(parent, name) {
-  data_rate = NULL;
 
   shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId),
Index: trunk/lib/FlairSensorActuator/src/SimuLaser.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuLaser.h	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuLaser.h	(revision 224)
@@ -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/lib/FlairSensorActuator/src/SimuUs.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuUs.cpp	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuUs.cpp	(revision 224)
@@ -17,5 +17,4 @@
 #include "SimuUs.h"
 #include <FrameworkManager.h>
-#include <ImuData.h>
 #include <SpinBox.h>
 #include <GroupBox.h>
@@ -41,14 +40,4 @@
   shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId), sizeof(float));
 
-  SetIsReady(true);
-}
-
-//simulation part
-SimuUs::SimuUs(const IODevice *parent, string name,uint32_t modelId,uint32_t deviceId)
-    : Thread(parent, name, 0), UsRangeFinder(parent,name) {
-  data_rate = NULL;
-
-  shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId), sizeof(float));
-  
   SetIsReady(true);
 }
Index: trunk/lib/FlairSensorActuator/src/SimuUs.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/SimuUs.h	(revision 223)
+++ trunk/lib/FlairSensorActuator/src/SimuUs.h	(revision 224)
@@ -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/lib/FlairSimulator/src/SimuBldc.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuBldc.cpp	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuBldc.cpp	(revision 224)
@@ -0,0 +1,76 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2014/02/07
+//  filename:   SimuBldc.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Class for a simulation bldc
+//
+//
+/*********************************************************************/
+#include "SimuBldc.h"
+#include <SharedMem.h>
+#include <sstream>
+#include <string.h>
+
+using std::string;
+using std::ostringstream;
+using namespace flair::core;
+
+namespace flair {
+namespace actuator {
+
+
+SimuBldc::SimuBldc(const Object *parent, string name, uint8_t motors_count,
+                   uint32_t modelId,uint32_t deviceId)
+    : IODevice(parent, name) {
+  shmem =
+      new SharedMem(this, ShMemName(modelId, deviceId), motors_count * sizeof(float)+sizeof(Time));
+      
+  buf=(char*)malloc(motors_count * sizeof(float)+sizeof(Time));
+  if(buf==NULL) {
+    Err("error creating buffer\n");
+    return;
+  } 
+  
+  // reset values
+  float *values=(float*)buf;
+  for (int i = 0; i < motors_count; i++) values[i] = 0;
+  Time time=GetTime();
+  memcpy(buf+motors_count * sizeof(float),&time,sizeof(Time));
+
+  shmem->Write(buf, motors_count * sizeof(float)+sizeof(Time));
+  
+  SetIsReady(true);
+  this->motors_count=motors_count;
+}
+
+SimuBldc::~SimuBldc() {
+  if(buf!=NULL) free(buf);
+}
+
+string SimuBldc::ShMemName(uint32_t modelId,uint32_t deviceId) {
+  ostringstream dev_name;
+  dev_name << "simu" <<  modelId << "_bldc_" << deviceId;
+  return dev_name.str().c_str();
+}
+
+
+void SimuBldc::GetSpeeds(float *value,Time* time) const {
+  float *values=(float*)buf;
+  shmem->Read(buf, motors_count * sizeof(float)+sizeof(Time));
+  memcpy(time,buf+motors_count * sizeof(float),sizeof(Time));
+
+  for (int i = 0; i < motors_count; i++) {
+    value[i] = values[i];
+  }
+}
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSimulator/src/SimuBldc.h
===================================================================
--- trunk/lib/FlairSimulator/src/SimuBldc.h	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuBldc.h	(revision 224)
@@ -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/lib/FlairSimulator/src/SimuCamera.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuCamera.cpp	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuCamera.cpp	(revision 224)
@@ -0,0 +1,55 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2014/03/06
+//  filename:   SimuCamera.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Class for a simulation camera
+//
+//
+/*********************************************************************/
+
+#include "SimuCamera.h"
+#include <SharedMem.h>
+#include <sstream>
+
+using std::string;
+using std::ostringstream;
+using namespace flair::core;
+
+namespace flair {
+namespace sensor {
+
+
+SimuCamera::SimuCamera(const IODevice *parent, string name, uint16_t width,
+                       uint16_t height, uint8_t channels, uint32_t modelId,uint32_t deviceId)
+    : IODevice(parent,name) {
+
+  size_t buf_size = width * height * channels+sizeof(Time);
+  
+  shmem = new SharedMem(this,ShMemName(modelId, deviceId),
+                        buf_size, SharedMem::Type::producerConsumer);
+  
+  SetIsReady(true);
+}
+
+SimuCamera::~SimuCamera() {
+ 
+}
+
+string SimuCamera::ShMemName(uint32_t modelId,uint32_t deviceId) {
+  ostringstream dev_name;
+  dev_name << "simu" <<  modelId << "_cam_" << deviceId;
+  return dev_name.str().c_str();
+}
+
+
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSimulator/src/SimuCamera.h
===================================================================
--- trunk/lib/FlairSimulator/src/SimuCamera.h	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuCamera.h	(revision 224)
@@ -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/lib/FlairSimulator/src/SimuCameraGL.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuCameraGL.cpp	(revision 223)
+++ trunk/lib/FlairSimulator/src/SimuCameraGL.cpp	(revision 224)
@@ -69,5 +69,5 @@
              "Intel Open Source Technology Center") == 0) {
     //Thread::Warn("disabling cameras output for Intel card (bug with PBO)\n");
-    Thread::Warn("camera output for Intel card may have bugs with PBO\n");
+    Warn("camera output for Intel card may have bugs with PBO\n");
     //disable_output = true;
     disable_output = false;
@@ -94,9 +94,9 @@
     use_pbo = false;
     buffer = (char *)malloc(width * height * 3+sizeof(Time));
-    Thread::Warn("GL_ARB_pixel_buffer_object is not suppoorted\n");
+    Warn("GL_ARB_pixel_buffer_object is not suppoorted\n");
   }
   if (isGlExtensionSupported("GL_PACK_INVERT_MESA")) {
     invert_pixel = false;
-    Thread::Warn("GL_PACK_INVERT_MESA is supported\n");
+    Warn("GL_PACK_INVERT_MESA is supported\n");
   } else {
     invert_pixel = true;
Index: trunk/lib/FlairSimulator/src/SimuGps.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuGps.cpp	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuGps.cpp	(revision 224)
@@ -0,0 +1,71 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2014/05/26
+//  filename:   SimuGps.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Class for a simulation GPS
+//
+//
+/*********************************************************************/
+
+#include "SimuGps.h"
+#include <FrameworkManager.h>
+#include <SharedMem.h>
+#include <Matrix.h>
+#include <sstream>
+
+using std::string;
+using std::ostringstream;
+using namespace flair::core;
+
+namespace flair {
+namespace sensor {
+
+
+SimuGps::SimuGps(const IODevice *parent, string name, uint32_t modelId,uint32_t deviceId)
+    : IODevice(parent, name) {
+
+  shmem = new SharedMem(this,ShMemName(modelId, deviceId),
+                        sizeof(gps_states_t));
+  
+  SetIsReady(true);
+}
+
+SimuGps::~SimuGps() {
+ 
+}
+
+string SimuGps::ShMemName(uint32_t modelId,uint32_t deviceId) {
+  ostringstream dev_name;
+  dev_name << "simu" <<  modelId << "_gps_" << deviceId;
+  return dev_name.str().c_str();
+}
+
+void SimuGps::UpdateFrom(const io_data *data) {
+  if (data != NULL) {
+    Matrix *input = (Matrix *)data;
+    gps_states_t state;
+
+    input->GetMutex();
+    //simulator is ned, convert it to enu
+    //TODO: put simulator in enu?
+    state.e = input->ValueNoMutex(5, 0);//y simulator
+    state.n = input->ValueNoMutex(4, 0);//x simulator
+    state.u = -input->ValueNoMutex(6, 0);//z simulator
+    state.ve = input->ValueNoMutex(11, 0);//vy simulator
+    state.vn = input->ValueNoMutex(10, 0);//vx simulator
+    input->ReleaseMutex();
+
+    shmem->Write((char *)&state, sizeof(gps_states_t));
+  }
+}
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSimulator/src/SimuGps.h
===================================================================
--- trunk/lib/FlairSimulator/src/SimuGps.h	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuGps.h	(revision 224)
@@ -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/lib/FlairSimulator/src/SimuImu.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuImu.cpp	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuImu.cpp	(revision 224)
@@ -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}
+//  created:    2014/02/07
+//  filename:   SimuImu.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Class for a simulation imu
+//
+//
+/*********************************************************************/
+
+#include "SimuImu.h"
+#include <Matrix.h>
+#include <SharedMem.h>
+#include <sstream>
+
+using std::string;
+using std::ostringstream;
+using namespace flair::core;
+
+namespace flair {
+namespace sensor {
+
+SimuImu::SimuImu(const IODevice *parent, string name, uint32_t modelId,uint32_t deviceId)
+    : IODevice(parent,name) {
+ 
+  shmem = new SharedMem(this, ShMemName(modelId, deviceId),
+                        sizeof(imu_states_t));
+  SetIsReady(true);
+}
+
+SimuImu::~SimuImu() {
+}
+
+string SimuImu::ShMemName(uint32_t modelId,uint32_t deviceId) {
+  ostringstream dev_name;
+  dev_name << "simu" <<  modelId << "_imu_" << deviceId;
+  return dev_name.str().c_str();
+}
+
+void SimuImu::UpdateFrom(const io_data *data) {
+  if (data != NULL) {
+    Matrix *input = (Matrix *)data;
+    imu_states_t state;
+
+    input->GetMutex();
+    state.q0 = input->ValueNoMutex(0, 0);
+    state.q1 = input->ValueNoMutex(1, 0);
+    state.q2 = input->ValueNoMutex(2, 0);
+    state.q3 = input->ValueNoMutex(3, 0);
+    state.wx = input->ValueNoMutex(7, 0);
+    state.wy = input->ValueNoMutex(8, 0);
+    state.wz = input->ValueNoMutex(9, 0);
+    state.ax = input->ValueNoMutex(13, 0);
+    state.ay = input->ValueNoMutex(14, 0);
+    state.az = input->ValueNoMutex(15, 0);
+    state.mx = input->ValueNoMutex(16, 0);
+    state.my = input->ValueNoMutex(17, 0);
+    state.mz = input->ValueNoMutex(18, 0);
+    input->ReleaseMutex();
+
+    shmem->Write((char *)&state, sizeof(imu_states_t));
+  }
+}
+
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSimulator/src/SimuImu.h
===================================================================
--- trunk/lib/FlairSimulator/src/SimuImu.h	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuImu.h	(revision 224)
@@ -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/lib/FlairSimulator/src/SimuLaser.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuLaser.cpp	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuLaser.cpp	(revision 224)
@@ -0,0 +1,49 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2014/02/07
+//  filename:   SimuUs.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Class for a simulation us
+//
+//
+/*********************************************************************/
+#include "SimuLaser.h"
+#include <SharedMem.h>
+#include <sstream>
+
+using std::string;
+using std::ostringstream;
+using namespace flair::core;
+using namespace flair::gui;
+
+namespace flair {
+namespace sensor {
+
+
+SimuLaser::SimuLaser(const IODevice *parent, string name, uint32_t modelId,uint32_t deviceId)
+    : IODevice(parent, name) {
+
+  shmem = new SharedMem((Thread *)this, ShMemName(modelId, deviceId),
+                        360 * sizeof(float));
+  SetIsReady(true);
+}
+
+SimuLaser::~SimuLaser() {
+}
+
+string SimuLaser::ShMemName(uint32_t modelId,uint32_t deviceId) {
+  ostringstream dev_name;
+  dev_name << "simu" <<  modelId << "_laser_" << deviceId;
+  return dev_name.str().c_str();
+}
+
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSimulator/src/SimuLaser.h
===================================================================
--- trunk/lib/FlairSimulator/src/SimuLaser.h	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuLaser.h	(revision 224)
@@ -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/lib/FlairSimulator/src/SimuUs.cpp
===================================================================
--- trunk/lib/FlairSimulator/src/SimuUs.cpp	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuUs.cpp	(revision 224)
@@ -0,0 +1,47 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2014/02/07
+//  filename:   SimuUs.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Class for a simulation us
+//
+//
+/*********************************************************************/
+#include "SimuUs.h"
+#include <SharedMem.h>
+#include <sstream>
+
+using std::string;
+using std::ostringstream;
+using namespace flair::core;
+
+namespace flair {
+namespace sensor {
+
+SimuUs::SimuUs(const IODevice *parent, string name,uint32_t modelId,uint32_t deviceId)
+    : IODevice(parent,name) {
+  
+  shmem = new SharedMem(this, ShMemName(modelId, deviceId), sizeof(float));
+  
+  SetIsReady(true);
+}
+
+SimuUs::~SimuUs() {
+}
+
+string SimuUs::ShMemName(uint32_t modelId,uint32_t deviceId) {
+  ostringstream dev_name;
+  dev_name << "simu" <<  modelId << "_us_" << deviceId;
+  return dev_name.str().c_str();
+}
+
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSimulator/src/SimuUs.h
===================================================================
--- trunk/lib/FlairSimulator/src/SimuUs.h	(revision 224)
+++ trunk/lib/FlairSimulator/src/SimuUs.h	(revision 224)
@@ -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
