Index: /trunk/demos/Gps/uav/build_armv7a_neon/bin/DemoGps_bebop.sh
===================================================================
--- /trunk/demos/Gps/uav/build_armv7a_neon/bin/DemoGps_bebop.sh	(revision 252)
+++ /trunk/demos/Gps/uav/build_armv7a_neon/bin/DemoGps_bebop.sh	(revision 252)
@@ -0,0 +1,1 @@
+./DemoGps_nrt -a 192.168.42.24 -p 9000 -l /tmp -x DemoGps_bebop.xml -n Drone_0 -t bebop
Index: /trunk/demos/Gps/uav/build_armv7a_neon/bin/DemoGps_bebop.xml
===================================================================
--- /trunk/demos/Gps/uav/build_armv7a_neon/bin/DemoGps_bebop.xml	(revision 252)
+++ /trunk/demos/Gps/uav/build_armv7a_neon/bin/DemoGps_bebop.xml	(revision 252)
@@ -0,0 +1,268 @@
+<?xml version="1.0"?>
+<root name="FrameworkManager">
+  <TabWidget name="Main_TabWidget">
+    <Tab name="x4-multiplex">
+      <TabWidget name="UavMultiplex">
+        <Tab name="Setup">
+          <GroupBox name="x4 multiplex">
+            <ComboBox name="front left blade pitch:" value="0"/>
+          </GroupBox>
+          <GroupBox name="motor attribution">
+            <ComboBox name="front left" value="0"/>
+            <ComboBox name="front rigth" value="1"/>
+            <ComboBox name="rear left" value="3"/>
+            <ComboBox name="rear rigth" value="2"/>
+          </GroupBox>
+          <GroupBox name="bldc">
+            <Label name="flight time"/>
+            <DoubleSpinBox name="min value:" value="0"/>
+            <DoubleSpinBox name="max value:" value="1"/>
+            <DoubleSpinBox name="test value:" value="0.4"/>
+            <PushButton name="test motor 0"/>
+            <PushButton name="test motor 1"/>
+            <PushButton name="test motor 2"/>
+            <PushButton name="test motor 3"/>
+          </GroupBox>
+          <GroupBox name="battery">
+            <Label name="battery"/>
+            <DoubleSpinBox name="threshold" value="10.5"/>
+            <SpinBox name="threshold time" value="10"/>
+          </GroupBox>
+        </Tab>
+        <Tab name="Values">
+          <DataPlot1D name="front left" period="100" enabled="0"/>
+          <DataPlot1D name="front right" period="100" enabled="0"/>
+          <DataPlot1D name="rear left" period="100" enabled="0"/>
+          <DataPlot1D name="rear right" period="100" enabled="0"/>
+        </Tab>
+        <Tab name="Speeds">
+          <DataPlot1D name="front left" period="100" enabled="0"/>
+          <DataPlot1D name="front right" period="100" enabled="0"/>
+          <DataPlot1D name="rear left" period="100" enabled="0"/>
+          <DataPlot1D name="rear right" period="100" enabled="0"/>
+        </Tab>
+      </TabWidget>
+    </Tab>
+    <Tab name="bebop-us">
+      <TabWidget name="bebop-us">
+        <Tab name="Reglages">
+          <GroupBox name="bebop-us"/>
+          <GroupBox name="Passe bas">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="cutoff frequency" value="5"/>
+          </GroupBox>
+          <GroupBox name="Vz">
+            <DoubleSpinBox name="period, 0 for auto:" value="0"/>
+          </GroupBox>
+          <GroupBox name="Passe bas v">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="cutoff frequency" value="5"/>
+          </GroupBox>
+        </Tab>
+        <Tab name="Mesures">
+          <DataPlot1D name="bebop-us" period="100" enabled="1"/>
+          <DataPlot1D name="vz" period="100" enabled="0"/>
+        </Tab>
+      </TabWidget>
+    </Tab>
+    <Tab name="bebop-imu">
+      <TabWidget name="bebop-imu">
+        <Tab name="Reglages">
+          <GroupBox name="bebop-imu"/>
+          <GroupBox name="post rotation">
+            <DoubleSpinBox name="value" value="180"/>
+            <ComboBox name="axis" value="0"/>
+          </GroupBox>
+          <DoubleSpinBox name="ka[0]:" value="0.5"/>
+          <DoubleSpinBox name="ka[1]:" value="0.5"/>
+          <DoubleSpinBox name="ka[2]:" value="0"/>
+          <DoubleSpinBox name="kb[0]:" value="0.01"/>
+          <DoubleSpinBox name="kb[1]:" value="0.01"/>
+          <DoubleSpinBox name="kb[2]:" value="0.01"/>
+        </Tab>
+        <Tab name="AHRS">
+          <DataPlot1D name="roll" period="100" enabled="1"/>
+          <DataPlot1D name="pitch" period="100" enabled="0"/>
+          <DataPlot1D name="yaw" period="100" enabled="0"/>
+          <DataPlot1D name="w_x" period="100" enabled="1"/>
+          <DataPlot1D name="w_y" period="100" enabled="0"/>
+          <DataPlot1D name="w_z" period="100" enabled="0"/>
+        </Tab>
+        <Tab name="Quaternion">
+          <DataPlot1D name="q0" period="100" enabled="0"/>
+          <DataPlot1D name="q1" period="100" enabled="0"/>
+          <DataPlot1D name="q2" period="100" enabled="0"/>
+          <DataPlot1D name="q3" period="100" enabled="0"/>
+        </Tab>
+        <Tab name="IMU">
+          <DataPlot1D name="acc_x" period="100" enabled="0"/>
+          <DataPlot1D name="acc_y" period="100" enabled="0"/>
+          <DataPlot1D name="acc_z" period="100" enabled="0"/>
+          <DataPlot1D name="gyr_x" period="100" enabled="0"/>
+          <DataPlot1D name="gyr_y" period="100" enabled="0"/>
+          <DataPlot1D name="gyr_z" period="100" enabled="0"/>
+          <DataPlot1D name="mag_x" period="100" enabled="0"/>
+          <DataPlot1D name="mag_y" period="100" enabled="0"/>
+          <DataPlot1D name="mag_z" period="100" enabled="0"/>
+        </Tab>
+      </TabWidget>
+    </Tab>
+    <Tab name="Dualshock3">
+      <TabWidget name="Dualshock3">
+        <Tab name="Reglages">
+          <GroupBox name="consignes joy">
+            <DoubleSpinBox name="debattement roll" value="-15"/>
+            <DoubleSpinBox name="debattement pitch" value="-15"/>
+            <DoubleSpinBox name="debattement wz" value="90"/>
+            <DoubleSpinBox name="debattement dz" value="-0.5"/>
+            <DoubleSpinBox name="trim" value="0.01"/>
+            <Label name="trim roll"/>
+            <PushButton name="reset roll trim"/>
+            <Label name="trim pitch"/>
+            <PushButton name="reset pitch trim"/>
+          </GroupBox>
+        </Tab>
+      </TabWidget>
+    </Tab>
+    <Tab name="uav">
+      <GridLayout name="buttons">
+        <PushButton name="kill"/>
+        <PushButton name="start_log"/>
+        <PushButton name="stop_log"/>
+        <PushButton name="take_off"/>
+        <PushButton name="land"/>
+        <PushButton name="start_circle"/>
+        <PushButton name="stop_circle"/>
+        <PushButton name="position hold"/>
+      </GridLayout>
+      <GroupBox name="takeoff/landing">
+        <DoubleSpinBox name="desired takeoff altitude" value="0.5"/>
+        <DoubleSpinBox name="desired landing altitude" value="0"/>
+      </GroupBox>
+      <GroupBox name="alt cons">
+        <DoubleSpinBox name="period, 0 for auto:" value="0"/>
+        <DoubleSpinBox name="velocity max (absolute):" value="1"/>
+        <DoubleSpinBox name="acceleration (absolute):" value="1"/>
+      </GroupBox>
+    </Tab>
+    <Tab name="control laws">
+      <TabWidget name="laws">
+        <Tab name="Setup">
+          <GroupBox name="u_roll">
+            <DoubleSpinBox name="sat ref:" value="20"/>
+            <DoubleSpinBox name="kp:" value="15.00"/>
+            <DoubleSpinBox name="sat dref:" value="1000"/>
+            <DoubleSpinBox name="kd:" value="0.04"/>
+            <DoubleSpinBox name="sat u:" value="0.5"/>
+          </GroupBox>
+          <GroupBox name="u_pitch">
+            <DoubleSpinBox name="sat ref:" value="20"/>
+            <DoubleSpinBox name="kp:" value="15"/>
+            <DoubleSpinBox name="sat dref:" value="1000"/>
+            <DoubleSpinBox name="kd:" value="0.05"/>
+            <DoubleSpinBox name="sat u:" value="0.5"/>
+          </GroupBox>
+          <GroupBox name="u_yaw">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="kp:" value="0.6"/>
+            <DoubleSpinBox name="ki:" value="0"/>
+            <DoubleSpinBox name="sat i:" value="0"/>
+            <DoubleSpinBox name="kd:" value="0.15"/>
+            <DoubleSpinBox name="sat:" value="0.5"/>
+          </GroupBox>
+          <GroupBox name="u_z">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="kp:" value="0.3"/>
+            <DoubleSpinBox name="ki:" value="0.2"/>
+            <DoubleSpinBox name="sat i:" value="0.4"/>
+            <DoubleSpinBox name="kd:" value="0.15"/>
+            <DoubleSpinBox name="offset g:" value="0.37"/>
+            <DoubleSpinBox name="sat:" value="1"/>
+            <DoubleSpinBox name="offset step:" value="0.0002"/>
+          </GroupBox>
+          <GroupBox name="u_x">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="kp:" value="0"/>
+            <DoubleSpinBox name="ki:" value="0"/>
+            <DoubleSpinBox name="sat i:" value="0"/>
+            <DoubleSpinBox name="kd:" value="0"/>
+            <DoubleSpinBox name="sat:" value="0"/>
+          </GroupBox>
+          <GroupBox name="u_y">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="kp:" value="0"/>
+            <DoubleSpinBox name="ki:" value="0"/>
+            <DoubleSpinBox name="sat i:" value="0"/>
+            <DoubleSpinBox name="kd:" value="0"/>
+            <DoubleSpinBox name="sat:" value="0"/>
+          </GroupBox>
+        </Tab>
+        <Tab name="Graphes">
+          <DataPlot1D name="u_roll" period="100" enabled="0"/>
+          <DataPlot1D name="u_pitch" period="100" enabled="0"/>
+          <DataPlot1D name="u_yaw" period="100" enabled="0"/>
+          <DataPlot1D name="u_z" period="100" enabled="0"/>
+          <DataPlot1D name="u_x" period="100" enabled="0"/>
+          <DataPlot1D name="u_y" period="100" enabled="0"/>
+        </Tab>
+      </TabWidget>
+    </Tab>
+    <Tab name="vrpn">
+      <TabWidget name="vrpn">
+        <Tab name="Reglages">
+          <GroupBox name="post rotation 1">
+            <DoubleSpinBox name="value" value="0"/>
+            <ComboBox name="axis" value="0"/>
+          </GroupBox>
+          <GroupBox name="post rotation 2">
+            <DoubleSpinBox name="value" value="0"/>
+            <ComboBox name="axis" value="0"/>
+          </GroupBox>
+          <GroupBox name="Drone_0 Passe bas">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="cutoff frequency" value="1"/>
+          </GroupBox>
+          <GroupBox name="Drone_0_euler">
+            <DoubleSpinBox name="period, 0 for auto:" value="0"/>
+          </GroupBox>
+          <GroupBox name="target Passe bas">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="cutoff frequency" value="1"/>
+          </GroupBox>
+          <GroupBox name="target_euler">
+            <DoubleSpinBox name="period, 0 for auto:" value="0"/>
+          </GroupBox>
+          <GroupBox name="circle">
+            <DoubleSpinBox name="period, 0 for auto" value="0"/>
+            <DoubleSpinBox name="R" value="0"/>
+            <DoubleSpinBox name="velocity" value="0"/>
+            <DoubleSpinBox name="acceleration (absolute)" value="0"/>
+          </GroupBox>
+        </Tab>
+        <Tab name="Mesures Drone_0">
+          <DataPlot1D name="x" period="100" enabled="0"/>
+          <DataPlot1D name="y" period="100" enabled="0"/>
+          <DataPlot1D name="z" period="100" enabled="0"/>
+          <DataPlot1D name="vx" period="100" enabled="0"/>
+          <DataPlot1D name="vy" period="100" enabled="0"/>
+          <DataPlot1D name="vz" period="100" enabled="0"/>
+        </Tab>
+        <Tab name="Mesures (xy) Drone_0">
+          <DataPlot2D name="xy" period="100" enabled="0"/>
+        </Tab>
+        <Tab name="Mesures target">
+          <DataPlot1D name="x" period="100" enabled="0"/>
+          <DataPlot1D name="y" period="100" enabled="0"/>
+          <DataPlot1D name="z" period="100" enabled="0"/>
+          <DataPlot1D name="vx" period="100" enabled="0"/>
+          <DataPlot1D name="vy" period="100" enabled="0"/>
+          <DataPlot1D name="vz" period="100" enabled="0"/>
+        </Tab>
+        <Tab name="Mesures (xy) target">
+          <DataPlot2D name="xy" period="100" enabled="0"/>
+        </Tab>
+      </TabWidget>
+    </Tab>
+  </TabWidget>
+  <PushButton name="save config on target (Drone_0)" value="1"/>
+</root>
Index: /trunk/lib/FlairCore/src/AhrsData.cpp
===================================================================
--- /trunk/lib/FlairCore/src/AhrsData.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/AhrsData.cpp	(revision 252)
@@ -232,5 +232,5 @@
 }
 
-void AhrsData::CopyDatas(char *dst) const {
+void AhrsData::RawRead(char *dst) const {
   GetMutex();
   Queue(&dst, &quaternion.q0, sizeof(quaternion.q0));
Index: /trunk/lib/FlairCore/src/AhrsData.h
===================================================================
--- /trunk/lib/FlairCore/src/AhrsData.h	(revision 251)
+++ /trunk/lib/FlairCore/src/AhrsData.h	(revision 252)
@@ -161,12 +161,12 @@
 private:
   /*!
-  * \brief Copy datas
+  * \brief Raw read datas
   *
   * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
+  * See io_data::RawRead.
   *
   * \param dst destination buffer
   */
-  void CopyDatas(char *dst) const;
+  void RawRead(char *dst) const;
 
   void Queue(char **dst, const void *src, size_t size) const;
Index: /trunk/lib/FlairCore/src/GeoCoordinate.cpp
===================================================================
--- /trunk/lib/FlairCore/src/GeoCoordinate.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/GeoCoordinate.cpp	(revision 252)
@@ -69,5 +69,5 @@
 }
 
-void GeoCoordinate::CopyDatas(char *ptr) const { Warn("a ecrire"); }
+void GeoCoordinate::RawRead(char *ptr) const { Warn("a ecrire"); }
 
 } // end namespace core
Index: /trunk/lib/FlairCore/src/GeoCoordinate.h
===================================================================
--- /trunk/lib/FlairCore/src/GeoCoordinate.h	(revision 251)
+++ /trunk/lib/FlairCore/src/GeoCoordinate.h	(revision 252)
@@ -96,12 +96,12 @@
 private:
   /*!
-  * \brief Copy datas
+  * \brief Raw read datas
   *
   * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
+  * See io_data::RawRead.
   *
   * \param dst destination buffer
   */
-  void CopyDatas(char *ptr) const;
+  void RawRead(char *ptr) const;
 
   double latitude;
Index: /trunk/lib/FlairCore/src/GpsData.cpp
===================================================================
--- /trunk/lib/FlairCore/src/GpsData.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/GpsData.cpp	(revision 252)
@@ -298,5 +298,5 @@
 }
 
-void GpsData::CopyDatas(char *dst) const {
+void GpsData::RawRead(char *dst) const {
   GetMutex();
 
Index: /trunk/lib/FlairCore/src/GpsData.h
===================================================================
--- /trunk/lib/FlairCore/src/GpsData.h	(revision 251)
+++ /trunk/lib/FlairCore/src/GpsData.h	(revision 252)
@@ -244,16 +244,16 @@
 
   Type const &GetDataType() const { return dataType; }
+  
+  /*!
+  * \brief Raw read datas
+  *
+  * Reimplemented from io_data. \n
+  * See io_data::RawRead.
+  *
+  * \param dst destination buffer
+  */
+  void RawRead(char *dst) const;
 
 private:
-  /*!
-  * \brief Copy datas
-  *
-  * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
-  *
-  * \param dst destination buffer
-  */
-  void CopyDatas(char *dst) const;
-
   void Queue(char **dst, const void *src, size_t size) const;
   Type dataType;
Index: /trunk/lib/FlairCore/src/IODevice_impl.cpp
===================================================================
--- /trunk/lib/FlairCore/src/IODevice_impl.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/IODevice_impl.cpp	(revision 252)
@@ -204,5 +204,5 @@
   for (size_t i = 0; i < datasToLog.size(); i++) {
     // printf("copy %s\n",datasToLog.at(i)->ObjectName().c_str());
-    datasToLog.at(i)->CopyDatas(*ptr);
+    datasToLog.at(i)->RawRead(*ptr);
     (*ptr) += datasToLog.at(i)->GetDataType().GetSize();
   }
Index: /trunk/lib/FlairCore/src/ImuData.cpp
===================================================================
--- /trunk/lib/FlairCore/src/ImuData.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/ImuData.cpp	(revision 252)
@@ -226,5 +226,5 @@
 }
 
-void ImuData::CopyDatas(char *dst) const {
+void ImuData::RawRead(char *dst) const {
   GetMutex();
 
Index: /trunk/lib/FlairCore/src/ImuData.h
===================================================================
--- /trunk/lib/FlairCore/src/ImuData.h	(revision 251)
+++ /trunk/lib/FlairCore/src/ImuData.h	(revision 252)
@@ -186,12 +186,12 @@
 private:
   /*!
-  * \brief Copy datas
+  * \brief Raw read datas
   *
   * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
+  * See io_data::RawRead.
   *
   * \param dst destination buffer
   */
-  void CopyDatas(char *dst) const;
+  void RawRead(char *dst) const;
 
   /*!
Index: /trunk/lib/FlairCore/src/Matrix.cpp
===================================================================
--- /trunk/lib/FlairCore/src/Matrix.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/Matrix.cpp	(revision 252)
@@ -188,5 +188,5 @@
 }
 
-void Matrix::CopyDatas(char *dst) const {
+void Matrix::RawRead(char *dst) const {
   GetMutex();
   memcpy(dst, pimpl_->datas, dataType.GetSize());
@@ -194,4 +194,10 @@
 }
 
+void Matrix::RawWrite(char *src) {
+  GetMutex();
+  memcpy(pimpl_->datas, src,dataType.GetSize());
+  ReleaseMutex();
+}
+
 uint32_t Matrix::Rows(void) const { return pimpl_->descriptor->Rows(); }
 
Index: /trunk/lib/FlairCore/src/Matrix.h
===================================================================
--- /trunk/lib/FlairCore/src/Matrix.h	(revision 251)
+++ /trunk/lib/FlairCore/src/Matrix.h	(revision 252)
@@ -194,16 +194,25 @@
 
   Type const &GetDataType() const { return dataType; };
-void CopyDatas(char *dst) const;
+  
+  /*!
+  * \brief Raw read datas
+  *
+  * Reimplemented from io_data. \n
+  * See io_data::RawRead.
+  *
+  * \param dst destination buffer
+  */
+  void RawRead(char *dst) const;
+
+  /*!
+  * \brief Raw write datas
+  *
+  * Copy the source to the internal datas. Source must be of the corresponding size.
+  *
+  * \param src source buffer
+  */
+  void RawWrite(char *src);
+  
 private:
-  /*!
-  * \brief Copy datas
-  *
-  * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
-  *
-  * \param dst destination buffer
-  */
-  //void CopyDatas(char *dst) const;
-
   class Matrix_impl *pimpl_;
   Type dataType;
Index: /trunk/lib/FlairCore/src/RangeFinderPlot.cpp
===================================================================
--- /trunk/lib/FlairCore/src/RangeFinderPlot.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/RangeFinderPlot.cpp	(revision 252)
@@ -58,5 +58,5 @@
 
 void RangeFinderPlot::CopyDatas(char *buf) const {
-  datas->CopyDatas(buf);
+  datas->RawRead(buf);
 }
 
Index: /trunk/lib/FlairCore/src/Thread.cpp
===================================================================
--- /trunk/lib/FlairCore/src/Thread.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/Thread.cpp	(revision 252)
@@ -107,5 +107,5 @@
     if(nanosleep(&req,&rem)!=0) Err("error in nanosleep\n");//todo, handle EINTR
   } else {
-    Err("error resume time is passed by %lldns\n", ( current-time));
+    Err("error resume time (%lldns) is passed by %lldns\n",time, ( current-time));
   }
 #endif
Index: /trunk/lib/FlairCore/src/UsSensorPlot.cpp
===================================================================
--- /trunk/lib/FlairCore/src/UsSensorPlot.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/UsSensorPlot.cpp	(revision 252)
@@ -63,6 +63,6 @@
 
 void UsSensorPlot::CopyDatas(char *buf) const {
-  datas->CopyDatas(buf);
-  peakInfos->CopyDatas(buf+datas->GetDataType().GetSize());
+  datas->RawRead(buf);
+  peakInfos->RawRead(buf+datas->GetDataType().GetSize());
 }
 
Index: /trunk/lib/FlairCore/src/Vector3Ddata.h
===================================================================
--- /trunk/lib/FlairCore/src/Vector3Ddata.h	(revision 251)
+++ /trunk/lib/FlairCore/src/Vector3Ddata.h	(revision 252)
@@ -78,5 +78,5 @@
   *
   * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
+  * See io_data::RawRead.
   *
   * \param dst destination buffer
Index: /trunk/lib/FlairCore/src/Watchdog.cpp
===================================================================
--- /trunk/lib/FlairCore/src/Watchdog.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/Watchdog.cpp	(revision 252)
@@ -43,7 +43,7 @@
     Time current = GetTime();
     Time date = current + timer;
-    // Printf("watchdog goes to sleep at %llu, scheduled to wake up at
-    // %llu\n",current,date);
+    //Printf("watchdog goes to sleep at %llu, scheduled to wake up at %llu\n",current,date);
     if (!SuspendUntil(date)) {
+      //Printf("watchdog expired at %llu!!!!!!!!!!!!!!!!\n",GetTime());
       expired();
     }
Index: /trunk/lib/FlairCore/src/cvimage.cpp
===================================================================
--- /trunk/lib/FlairCore/src/cvimage.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/cvimage.cpp	(revision 252)
@@ -76,5 +76,5 @@
 }
 
-void cvimage::CopyDatas(char *dst) const { Warn("non implementé\n"); }
+void cvimage::RawRead(char *dst) const { Warn("non implementé\n"); }
 
 } // end namespace core
Index: /trunk/lib/FlairCore/src/cvimage.h
===================================================================
--- /trunk/lib/FlairCore/src/cvimage.h	(revision 251)
+++ /trunk/lib/FlairCore/src/cvimage.h	(revision 252)
@@ -108,12 +108,12 @@
 private:
   /*!
-  * \brief Copy datas
+  * \brief Raw read datas
   *
   * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
+  * See io_data::RawRead.
   *
   * \param dst destination buffer
   */
-  void CopyDatas(char *dst) const;
+  void RawRead(char *dst) const;
 
   bool allocate_data;
Index: /trunk/lib/FlairCore/src/cvmatrix.h
===================================================================
--- /trunk/lib/FlairCore/src/cvmatrix.h	(revision 251)
+++ /trunk/lib/FlairCore/src/cvmatrix.h	(revision 252)
@@ -209,5 +209,5 @@
   *
   * Reimplemented from io_data. \n
-  * See io_data::CopyDatas.
+  * See io_data::RawRead.
   *
   * \param dst destination buffer
Index: /trunk/lib/FlairCore/src/io_data.h
===================================================================
--- /trunk/lib/FlairCore/src/io_data.h	(revision 251)
+++ /trunk/lib/FlairCore/src/io_data.h	(revision 252)
@@ -176,4 +176,26 @@
 
   virtual DataType const &GetDataType() const = 0;
+  
+  /*!
+  * \brief Raw write datas
+  *
+  * Copy the source to the internal datas. Source must be of the corresponding size.
+  *
+  * \param src source buffer
+  */
+  virtual void RawWrite(char *src)  {};//todo put pure virtual
+  
+  /*!
+  * \brief Raw read datas
+  *
+  * This method is automatically called by IODevice::ProcessUpdate to log
+  * io_data datas. \n
+  * This method must be reimplemented, in order to copy the datas to the logs.
+  * Copy the internal datas to destination. Destination must be of the corresponding size.
+  *
+  * \param dst destination buffer
+  */
+  virtual void RawRead(char *dst) const = 0;
+
 
 protected:
@@ -208,16 +230,4 @@
 
 private:
-  /*!
-  * \brief Copy datas
-  *
-  * This method is automatically called by IODevice::ProcessUpdate to log
-  *io_data datas. \n
-  * This method must be reimplemented, in order to copy the datas to the logs.
-  * Copied datas must be of size io_data::Size.
-  *
-  * \param dst destination buffer
-  */
-  virtual void CopyDatas(char *dst) const = 0;
-
   io_data_impl *pimpl_;
 };
Index: /trunk/lib/FlairCore/src/ui_com.cpp
===================================================================
--- /trunk/lib/FlairCore/src/ui_com.cpp	(revision 251)
+++ /trunk/lib/FlairCore/src/ui_com.cpp	(revision 252)
@@ -153,5 +153,5 @@
 }
 
-void ui_com::Send(char *buf, ssize_t size) {
+void ui_com::Send(char *buf, ssize_t size,int ttl) {
   if (connection_lost == true)
     return;
@@ -188,5 +188,5 @@
     if (compressBuffer(tosend, size, &out, &out_size, 9) == Z_OK) {
       size = out_size;
-      nb_write = UDT::sendmsg(socket_fd, out, size, -1, true);
+      nb_write = UDT::sendmsg(socket_fd, out, size,ttl, true);
       free(out);
     } else {
@@ -197,9 +197,9 @@
 
   if (!sendItCompressed) {
-    nb_write = UDT::sendmsg(socket_fd, tosend, size, -1, true);
+    nb_write = UDT::sendmsg(socket_fd, tosend, size, ttl, true);
   }
 
 #else // COMPRESS_FRAMES
-  nb_write = UDT::sendmsg(socket_fd, tosend, size, -1, true);
+  nb_write = UDT::sendmsg(socket_fd, tosend, size, ttl, true);
 #endif // COMPRESS_FRAMES
    //Printf("write %i %i\n",nb_write,size);
@@ -295,8 +295,8 @@
       if (offset != 3) {
         memcpy(&send_buffer[1], &resume_period, sizeof(uint16_t));
-        // printf("send %i %i %i %x %x\n",resume_period,offset,sizeof(uint16_t),send_buffer,&send_buffer[1]);
+        //printf("send %i %i %i %x %x\n",resume_period,offset,sizeof(uint16_t),send_buffer,&send_buffer[1]);
         // for(int i=0;i<offset;i++) printf("%x ",send_buffer[i]);
         // printf("\n");
-        Send(send_buffer, offset);
+        Send(send_buffer, offset,resume_period);
       }
 
Index: /trunk/lib/FlairCore/src/unexported/ui_com.h
===================================================================
--- /trunk/lib/FlairCore/src/unexported/ui_com.h	(revision 251)
+++ /trunk/lib/FlairCore/src/unexported/ui_com.h	(revision 252)
@@ -39,5 +39,5 @@
   ui_com(const flair::core::Object *parent, UDTSOCKET sock);
   ~ui_com();
-  void Send(char *buf, ssize_t size);
+  void Send(char *buf, ssize_t size,int ttl = -1);//ttl in ms, -1 for infinite; not used in RT (todo!)
   ssize_t Receive(char *buf, ssize_t buf_size);
   void AddSendData(const flair::gui::SendData *obj);
Index: /trunk/lib/FlairVisionFilter/src/OpticalFlowData.cpp
===================================================================
--- /trunk/lib/FlairVisionFilter/src/OpticalFlowData.cpp	(revision 251)
+++ /trunk/lib/FlairVisionFilter/src/OpticalFlowData.cpp	(revision 252)
@@ -103,5 +103,5 @@
 }
 
-void OpticalFlowData::CopyDatas(char* dst) const
+void OpticalFlowData::RawRead(char* dst) const
 {
     Warn("non implementé\n");
Index: /trunk/lib/FlairVisionFilter/src/OpticalFlowData.h
===================================================================
--- /trunk/lib/FlairVisionFilter/src/OpticalFlowData.h	(revision 251)
+++ /trunk/lib/FlairVisionFilter/src/OpticalFlowData.h	(revision 252)
@@ -129,4 +129,14 @@
 
         OpticalFlowData::Type const &GetDataType() const {return dataType;}
+        
+        /*!
+        * \brief Raw read datas
+        *
+        * Reimplemented from io_data. \n
+        * See io_data::RawRead.
+        *
+        * \param dst destination buffer
+        */
+        void RawRead(char *dst) const;
 
     private:
@@ -137,5 +147,4 @@
         char *found_features;
         uint32_t *features_error;
-        void CopyDatas(char* dst) const;
         Type dataType;
     };
Index: /trunk/tools/FlairGCS/src/UdtSocket.cpp
===================================================================
--- /trunk/tools/FlairGCS/src/UdtSocket.cpp	(revision 251)
+++ /trunk/tools/FlairGCS/src/UdtSocket.cpp	(revision 252)
@@ -45,5 +45,5 @@
   connect(heartbeat_timer, SIGNAL(timeout()), this, SLOT(heartbeat()));
   heartbeat_timer->start(HEARTBEAT_TIMER);
-  
+  heartbeat();//send directly the first one
   udtstats_timer = new QTimer(this);
   connect(udtstats_timer, SIGNAL(timeout()), this, SLOT(getUTDStats()));
@@ -163,4 +163,5 @@
       int size;
       do {
+        QCoreApplication::processEvents();//let watchdog timer send heartbeat
         size=UDT::recvmsg(socket, buf, buf_size);
       
