Index: trunk/FACT++/src/drivectrl.cc
===================================================================
--- trunk/FACT++/src/drivectrl.cc	(revision 13910)
+++ trunk/FACT++/src/drivectrl.cc	(revision 13911)
@@ -22,4 +22,6 @@
 #endif
 
+#include "HeadersDrive.h"
+
 namespace ba = boost::asio;
 namespace bs = boost::system;
@@ -27,68 +29,5 @@
 
 using namespace std;
-
-// ------------------------------------------------------------------------
-
-namespace Drive
-{
-    struct DimPointing
-    {
-    } __attribute__((__packed__));
-
-    struct DimTracking
-    {
-    } __attribute__((__packed__));
-
-    struct DimStarguider
-    {
-        double fMissZd;
-        double fMissAz;
-
-        double fNominalZd;
-        double fNominalAz;
-
-        double fCenterX;
-        double fCenterY;
-
-        double fBrightness;
-
-        uint16_t fNumCorrelated;
-        uint16_t fNumLeds;
-        uint16_t fNumRings;
-        uint16_t fNumStars;
-
-    } __attribute__((__packed__));
-
-    struct DimTPoint
-    {
-        double fRa;
-        double fDec;
-
-        double fNominalZd;
-        double fNominalAz;
-
-        double fPointingZd;
-        double fPointingAz;
-
-        double fFeedbackZd;
-        double fFeedbackAz;
-
-        uint16_t fNumLeds;
-        uint16_t fNumRings;
- 
-        double fCenterX;
-        double fCenterY;
-        double fCenterMag;
-
-        double fStarX;
-        double fStarY;
-        double fStarMag;
-
-        double fRealMag;
-
-    } __attribute__((__packed__));
-};
-
-
+using namespace Drive;
 
 // ------------------------------------------------------------------------
@@ -135,9 +74,9 @@
     }
 
-    virtual void UpdateStarguider(const Time &, const Drive::DimStarguider &)
-    {
-    }
-
-    virtual void UpdateTPoint(const Time &, const Drive::DimTPoint &, const string &)
+    virtual void UpdateStarguider(const Time &, const DimStarguider &)
+    {
+    }
+
+    virtual void UpdateTPoint(const Time &, const DimTPoint &, const string &)
     {
     }
@@ -252,5 +191,5 @@
                 return;
 
-            Drive::DimStarguider data;
+            DimStarguider data;
 
             data.fMissZd = misszd;
@@ -308,5 +247,5 @@
                 return;
 
-            Drive::DimTPoint tpoint;
+            DimTPoint tpoint;
 
             tpoint.fRa         = ra;
@@ -594,5 +533,5 @@
 };
 
-const uint16_t ConnectionDrive::kMaxAddr = 0xfff;
+const uint16_t ConnectionkMaxAddr = 0xfff;
 
 // ------------------------------------------------------------------------
@@ -627,5 +566,5 @@
     }
 
-    void UpdateTPoint(const Time &t, const Drive::DimTPoint &data,
+    void UpdateTPoint(const Time &t, const DimTPoint &data,
                       const string &name)
     {
@@ -708,28 +647,6 @@
 class StateMachineDrive : public T, public ba::io_service, public ba::io_service::work
 {
-    int Wrap(boost::function<void()> f)
-    {
-        f();
-        return T::GetCurrentState();
-    }
-
-    boost::function<int(const EventImp &)> Wrapper(boost::function<void()> func)
-    {
-        return bind(&StateMachineDrive::Wrap, this, func);
-    }
-
 private:
     S fDrive;
-
-    enum states_t
-    {
-        kStateDisconnected = 1,
-        kStateConnected,
-        kStateNotReady,
-        kStateReady,
-        kStateArmed,
-        kStateMoving,
-        kStateTracking,
-    };
 
     string fDatabase;
@@ -1014,37 +931,30 @@
         fDrive(*this, *this)
     {
-        // ba::io_service::work is a kind of keep_alive for the loop.
-        // It prevents the io_service to go to stopped state, which
-        // would prevent any consecutive calls to run()
-        // or poll() to do nothing. reset() could also revoke to the
-        // previous state but this might introduce some overhead of
-        // deletion and creation of threads and more.
-
         // State names
-        AddStateName(kStateDisconnected, "Disconnected",
+        T::AddStateName(State::kDisconnected, "Disconnected",
                      "No connection to cosy");
 
-        AddStateName(kStateConnected, "Connected",
+        T::AddStateName(State::kConnected, "Connected",
                      "Cosy connected, drive stopped");
 
-        AddStateName(kStateNotReady, "NotReady",
+        T::AddStateName(State::kNotReady, "NotReady",
                      "Drive system not ready for movement");
 
-        AddStateName(kStateReady, "Ready",
+        T::AddStateName(State::kReady, "Ready",
                      "Drive system ready for movement");
 
-        AddStateName(kStateArmed, "Armed",
+        T::AddStateName(State::kArmed, "Armed",
                      "Cosy armed, drive stopped");
 
-        AddStateName(kStateMoving, "Moving",
+        T::AddStateName(State::kMoving, "Moving",
                      "Telescope moving");
 
-        AddStateName(kStateTracking, "Tracking",
+        T::AddStateName(State::kTracking, "Tracking",
                      "Telescope tracking");
 
-        // kStateIdle
-        // kStateArmed
-        // kStateMoving
-        // kStateTracking
+        // State::kIdle
+        // State::kArmed
+        // State::kMoving
+        // State::kTracking
 
         // Init
@@ -1068,5 +978,5 @@
 
         // Drive Commands
-        T::AddEvent("MOVE_TO", "D:2", kStateArmed)  // ->ZDAZ
+        T::AddEvent("MOVE_TO", "D:2", State::kArmed)  // ->ZDAZ
             (bind(&StateMachineDrive::SendCoordinates, this, placeholders::_1, kPoint))
             ("Move the telescope to the given local coordinates"
@@ -1074,5 +984,5 @@
              "|Az[deg]:Azimuth");
 
-        T::AddEvent("TRACK", "D:2", kStateArmed)   // ->RADEC/GRB
+        T::AddEvent("TRACK", "D:2", State::kArmed)   // ->RADEC/GRB
             (bind(&StateMachineDrive::SendCoordinates, this, placeholders::_1, kTrackSlow))
             ("Move the telescope to the given sky coordinates and start tracking them"
@@ -1080,5 +990,5 @@
              "|Dec[deg]:Declination");
 
-        T::AddEvent("WOBBLE", "D:4", kStateArmed)   // ->RADEC/GRB
+        T::AddEvent("WOBBLE", "D:4", State::kArmed)   // ->RADEC/GRB
             (bind(&StateMachineDrive::Wobble, this, placeholders::_1))
             ("Move the telescope to the given wobble position around the given sky coordinates and start tracking them"
@@ -1088,5 +998,5 @@
              "|Angle[deg]:Wobble angle");
 
-        T::AddEvent("TRACK_SOURCE", "D:2;C", kStateArmed)   // ->RADEC/GRB
+        T::AddEvent("TRACK_SOURCE", "D:2;C", State::kArmed)   // ->RADEC/GRB
             (bind(&StateMachineDrive::Track, this, placeholders::_1))
             ("Move the telescope to the given wobble position around the given source and start tracking"
@@ -1095,17 +1005,17 @@
              "|Name[string]:Source name");
 
-        T::AddEvent("MOON", kStateArmed)
+        T::AddEvent("MOON", State::kArmed)
             (bind(&StateMachineDrive::SendCommand, this, "MOON 0 0", true))
             ("Start tracking the moon");
-        T::AddEvent("VENUS", kStateArmed)
+        T::AddEvent("VENUS", State::kArmed)
             (bind(&StateMachineDrive::SendCommand, this, "CELEST 2 0 0", true))
             ("Start tracking Venus");
-        T::AddEvent("MARS", kStateArmed)
+        T::AddEvent("MARS", State::kArmed)
             (bind(&StateMachineDrive::SendCommand, this, "CELEST 4 0 0", true))
             ("Start tracking Mars");
-        T::AddEvent("JUPITER", kStateArmed)
+        T::AddEvent("JUPITER", State::kArmed)
             (bind(&StateMachineDrive::SendCommand, this, "CELEST 5 0 0", true))
             ("Start tracking Jupiter");
-        T::AddEvent("SATURN", kStateArmed)
+        T::AddEvent("SATURN", State::kArmed)
             (bind(&StateMachineDrive::SendCommand, this, "CELEST 6 0 0", true))
             ("Start tracking Saturn");
@@ -1129,6 +1039,6 @@
             ("Stop any kind of movement.");
 
-//        T::AddEvent("ARM", kStateConnected)
-//            (bind(&StateMachineDrive::SendCommand, this, "ARM lock"))
+//        T::AddEvent("ARM", State::kConnected)
+//            (bind(&StateMachineSendCommand, this, "ARM lock"))
 //            ("");
 
@@ -1141,9 +1051,9 @@
 
         // Conenction commands
-        AddEvent("DISCONNECT", kStateConnected, kStateArmed)
+        T::AddEvent("DISCONNECT", State::kConnected, State::kArmed)
             (bind(&StateMachineDrive::Disconnect, this))
             ("disconnect from ethernet");
 
-        AddEvent("RECONNECT", "O", kStateDisconnected, kStateConnected, kStateArmed)
+        T::AddEvent("RECONNECT", "O", State::kDisconnected, State::kConnected, State::kArmed)
             (bind(&StateMachineDrive::Reconnect, this, placeholders::_1))
             ("(Re)connect ethernet connection to FTM, a new address can be given"
