Index: trunk/lib/FlairMeta/src/Uav.cpp
===================================================================
--- trunk/lib/FlairMeta/src/Uav.cpp	(revision 214)
+++ trunk/lib/FlairMeta/src/Uav.cpp	(revision 215)
@@ -27,4 +27,5 @@
 #include <UsRangeFinder.h>
 #include <NmeaGps.h>
+#include <PressureSensor.h>
 #include <Bldc.h>
 #include <Matrix.h>
@@ -59,4 +60,5 @@
   horizontalCamera = NULL;
   gps = NULL;
+  pressureSensor = NULL;
   this->multiplex = multiplex;
 }
@@ -77,5 +79,7 @@
 }
 
-void Uav::SetBldc(const Bldc *inBldc) { bldc = (Bldc *)inBldc; }
+void Uav::SetBldc(const Bldc *inBldc) { 
+  bldc = (Bldc *)inBldc;
+}
 
 void Uav::SetBatteryMonitor(const BatteryMonitor *inBattery) {
@@ -96,6 +100,11 @@
 }
 
+void Uav::SetPressureSensor(const PressureSensor *inPressureSensor) {
+  pressureSensor=(PressureSensor *)inPressureSensor;
+  getFrameworkManager()->AddDeviceToLog(pressureSensor);
+}
+
 void Uav::SetGps(const NmeaGps *inGps) {
-  gps=(NmeaGps*)inGps;
+  gps=(NmeaGps *)inGps;
   getFrameworkManager()->AddDeviceToLog(gps);
 }
@@ -157,4 +166,5 @@
   ahrs->UseDefaultPlot();
   if(gps!=NULL) gps->UseDefaultPlot();
+  if(pressureSensor!=NULL) pressureSensor->UseDefaultPlot();
 }
 
@@ -179,4 +189,6 @@
 NmeaGps *Uav::GetGps(void) const { return gps; }
 
+PressureSensor *Uav::GetPressureSensor(void) const { return pressureSensor; }
+
 } // end namespace meta
 } // end namespace flair
Index: trunk/lib/FlairMeta/src/Uav.h
===================================================================
--- trunk/lib/FlairMeta/src/Uav.h	(revision 214)
+++ trunk/lib/FlairMeta/src/Uav.h	(revision 215)
@@ -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/lib/FlairSensorActuator/src/PressureSensor.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/PressureSensor.cpp	(revision 215)
+++ trunk/lib/FlairSensorActuator/src/PressureSensor.cpp	(revision 215)
@@ -0,0 +1,96 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+//  created:    2018/02/08
+//  filename:   PressureSensor.cpp
+//
+//  author:     Guillaume Sanahuja
+//              Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+//  version:    $Id: $
+//
+//  purpose:    Base class for PressureSensor
+//
+//
+/*********************************************************************/
+
+#include "PressureSensor.h"
+#include <FrameworkManager.h>
+#include <Tab.h>
+#include <TabWidget.h>
+#include <GroupBox.h>
+#include <Layout.h>
+#include <DataPlot1D.h>
+#include <Matrix.h>
+
+using std::string;
+using namespace flair::core;
+using namespace flair::gui;
+
+namespace flair {
+namespace sensor {
+
+PressureSensor::PressureSensor(string name)
+    : IODevice(getFrameworkManager(), name) {
+  plot_tab = NULL;
+
+  cvmatrix_descriptor *desc = new cvmatrix_descriptor(1, 1);
+  desc->SetElementName(0, 0, name);
+  output = new Matrix(this, desc, floatType);
+  delete desc;
+  AddDataToLog(output);
+
+  main_tab = new Tab(getFrameworkManager()->GetTabWidget(), name);
+  tab = new TabWidget(main_tab->NewRow(), name);
+  sensor_tab = new Tab(tab, "Setup");
+  setup_groupbox = new GroupBox(sensor_tab->NewRow(), name);
+}
+
+PressureSensor::PressureSensor(const IODevice *parent, std::string name)
+    : IODevice(parent, name) {
+  plot_tab = NULL;
+  main_tab = NULL;
+  tab = NULL;
+  sensor_tab = NULL;
+  setup_groupbox = NULL;
+
+  output = NULL;
+}
+
+PressureSensor::~PressureSensor() {
+  if (main_tab != NULL)
+    delete main_tab;
+}
+
+GroupBox *PressureSensor::GetGroupBox(void) const { return setup_groupbox; }
+
+Layout *PressureSensor::GetLayout(void) const { return sensor_tab; }
+
+DataPlot1D *PressureSensor::GetPlot(void) const { return plot; }
+
+Tab *PressureSensor::GetPlotTab(void) const { return plot_tab; }
+
+void PressureSensor::UseDefaultPlot(void) {
+  if (tab == NULL) {
+    Err("not applicable for simulation part.\n");
+    return;
+  }
+
+  plot_tab = new Tab(tab, "Mesures");
+  plot = new DataPlot1D(plot_tab->NewRow(), ObjectName(), 0, 2);
+  plot->AddCurve(output->Element(0));
+}
+
+void PressureSensor::LockUserInterface(void) const {
+  setup_groupbox->setEnabled(false);
+}
+
+void PressureSensor::UnlockUserInterface(void) const {
+  setup_groupbox->setEnabled(true);
+}
+
+float PressureSensor::Value(void) const { return output->Value(0, 0); }
+
+} // end namespace sensor
+} // end namespace flair
Index: trunk/lib/FlairSensorActuator/src/PressureSensor.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/PressureSensor.h	(revision 215)
+++ trunk/lib/FlairSensorActuator/src/PressureSensor.h	(revision 215)
@@ -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
+  */
+  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
