Index: trunk/include/FlairCore/ConnectedSocket.h
===================================================================
--- trunk/include/FlairCore/ConnectedSocket.h	(revision 68)
+++ trunk/include/FlairCore/ConnectedSocket.h	(revision 74)
@@ -53,5 +53,5 @@
   * \brief Returns a socket on a new incoming connexion
   *
-  * \param ConnectedSocket &listeningSocket
+  * \param timeout timeout (in nanoseconds)
   */
   virtual ConnectedSocket *Accept(
@@ -65,5 +65,5 @@
   * \param unsigned int port
   * \param const distantAddress
-  * \param timeout timeout (in milliseconds)
+  * \param timeout timeout (in nanoseconds)
   */
   virtual bool Connect(const unsigned int port,
@@ -71,9 +71,9 @@
 
   /*!
-  * \brief Send a message
+  * \brief Send a message waiting up to timeout ns
   *
   * \param message message
   * \param message_len message length
-  * \param timeout timeout (in milliseconds)
+  * \param timeout timeout (in nanoseconds)
   */
   virtual ssize_t SendMessage(const char *message, size_t message_len,
@@ -83,9 +83,9 @@
   * \brief Receive a message
   *
-  * Receive a message and wait up to timeout. \n
+  * Receive a message and wait up to timeout ns. \n
   *
   * \param buf buffer to put the message
   * \param buf_len buffer length
-  * \param timeout timeout (in milliseconds)
+  * \param timeout timeout (in nanoseconds)
   *
   * \return size of the received message
Index: trunk/include/FlairCore/IODevice.h
===================================================================
--- trunk/include/FlairCore/IODevice.h	(revision 68)
+++ trunk/include/FlairCore/IODevice.h	(revision 74)
@@ -151,5 +151,4 @@
     void SetIsReady(bool status);
 
-private:
   /*!
   * \brief Update using provided datas
@@ -164,4 +163,5 @@
   virtual void UpdateFrom(const io_data *data) = 0;
 
+  private:
   class IODevice_impl *pimpl_;
 };
Index: trunk/include/FlairCore/Semaphore.h
===================================================================
--- trunk/include/FlairCore/Semaphore.h	(revision 68)
+++ trunk/include/FlairCore/Semaphore.h	(revision 74)
@@ -31,4 +31,5 @@
 
 public:
+  enum class Type { anonymous, named };
   /*!
   * \brief Constructor
@@ -39,5 +40,5 @@
   * \param name name
   */
-  Semaphore(const Object *parent, uint32_t initialValue, std::string name = "");
+  Semaphore(const Object *parent, uint32_t initialValue, std::string name = "", Type type=Type::anonymous);
 
   /*!
@@ -74,4 +75,5 @@
 private:
   class Semaphore_impl *pimpl_;
+  Type type;
 };
 
Index: trunk/include/FlairCore/SharedMem.h
===================================================================
--- trunk/include/FlairCore/SharedMem.h	(revision 68)
+++ trunk/include/FlairCore/SharedMem.h	(revision 74)
@@ -40,6 +40,7 @@
   * \param parent parent
   * \param name name
-  * \param size size of the shared memory
-  * \param blockOnRead if true reading will block if nothing written
+  * \param size size of the shared memory:w
+   *
+  * \param type mutex or producerConsumer. Mutex type is for symmetrical use (default)
   */
   SharedMem(const Object *parent, std::string name, size_t size, Type type=Type::mutex);
Index: trunk/include/FlairCore/TcpSocket.h
===================================================================
--- trunk/include/FlairCore/TcpSocket.h	(revision 68)
+++ trunk/include/FlairCore/TcpSocket.h	(revision 74)
@@ -30,11 +30,9 @@
   void Listen(const unsigned int port, const std::string localAddress = "ANY");
   TcpSocket *Accept(
-      Time timeout = 0); // should throw an exception if not a listening socket
+      Time timeout = TIME_INFINITE);
   bool Connect(const unsigned int distantPort, const std::string distantAddress,
-               Time timeout = 0); // timeout in milliseconds
-  ssize_t SendMessage(const char *message, size_t message_len,
-                      Time timeout = 0); // timeout in milliseconds
-  ssize_t RecvMessage(char *buf, size_t buf_len,
-                      Time timeout = 0); // timeout in milliseconds
+               Time timeout = TIME_INFINITE);
+  ssize_t SendMessage(const char *message, size_t message_len, Time timeout = TIME_INFINITE);
+  ssize_t RecvMessage(char *buf, size_t buf_len, Time timeout = TIME_INFINITE);
 
   uint16_t NetworkToHost16(uint16_t data);
@@ -48,6 +46,8 @@
   bool blockOnReceive;
   bool isConnected;
+  bool isListening;
   unsigned int distantPort;
   std::string distantAddress;
+  char *sendRingBuffer, *recvRingBuffer;
 };
 
Index: trunk/include/FlairSensorActuator/HostEthController.h
===================================================================
--- trunk/include/FlairSensorActuator/HostEthController.h	(revision 68)
+++ trunk/include/FlairSensorActuator/HostEthController.h	(revision 74)
@@ -25,15 +25,15 @@
 
 namespace flair {
-namespace core {
-class Matrix;
-class TcpSocket;
-class UdpSocket;
-class Mutex;
-}
-namespace gui {
-class Tab;
-class TabWidget;
-class DataPlot1D;
-}
+  namespace core {
+    class Matrix;
+    class TcpSocket;
+    class UdpSocket;
+    class Mutex;
+  }
+  namespace gui {
+    class Tab;
+    class TabWidget;
+    class DataPlot1D;
+  }
 }
 
@@ -47,9 +47,9 @@
 *through ethernet connection
 *
-* There are 2 communication channels:
+* There are 3 communication channels:
 *   - 1 connection with the ground station to display the values. Output for
-*analog sticks is normalized in the range [-1, 1] (float values)
-*   - 1 connection with the target to send the controller values (and receive
-*controller state modification requests)
+*analog sticks is normalized in the range [-1, 1] (float values) (through DrawUserInterface, use a UDT socket)
+*   - 1 connection with the target to send the controller values (through udp socket - high bandwitdh, packets may be discarded)
+*   - 1 connection with the target to receive controller state modification requests (through tcp socket - low bandwidth, packets must not be discarded)
 */
 class HostEthController : public core::Thread, public core::IODevice {
@@ -107,5 +107,5 @@
 
   bool ControllerInitialization();
-  bool ConnectedWithTarget();
+  bool ConnectWithTarget();
   void SendControllerInfo();
   void Run();
Index: trunk/include/FlairSensorActuator/SimuPressureSensor.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuPressureSensor.h	(revision 74)
+++ trunk/include/FlairSensorActuator/SimuPressureSensor.h	(revision 74)
@@ -0,0 +1,86 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file SimuPressureSensor.h
+ * \brief Class for a simulation PressureSensor
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2018/05/24
+ * \version 4.0
+ */
+
+#ifndef SIMUPRESSURESENSOR_H
+#define SIMUPRESSURESENSOR_H
+
+#include <PressureSensor.h>
+#include <Thread.h>
+
+namespace flair {
+namespace core {
+class SharedMem;
+}
+namespace gui {
+class SpinBox;
+}
+}
+
+namespace flair {
+namespace sensor {
+/*! \class SimuPressureSensor
+*
+* \brief Class for a simulation PressureSensor
+*/
+class SimuPressureSensor : public core::Thread, public PressureSensor {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuPressureSensor.
+	* It will be child of the FrameworkManager.
+  *
+  * \param name name
+  * \param modelId Model id
+  * \param deviceId PressureSensor id of the Model
+  * \param priority priority of the Thread
+  */
+  SimuPressureSensor(std::string name,
+         uint32_t modelId,uint32_t deviceId, uint8_t priority);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~SimuPressureSensor();
+
+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 // SIMUPRESSURESENSOR_H
Index: trunk/include/FlairSimulator/SimuPressureSensor.h
===================================================================
--- trunk/include/FlairSimulator/SimuPressureSensor.h	(revision 74)
+++ trunk/include/FlairSimulator/SimuPressureSensor.h	(revision 74)
@@ -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 SimuPressureSensor.h
+ * \brief Class for a simulation PressureSensor
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2018/05/24
+ * \version 4.0
+ */
+
+#ifndef SIMUPRESSURESENSOR_H
+#define SIMUPRESSURESENSOR_H
+
+#include <IODevice.h>
+
+namespace flair {
+namespace core {
+class SharedMem;
+}
+namespace gui {
+class SpinBox;
+class DoubleSpinBox;
+}
+namespace simulator {
+class Model;
+}
+}
+
+namespace flair {
+namespace sensor {
+/*! \class SimuPressureSensor
+*
+* \brief Class for a simulation PressureSensor
+*/
+class SimuPressureSensor : public core::IODevice {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct a SimuPressureSensor
+  *
+  * \param parent parent
+  * \param name name
+  * \param modelId Model id
+  * \param deviceId PressureSensor id of the Model
+  */
+  SimuPressureSensor(const simulator::Model *parent, std::string name, uint32_t modelId,uint32_t deviceId);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~SimuPressureSensor();
+
+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);
+  gui::SpinBox *data_rate;
+  gui::DoubleSpinBox *seaPressure;
+};
+} // end namespace sensor
+} // end namespace flair
+#endif // SIMUPRESSURESENSOR_H
Index: trunk/include/FlairSimulator/SimuUs.h
===================================================================
--- trunk/include/FlairSimulator/SimuUs.h	(revision 68)
+++ trunk/include/FlairSimulator/SimuUs.h	(revision 74)
@@ -67,12 +67,4 @@
   */
   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);
