Index: trunk/lib/FlairCore/src/FrameworkManager_impl.cpp
===================================================================
--- trunk/lib/FlairCore/src/FrameworkManager_impl.cpp	(revision 45)
+++ trunk/lib/FlairCore/src/FrameworkManager_impl.cpp	(revision 51)
@@ -618,5 +618,5 @@
 void FrameworkManager_impl::AddDeviceToLog(IODevice *device) {
   if (logger_defined == false) {
-    Err("SetupLogger() was not called, not starting log\n");
+    Warn("SetupLogger() was not called, not adding to log\n");
     return;
   }
Index: trunk/lib/FlairCore/src/GpsData.cpp
===================================================================
--- trunk/lib/FlairCore/src/GpsData.cpp	(revision 45)
+++ trunk/lib/FlairCore/src/GpsData.cpp	(revision 51)
@@ -18,4 +18,5 @@
 #include "GpsData.h"
 #include "Euler.h"
+#include "IODataElement.h"
 #include <math.h>
 #include <string.h>
@@ -37,5 +38,22 @@
     plotableData = inPlotableData;
 
-    size = 0;
+    switch (plotableData) {
+    case GpsData::Latitude:
+    case GpsData::Longitude:
+      size = 8;
+      break;
+    case GpsData::Altitude:
+    case GpsData::East:
+    case GpsData::North:
+    case GpsData::Up:
+    case GpsData::EastVelocity:
+    case GpsData::NorthVelocity:
+      size=4;
+      break;
+    case GpsData::NumberOfSatellites:
+    case GpsData::FixQuality:
+      size=1;
+      break;
+    }
   }
 
@@ -43,14 +61,76 @@
 
   void CopyData(char *dst) const {
-
-
-  }
-
-  FloatType const &GetDataType(void) const { return dataType; }
+    double latitude,longitude;
+    float altitude,east,north,up,eastVelocity,northVelocity;
+
+    gpsdata->GetLla(latitude,longitude,altitude);
+    uint8_t numberOfSatellites=gpsdata->GetNumberOfSatellites();
+    GpsData::FixQuality_t fixQuality=gpsdata->GetFixQuality();
+    gpsdata->GetEnu(east,north,up);
+    gpsdata->GetVelocity(eastVelocity,northVelocity);
+
+    switch (plotableData) {
+    case GpsData::Latitude:
+      memcpy(dst, &latitude, sizeof(latitude));
+      break;
+    case GpsData::Longitude:
+      memcpy(dst, &longitude, sizeof(longitude));
+      break;
+    case GpsData::Altitude:
+      memcpy(dst, &altitude, sizeof(altitude));
+      break;
+    case GpsData::NumberOfSatellites:
+      memcpy(dst, &numberOfSatellites, sizeof(numberOfSatellites));
+      break;
+    case GpsData::FixQuality:
+      memcpy(dst, &fixQuality, sizeof(fixQuality));
+      break;
+    case GpsData::East:
+      memcpy(dst, &east, sizeof(east));
+      break;
+    case GpsData::North:
+      memcpy(dst, &north, sizeof(north));
+      break;
+    case GpsData::Up:
+      memcpy(dst, &up, sizeof(up));
+      break;
+     case GpsData::EastVelocity:
+      memcpy(dst, &eastVelocity, sizeof(eastVelocity));
+      break;
+    case GpsData::NorthVelocity:
+      memcpy(dst, &northVelocity, sizeof(northVelocity));
+      break;
+    default:
+      gpsdata->Err("data type unavailable.\n");
+      break;
+    }
+  }
+
+  DataType const &GetDataType(void) const {
+    switch (plotableData) {
+    case GpsData::Latitude:
+    case GpsData::Longitude:
+      return doubleType;
+      break;
+    case GpsData::Altitude:
+    case GpsData::East:
+    case GpsData::North:
+    case GpsData::Up:
+    case GpsData::EastVelocity:
+    case GpsData::NorthVelocity:
+      return floatType;
+      break;
+    case GpsData::NumberOfSatellites:
+    case GpsData::FixQuality:
+      return UInt8Type;
+      break;
+    default:
+      return dummyType;
+    }
+  }
 
 private:
   const GpsData *gpsdata;
   GpsData::PlotableData_t plotableData;
-  FloatType dataType;
 };
 
@@ -60,17 +140,120 @@
     Warn("n>1 not supported\n");
 
-  AppendLogDescription("latitude", floatType);
-  AppendLogDescription("longitude", floatType);
+  AppendLogDescription("latitude", doubleType);
+  AppendLogDescription("longitude", doubleType);
   AppendLogDescription("altitude", floatType);
-
-
+  AppendLogDescription("nb_sat",UInt8Type);
+  AppendLogDescription("fix quality",UInt8Type);
+  AppendLogDescription("east", floatType);
+  AppendLogDescription("north", floatType);
+  AppendLogDescription("up", floatType);
+  AppendLogDescription("east velocity", floatType);
+  AppendLogDescription("north velocity", floatType);
+
+  numberOfSatellites=0;
+  fixQuality=FixQuality_t::Invalid;
 }
 
 GpsData::~GpsData() {}
 
+void GpsData::GetLla(double &outLatitude, double &outLongitude, float &outAltitude) const {
+  GetMutex();
+  outLatitude=latitude;
+  outLongitude=longitude;
+  outAltitude=altitude;
+  ReleaseMutex();
+}
+
+void GpsData::SetLla(double inLatitude,double inLongitude,float inAltitude) {
+  GetMutex();
+  latitude=inLatitude;
+  longitude=inLongitude;
+  altitude=inAltitude;
+  ReleaseMutex();
+}
+
+void GpsData::GetEnu(float &outEast, float &outNorth,float &outUp) const {
+  GetMutex();
+  outEast=east;
+  outNorth=north;
+  outUp=up;
+  ReleaseMutex();
+}
+
+void GpsData::SetEnu(float inEast, float inNorth,float inUp) {
+  GetMutex();
+  east=inEast;
+  north=inNorth;
+  up=inUp;
+  ReleaseMutex();
+}
+
+
+void GpsData::GetVelocity(float &outEastVelocity, float &outNorthVelocity) const {
+  GetMutex();
+  outEastVelocity=eastVelocity;
+  outNorthVelocity=northVelocity;
+  ReleaseMutex();
+}
+
+void GpsData::SetVelocity(float inEastVelocity, float inNorthVelocity) {
+  GetMutex();
+  eastVelocity=inEastVelocity;
+  northVelocity=inNorthVelocity;
+  ReleaseMutex();
+}
+
+uint8_t GpsData::GetNumberOfSatellites(void) const {
+  return numberOfSatellites;
+}
+
+void GpsData::SetNumberOfSatellites(uint8_t inNumberOfSatellites) {
+  numberOfSatellites=inNumberOfSatellites;
+}
+
+GpsData::FixQuality_t GpsData::GetFixQuality(void) const {
+  return fixQuality;
+}
+
+void GpsData::SetFixQuality(FixQuality_t inFixQuality) {
+  fixQuality=inFixQuality;
+}
 
 IODataElement *GpsData::Element(PlotableData_t data_type) const {
-
-  //return new GpsDataElement(this, name, data_type);
+  string name;
+  switch (data_type) {
+  case GpsData::Latitude:
+    name = "Latitude";
+    break;
+  case GpsData::Longitude:
+    name = "Longitude";
+    break;
+  case GpsData::Altitude:
+    name = "Altitude";
+    break;
+  case GpsData::NumberOfSatellites:
+    name = "NumberOfSatellites";
+    break;
+  case GpsData::FixQuality:
+    name = "FixQuality";
+    break;
+  case GpsData::East:
+    name = "East";
+    break;
+  case GpsData::North:
+    name = "North";
+    break;
+  case GpsData::Up:
+    name = "Up";
+    break;
+  case GpsData::EastVelocity:
+    name = "EastVelocity";
+    break;
+  case GpsData::NorthVelocity:
+    name = "NorthVelocity";
+    break;
+  }
+
+  return new GpsDataElement(this, name, data_type);
 }
 
@@ -78,5 +261,14 @@
   GetMutex();
 
-  //Queue(&dst, &rawAcc.x, sizeof(rawAcc.x));
+  Queue(&dst, &latitude, sizeof(latitude));
+  Queue(&dst, &longitude, sizeof(longitude));
+  Queue(&dst, &altitude, sizeof(altitude));
+  Queue(&dst, &numberOfSatellites, sizeof(numberOfSatellites));
+  Queue(&dst, &fixQuality, sizeof(FixQuality_t));
+  Queue(&dst, &east, sizeof(east));
+  Queue(&dst, &north, sizeof(north));
+  Queue(&dst, &up, sizeof(up));
+  Queue(&dst, &eastVelocity, sizeof(eastVelocity));
+  Queue(&dst, &northVelocity, sizeof(northVelocity));
 
   ReleaseMutex();
Index: trunk/lib/FlairCore/src/GpsData.h
===================================================================
--- trunk/lib/FlairCore/src/GpsData.h	(revision 45)
+++ trunk/lib/FlairCore/src/GpsData.h	(revision 51)
@@ -14,9 +14,10 @@
 
 #include <io_data.h>
-#include <IODataElement.h>
-#include <Vector3D.h>
 
 namespace flair {
 namespace core {
+
+  class IODataElement;
+  class Vector3D;
 
 /*! \class GpsData
@@ -35,5 +36,11 @@
     std::string GetDescription() const { return "gps data"; }
     size_t GetSize() const {
-      return 0;
+      size_t size = 0;
+      size += 2*doubleType.GetSize(); // Latitude, Longitude
+      size += floatType.GetSize(); // Altitude
+      size += UInt8Type.GetSize(); // NumberOfSatellites
+      size += UInt8Type.GetSize(); // FixQuality_t
+      size += 5*floatType.GetSize();//e,n,u,ve,vn
+      return size;
     }
 
@@ -46,6 +53,31 @@
   */
   typedef enum {
-
+    Latitude /*! latitude in degrees */,
+    Longitude /*! longitude in degrees */,
+    Altitude /*! altitude */,
+    NumberOfSatellites /*! number of satellites */,
+    FixQuality /*! fix quality */,
+    East /*! east */,
+    North /*! north */,
+    Up /*! up */,
+    EastVelocity /*! east velocity*/,
+    NorthVelocity /*! north velocity*/,
   } PlotableData_t;
+
+  /*!
+  \enum FixQuality_t
+  \brief Fix qualty indicators
+  */
+  enum class FixQuality_t : uint8_t {
+    Invalid = 0,    /*!< invalid */
+    Gps = 1,        /*!< Gps */
+    DGps = 2,       /*!< Differential Gps */
+    Pps = 3,        /*!< Pps */
+    Rtk = 4,        /*!< RTK */
+    RtkFloat = 5,   /*!< RTK float */
+    Estimated = 6,  /*!< Estimated */
+    Manual = 7,     /*!< Manual */
+    Simulation = 8, /*!< Simulation */
+  };
 
   /*!
@@ -77,4 +109,110 @@
   IODataElement *Element(PlotableData_t data_type) const;
 
+  /*!
+  * \brief Get latitude, longitude and altitude
+  *
+  * This method is mutex protected.
+  *
+  * \param latitude latitude
+  * \param longitude longitude
+  * \param altitude altitude
+  *
+  */
+  void GetLla(double &latitude, double &longitude,
+                          float &altitude) const;
+
+  /*!
+  * \brief Set latitude, longitude and altitude
+  *
+  * This method is mutex protected.
+  *
+  * \param latitude latitude
+  * \param longitude longitude
+  * \param altitude altitude
+  *
+  */
+  void SetLla(double latitude,double longitude,
+                          float altitude);
+
+
+  /*!
+  * \brief Get east, north and up
+  *
+  * This method is mutex protected.
+  *
+  * \param east east
+  * \param north north
+  * \param up up
+  *
+  */
+  void GetEnu(float &east, float &north,
+                          float &up) const;
+
+  /*!
+  * \brief Set east, north and up
+  *
+  * This method is mutex protected.
+  *
+  * \param east east
+  * \param north north
+  * \param up up
+  *
+  */
+  void SetEnu(float east, float north,
+                          float up);
+
+  /*!
+  * \brief Get east and north velocities
+  *
+  * This method is mutex protected.
+  *
+  * \param eastVelocity east velocity
+  * \param northVelocity north velocity
+  *
+  */
+  void GetVelocity(float &eastVelocity, float &northVelocity) const;
+
+  /*!
+  * \brief Set east and north velocities
+  *
+  * This method is mutex protected.
+  *
+  * \param eastVelocity east velocity
+  * \param northVelocity north velocity
+  *
+  */
+  void SetVelocity(float eastVelocity, float northVelocity);
+
+  /*!
+  * \brief Get number of satellites
+  *
+  * \return number of satellites
+  *
+  */
+  uint8_t GetNumberOfSatellites(void) const;
+
+  /*!
+  * \brief Set number of satellites
+  *
+  * \param numberOfSatellites number of satellites
+  *
+  */
+  void SetNumberOfSatellites(uint8_t numberOfSatellites);
+
+  /*!
+  * \brief Get fix quality
+  *
+  * \return fix quality
+  *
+  */
+  FixQuality_t GetFixQuality(void) const;
+
+  /*!
+  * \brief Set fix quality
+  *
+  * \param fixQuality fix quality
+  *
+  */
+  void SetFixQuality(FixQuality_t fixQuality);
 
   Type const &GetDataType() const { return dataType; }
@@ -91,8 +229,11 @@
   void CopyDatas(char *dst) const;
 
-
-
   void Queue(char **dst, const void *src, size_t size) const;
   Type dataType;
+  double latitude,longitude;
+  float altitude;
+  uint8_t numberOfSatellites;
+  FixQuality_t fixQuality;
+  float east,north,up,eastVelocity,northVelocity;
 };
 
Index: trunk/lib/FlairCore/src/io_data.cpp
===================================================================
--- trunk/lib/FlairCore/src/io_data.cpp	(revision 45)
+++ trunk/lib/FlairCore/src/io_data.cpp	(revision 51)
@@ -26,6 +26,9 @@
 DummyType dummyType;
 FloatType floatType;
+DoubleType doubleType;
 SignedIntegerType Int8Type(8);
 SignedIntegerType Int16Type(16);
+UnsignedIntegerType UInt8Type(8);
+UnsignedIntegerType UInt16Type(16);
 
 io_data::io_data(const Object *parent, string name, int n)
Index: trunk/lib/FlairCore/src/io_data.h
===================================================================
--- trunk/lib/FlairCore/src/io_data.h	(revision 45)
+++ trunk/lib/FlairCore/src/io_data.h	(revision 51)
@@ -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
