Index: trunk/include/FlairCore/io_data.h
===================================================================
--- trunk/include/FlairCore/io_data.h	(revision 31)
+++ trunk/include/FlairCore/io_data.h	(revision 32)
@@ -58,4 +58,14 @@
 extern SignedIntegerType Int16Type;
 
+class UnsignedIntegerType : public ScalarType {
+public:
+  UnsignedIntegerType(size_t sizeInBits) : ScalarType(sizeInBits / 8) {}
+  std::string GetDescription() const {
+    return "uint" + std::to_string(GetSize() * 8) + "_t";
+  };
+};
+extern UnsignedIntegerType UInt8Type;
+extern UnsignedIntegerType UInt16Type;
+
 class FloatType : public ScalarType {
 public:
@@ -64,4 +74,11 @@
 };
 extern FloatType floatType;
+
+class DoubleType : public ScalarType {
+public:
+  DoubleType() : ScalarType(8) {}
+  std::string GetDescription() const { return "double"; };
+};
+extern DoubleType doubleType;
 
 /*! \class io_data
Index: trunk/include/FlairFilter/Ahrs.h
===================================================================
--- trunk/include/FlairFilter/Ahrs.h	(revision 31)
+++ trunk/include/FlairFilter/Ahrs.h	(revision 32)
@@ -18,18 +18,18 @@
 
 namespace flair {
-namespace core {
-class Euler;
-class Vector3D;
-class ImuData;
-class Quaternion;
-class AhrsData;
-}
-namespace gui {
-class Tab;
-class DataPlot1D;
-}
-namespace sensor {
-class Imu;
-}
+  namespace core {
+    class Euler;
+    class Vector3D;
+    class ImuData;
+    class Quaternion;
+    class AhrsData;
+  }
+  namespace gui {
+    class Tab;
+    class DataPlot1D;
+  }
+  namespace sensor {
+    class Imu;
+  }
 }
 
Index: trunk/include/FlairSensorActuator/Imu.h
===================================================================
--- trunk/include/FlairSensorActuator/Imu.h	(revision 31)
+++ trunk/include/FlairSensorActuator/Imu.h	(revision 32)
@@ -17,15 +17,15 @@
 
 namespace flair {
-namespace core {
-class ImuData;
-class OneAxisRotation;
-}
-namespace gui {
-class Tab;
-class TabWidget;
-class GroupBox;
-class Layout;
-class DataPlot1D;
-}
+  namespace core {
+    class ImuData;
+    class OneAxisRotation;
+  }
+  namespace gui {
+    class Tab;
+    class TabWidget;
+    class GroupBox;
+    class Layout;
+    class DataPlot1D;
+  }
 }
 
Index: trunk/include/FlairSensorActuator/Mb800.h
===================================================================
--- trunk/include/FlairSensorActuator/Mb800.h	(revision 31)
+++ trunk/include/FlairSensorActuator/Mb800.h	(revision 32)
@@ -15,5 +15,5 @@
 
 #include <Thread.h>
-#include <Gps.h>
+#include <NmeaGps.h>
 
 namespace flair {
@@ -30,5 +30,5 @@
 * \brief Class for mb800 gps receiver
 */
-class Mb800 : public core::Thread, public Gps {
+class Mb800 : public core::Thread, public NmeaGps {
 public:
   /*!
@@ -44,5 +44,5 @@
   */
   Mb800(const core::FrameworkManager *parent, std::string name,
-        core::SerialPort *serialport, Gps::NMEAFlags_t NMEAFlags,
+        core::SerialPort *serialport, NmeaGps::NMEAFlags_t NMEAFlags,
         uint8_t priority);
 
Index: trunk/include/FlairSensorActuator/NmeaGps.h
===================================================================
--- trunk/include/FlairSensorActuator/NmeaGps.h	(revision 32)
+++ trunk/include/FlairSensorActuator/NmeaGps.h	(revision 32)
@@ -0,0 +1,225 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file NmeaGps.h
+ * \brief Base class for GPS using NMEA sentances
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/08/23
+ * \version 4.0
+ */
+
+#ifndef NMEAGPS_H
+#define NMEAGPS_H
+
+#include <IODevice.h>
+#include <nmea/nmea.h>
+
+namespace flair {
+  namespace core {
+    class FrameworkManager;
+    class GeoCoordinate;
+    class Vector3D;
+    class GpsData;
+  }
+  namespace gui {
+    class Layout;
+    class DataPlot1D;
+    class Tab;
+    class TabWidget;
+    class PushButton;
+    class Map;
+    class Label;
+    class GroupBox;
+  }
+}
+
+namespace flair {
+namespace sensor {
+
+/*! \class NmeaGps
+*
+* \brief Base class for GPS using NMEA sentances
+*/
+class NmeaGps : public core::IODevice {
+public:
+  /*!
+  \enum NMEAFlags_t
+  \brief NMEA flags
+  */
+  enum NMEAFlags_t {
+    GGA = 0x01, /*!< GGA */
+    VTG = 0x02, /*!< VTG */
+    GST = 0x04, /*!< GST */
+  };
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct a NmeaGps.
+  *
+  * \param parent parent
+  * \param name name
+  * \param NMEAFlags NMEA sentances to enable
+  */
+  NmeaGps(const core::FrameworkManager *parent, std::string name,
+      NMEAFlags_t NMEAFlags);
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct a NmeaGps. \n
+  * This contructor must only be called for a simulated device.
+  *
+  * \param parent parent
+  * \param name name
+  */
+  NmeaGps(const core::IODevice *parent, std::string name);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~NmeaGps();
+
+  /*!
+  * \brief Get GPS datas
+  *
+  * \return GpsData
+  */
+  const core::GpsData *GetDatas(void) const;
+
+  /*!
+  * \brief Use default plot
+  *
+  */
+  void UseDefaultPlot(void);
+
+  /*!
+  * \brief East plot
+  *
+  * \return east plot
+  */
+  gui::DataPlot1D *EPlot(void) const;
+
+  /*!
+  * \brief North plot
+  *
+  * \return north plot
+  */
+  gui::DataPlot1D *NPlot(void) const;
+
+  /*!
+  * \brief Up plot
+  *
+  * \return up plot
+  */
+  gui::DataPlot1D *UPlot(void) const;
+
+  /*!
+  * \brief East velocity plot
+  *
+  * \return east velocity plot
+  */
+  gui::DataPlot1D *VEPlot(void) const;
+
+  /*!
+  * \brief North velocity plot
+  *
+  * \return north velocity plot
+  */
+  gui::DataPlot1D *VNPlot(void) const;
+
+  /*!
+  * \brief Main tab
+  *
+  * \return main tab
+  */
+  gui::TabWidget *GetTab(void) const;
+
+  /*!
+  * \brief Setup Layout
+  *
+  * \return setup Layout
+  */
+  gui::Layout *GetLayout(void) const;
+
+  /*!
+  * \brief Plot tab
+  *
+  * \return plot Tab
+  */
+  gui::Tab *GetPlotTab(void) const;
+
+  /*!
+  * \brief Set reference for ENU coordinates
+  *
+  * The actual position is used as reference to calculate
+  * ENU coordinates.
+  *
+  * \return fix quality
+  */
+  void SetRef(void);
+
+  /*!
+  * \brief Get ENU position
+  *
+  * \param point to store position
+  */
+  void GetEnu(core::Vector3D *point);
+
+protected:
+  /*!
+  * \brief Parse a NMEA frame
+  *
+  * This function must be called by the reimplemented class. \n
+  * When a frame is parsed, GPS datas are filled.
+  *
+  * \param frame NMEA frame
+  * \param frame_size frame size
+  *
+  */
+  void parseFrame(const char *frame, int frame_size);
+
+  NMEAFlags_t NMEAFlags;
+
+  /*!
+  * \brief Get GPS datas
+  *
+  * \param gpsData GPS datas
+  */
+  void GetDatas(core::GpsData **gpsData) const;
+
+  /*!
+  * \brief Setup GroupBox
+  *
+  * \return setup GroupBox
+  */
+  gui::GroupBox *GetGroupBox(void) const;
+
+private:
+  gui::Tab *mainTab, *sensorTab;
+  gui::TabWidget *tab;
+  gui::GroupBox *setupGroupbox;
+  gui::PushButton *buttonRef;
+  gui::DataPlot1D *ePlot;
+  gui::DataPlot1D *nPlot;
+  gui::DataPlot1D *uPlot;
+  gui::DataPlot1D *vePlot;
+  gui::DataPlot1D *vnPlot;
+  gui::Tab *plotTab;
+  gui::Map *map;
+  gui::Label *nbSatLabel, *fixLabel;
+  core::GeoCoordinate *position;
+  bool takeRef;
+  nmeaINFO info;
+  nmeaPARSER parser;
+  nmeaGPGGA pack;
+  nmeaPOS pos;
+  double latRef, longRef, altRef;
+  core::GpsData* gpsData;
+};
+} // end namespace sensor
+} // end namespace framewor
+#endif // NMEAGPS_H
Index: trunk/include/FlairSensorActuator/Novatel.h
===================================================================
--- trunk/include/FlairSensorActuator/Novatel.h	(revision 31)
+++ trunk/include/FlairSensorActuator/Novatel.h	(revision 32)
@@ -15,5 +15,5 @@
 
 #include <Thread.h>
-#include <Gps.h>
+#include <NmeaGps.h>
 
 namespace flair {
@@ -30,5 +30,5 @@
 * \brief Class for Novatel gps receiver
 */
-class Novatel : public core::Thread, public Gps {
+class Novatel : public core::Thread, public NmeaGps {
 public:
   /*!
@@ -44,5 +44,5 @@
   */
   Novatel(const core::FrameworkManager *parent, std::string name,
-          core::SerialPort *serialport, Gps::NMEAFlags_t NMEAFlags,
+          core::SerialPort *serialport, NmeaGps::NMEAFlags_t NMEAFlags,
           uint8_t priority);
 
Index: trunk/include/FlairSensorActuator/SimuGps.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuGps.h	(revision 31)
+++ trunk/include/FlairSensorActuator/SimuGps.h	(revision 32)
@@ -15,10 +15,15 @@
 
 #include <Thread.h>
-#include <Gps.h>
+#include <NmeaGps.h>
 
 namespace flair {
-namespace core {
-class FrameworkManager;
-}
+  namespace core {
+    class FrameworkManager;
+    class SharedMem;
+  }
+  namespace gui {
+    class SpinBox;
+    class DoubleSpinBox;
+  }
 }
 
@@ -29,18 +34,31 @@
 * \brief Class for a simulation GPS
 */
-class SimuGps : public core::Thread, public Gps {
+class SimuGps : public core::Thread, public NmeaGps {
 public:
   /*!
   * \brief Constructor
   *
-  * Construct a Novatel.
+  * Construct a simulation GPS. Control part.
   *
   * \param parent parent
   * \param name name
   * \param NMEAFlags NMEA sentances to enable
+  * \param deviceId device id
   * \param priority priority of the Thread
   */
   SimuGps(const core::FrameworkManager *parent, std::string name,
-          Gps::NMEAFlags_t NMEAFlags, uint8_t priority);
+          NmeaGps::NMEAFlags_t NMEAFlags, 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 deviceId device id
+  */
+  SimuGps(const core::IODevice *parent, std::string name, uint32_t deviceId);
 
   /*!
@@ -58,5 +76,5 @@
   * \param data data from the parent to process
   */
-  void UpdateFrom(const core::io_data *data){};
+  void UpdateFrom(const core::io_data *data);
 
   /*!
@@ -67,4 +85,14 @@
   */
   void Run(void);
+
+  typedef struct {
+    float x;
+    float y;
+    float z;
+  } gps_states_t;
+
+  core::SharedMem *shmem;
+  gui::SpinBox *dataRate,*fixQuality,*numberOfSatellites;
+  gui::DoubleSpinBox *latitudeRef,*longitudeRef,*altitudeRef;
 };
 } // end namespace sensor
Index: trunk/include/FlairSensorActuator/SimuImu.h
===================================================================
--- trunk/include/FlairSensorActuator/SimuImu.h	(revision 31)
+++ trunk/include/FlairSensorActuator/SimuImu.h	(revision 32)
@@ -18,11 +18,11 @@
 
 namespace flair {
-namespace core {
-class SharedMem;
-class AhrsData;
-}
-namespace gui {
-class SpinBox;
-}
+  namespace core {
+    class SharedMem;
+    class AhrsData;
+  }
+  namespace gui {
+    class SpinBox;
+  }
 }
 
@@ -93,5 +93,6 @@
     float wz;
   } imu_states_t;
-  gui::SpinBox *data_rate;
+
+  gui::SpinBox *dataRate;
   core::SharedMem *shmem;
   core::AhrsData *ahrsData;
Index: trunk/include/FlairSensorActuator/Srf08.h
===================================================================
--- trunk/include/FlairSensorActuator/Srf08.h	(revision 31)
+++ trunk/include/FlairSensorActuator/Srf08.h	(revision 32)
@@ -40,5 +40,5 @@
   * \brief Constructor
   *
-  * Construct a SimuUs. Control part.
+  * Construct a SRF08 sensor
   *
   * \param parent parent
