Index: trunk/lib/FlairCore/src/GpsData.cpp
===================================================================
--- trunk/lib/FlairCore/src/GpsData.cpp	(revision 179)
+++ trunk/lib/FlairCore/src/GpsData.cpp	(revision 180)
@@ -49,4 +49,7 @@
     case GpsData::EastVelocity:
     case GpsData::NorthVelocity:
+    case GpsData::Pdop:
+    case GpsData::Hdop:
+    case GpsData::Vdop:
       size=4;
       break;
@@ -62,5 +65,5 @@
   void CopyData(char *dst) const {
     double latitude,longitude;
-    float altitude,east,north,up,eastVelocity,northVelocity;
+    float altitude,east,north,up,eastVelocity,northVelocity,pDop,hDop,vDop;
 
     gpsdata->GetLla(latitude,longitude,altitude);
@@ -69,4 +72,5 @@
     gpsdata->GetEnu(east,north,up);
     gpsdata->GetVelocity(eastVelocity,northVelocity);
+    gpsdata->GetDop(pDop,hDop,vDop);
 
     switch (plotableData) {
@@ -100,4 +104,13 @@
     case GpsData::NorthVelocity:
       memcpy(dst, &northVelocity, sizeof(northVelocity));
+      break;
+    case GpsData::Pdop:
+      memcpy(dst, &pDop, sizeof(pDop));
+      break;
+    case GpsData::Hdop:
+      memcpy(dst, &hDop, sizeof(hDop));
+      break;
+    case GpsData::Vdop:
+      memcpy(dst, &vDop, sizeof(vDop));
       break;
     default:
@@ -119,4 +132,7 @@
     case GpsData::EastVelocity:
     case GpsData::NorthVelocity:
+    case GpsData::Pdop:
+    case GpsData::Hdop:
+    case GpsData::Vdop:
       return floatType;
       break;
@@ -150,4 +166,7 @@
   AppendLogDescription("east velocity", floatType);
   AppendLogDescription("north velocity", floatType);
+  AppendLogDescription("pdop", floatType);
+  AppendLogDescription("hdop", floatType);
+  AppendLogDescription("vdop", floatType);
 
   numberOfSatellites=0;
@@ -220,4 +239,16 @@
 }
 
+void GpsData::GetDop(float &inPdop, float &inHdop,float &inVdop) const {
+  inPdop=pDop;
+  inHdop=hDop;
+  inVdop=vDop;
+}
+
+void GpsData::SetDop(float inPdop, float inHdop,float inVdop) {
+  pDop=inPdop;
+  hDop=inHdop;
+  vDop=inVdop;
+}
+  
 IODataElement *GpsData::Element(PlotableData_t data_type) const {
   string name;
@@ -252,4 +283,13 @@
   case GpsData::NorthVelocity:
     name = "NorthVelocity";
+    break;
+  case GpsData::Pdop:
+    name = "Pdop";
+    break;
+  case GpsData::Hdop:
+    name = "Hdop";
+    break;
+  case GpsData::Vdop:
+    name = "Vdop";
     break;
   }
@@ -271,4 +311,7 @@
   Queue(&dst, &eastVelocity, sizeof(eastVelocity));
   Queue(&dst, &northVelocity, sizeof(northVelocity));
+  Queue(&dst, &pDop, sizeof(pDop));
+  Queue(&dst, &hDop, sizeof(hDop));
+  Queue(&dst, &vDop, sizeof(vDop));
 
   ReleaseMutex();
Index: trunk/lib/FlairCore/src/GpsData.h
===================================================================
--- trunk/lib/FlairCore/src/GpsData.h	(revision 179)
+++ trunk/lib/FlairCore/src/GpsData.h	(revision 180)
@@ -41,4 +41,5 @@
       size += UInt8Type.GetSize(); // FixQuality_t
       size += 5*floatType.GetSize();//e,n,u,ve,vn
+      size += 3*floatType.GetSize();//pdop,hdop,vdop
       return size;
     }
@@ -62,4 +63,7 @@
     EastVelocity /*! east velocity*/,
     NorthVelocity /*! north velocity*/,
+    Pdop /* dilution of precision*/,
+    Hdop /* horizontal dilution of precision*/,
+    Vdop /* vertical dilution of precision*/,
   } PlotableData_t;
 
@@ -214,4 +218,28 @@
   */
   void SetFixQuality(FixQuality_t fixQuality);
+  
+  /*!
+  * \brief Get dilution of precision
+  *
+  * This method is mutex protected.
+  *
+  * \param pDop dilution of precision
+  * \param hDop horizontal dilution of precision
+  * \param vDop vertical dilution of precision
+  *
+  */
+  void GetDop(float &pDop, float &hDop,float &vDop) const;
+
+  /*!
+  * \brief Set dilution of precision
+  *
+  * This method is mutex protected.
+  *
+  * \param pDop dilution of precision
+  * \param hDop horizontal dilution of precision
+  * \param vDop vertical dilution of precision
+  *
+  */
+  void SetDop(float pDop, float hDop,float vDop);
 
   Type const &GetDataType() const { return dataType; }
@@ -234,5 +262,5 @@
   uint8_t numberOfSatellites;
   FixQuality_t fixQuality;
-  float east,north,up,eastVelocity,northVelocity;
+  float east,north,up,eastVelocity,northVelocity,pDop,hDop,vDop;
 };
 
Index: trunk/lib/FlairSensorActuator/src/Mb800.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/Mb800.cpp	(revision 179)
+++ trunk/lib/FlairSensorActuator/src/Mb800.cpp	(revision 180)
@@ -92,4 +92,11 @@
     }
   }
+  if ((NMEAFlags & GSA) != 0) {
+    char to_send[] = "$PASHS,NME,GSA,A,ON,0.1\r\n";
+    written = serialport->Write(to_send, sizeof(to_send));
+    if (written< 0) {
+      Thread::Err("erreur Write (%s)\n", strerror(-written));
+    }
+  }
 
   Sync();
Index: trunk/lib/FlairSensorActuator/src/NmeaGps.cpp
===================================================================
--- trunk/lib/FlairSensorActuator/src/NmeaGps.cpp	(revision 179)
+++ trunk/lib/FlairSensorActuator/src/NmeaGps.cpp	(revision 180)
@@ -233,5 +233,9 @@
         gpsData->SetVelocity(info.speed * 1000. / 3600. * sin(Euler::ToRadian(info.direction)),
                                   info.speed * 1000. / 3600. * cos(Euler::ToRadian(info.direction)));
-      }/*
+      }
+      if ((NMEAFlags & GSA) != 0) {
+        gpsData->SetDop(info.PDOP,info.HDOP,info.VDOP);
+      }
+      /*
       if ((NMEAFlags & GST) != 0) {
         // Thread::Printf("dev_lon:%f dev_lat:%f
Index: trunk/lib/FlairSensorActuator/src/NmeaGps.h
===================================================================
--- trunk/lib/FlairSensorActuator/src/NmeaGps.h	(revision 179)
+++ trunk/lib/FlairSensorActuator/src/NmeaGps.h	(revision 180)
@@ -53,4 +53,5 @@
     VTG = 0x02, /*!< VTG */
     GST = 0x04, /*!< GST */
+    GSA = 0x08, /*!< GSA */
   };
 
