Index: trunk/FACT++/src/HeadersFeedback.h
===================================================================
--- trunk/FACT++/src/HeadersFeedback.h	(revision 13922)
+++ trunk/FACT++/src/HeadersFeedback.h	(revision 13922)
@@ -0,0 +1,27 @@
+#ifndef FACT_HeadersFeedback
+#define FACT_HeadersFeedback
+
+namespace Feedback
+{
+    namespace State
+    {
+        enum states_t
+        {
+            kDimNetworkNA = 1,
+            kDisconnected,
+            kConnecting,
+            kConnectedFSC,
+            kConnectedFAD,
+            kConnected,
+            kTempCtrlIdle,        // 7
+            kFeedbackCtrlIdle,    // 8
+            kCurrentCtrlIdle,     // 9
+            kTempCtrlRunning,     // 9->10
+            kFeedbackCtrlRunning, // 10->11
+            kCurrentCtrlRunning,  // 12
+            kCalibrating,         // 11->13
+        };
+    }
+}
+
+#endif
Index: trunk/FACT++/src/feedback.cc
===================================================================
--- trunk/FACT++/src/feedback.cc	(revision 13921)
+++ trunk/FACT++/src/feedback.cc	(revision 13922)
@@ -16,16 +16,12 @@
 
 #include "HeadersFAD.h"
+#include "HeadersFSC.h"
 #include "HeadersBIAS.h"
-
-namespace ba    = boost::asio;
-namespace bs    = boost::system;
-namespace dummy = ba::placeholders;
+#include "HeadersFeedback.h"
+
+#include "DimState.h"
+#include "DimDescriptionService.h"
 
 using namespace std;
-
-// ------------------------------------------------------------------------
-
-#include "DimDescriptionService.h"
-#include "DimState.h"
 
 // ------------------------------------------------------------------------
@@ -34,21 +30,4 @@
 {
 private:
-    enum states_t
-    {
-        kStateDimNetworkNA = 1,
-        kStateDisconnected,
-        kStateConnecting,
-        kStateConnectedFSC,
-        kStateConnectedFAD,
-        kStateConnected,
-        kStateTempCtrlIdle,      // 7
-        kStateFeedbackCtrlIdle,  // 8
-        kStateCurrentCtrlIdle,  // 9
-        kStateTempCtrlRunning,  // 9->10
-        kStateFeedbackCtrlRunning, // 10->11
-        kStateCurrentCtrlRunning,  // 12
-        kStateCalibrating,         // 11->13
-    };
-
     enum control_t
     {
@@ -138,5 +117,5 @@
         const double dUt = (avgt-25)*4./70; // [V]
 
-        if (GetCurrentState()==kStateCalibrating && fBiasOffset>dUt-1.2)
+        if (GetCurrentState()==Feedback::State::kCalibrating && fBiasOffset>dUt-1.2)
         {
             ostringstream msg;
@@ -149,5 +128,5 @@
         // FIXME: If calibrating do not wait for the temperature!
         fAppliedOffset = fBiasOffset;
-        if (GetCurrentState()!=kStateCalibrating)
+        if (GetCurrentState()!=Feedback::State::kCalibrating)
             fAppliedOffset += dUt;
 
@@ -275,9 +254,9 @@
         fDimDeviation.Update(vec);
 
-        if (!fOutputEnabled || fDimBias.state()!=BIAS::kVoltageOn)
+        if (!fOutputEnabled || fDimBias.state()!=BIAS::State::kVoltageOn)
             return GetCurrentState();
 
         // Trigger calibration
-        if (GetCurrentState()==kStateCalibrating && fCursorTemp==1)
+        if (GetCurrentState()==Feedback::State::kCalibrating && fCursorTemp==1)
         {
             DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
@@ -321,5 +300,5 @@
             return -1;
 
-        if (fDimBias.state()!=BIAS::kVoltageOn)
+        if (fDimBias.state()!=BIAS::State::kVoltageOn)
             return false;
 
@@ -347,5 +326,5 @@
         if (fCursorCur<fNumCalibRequests)
         {
-            if (fDimBias.state()==BIAS::kVoltageOn)
+            if (fDimBias.state()==BIAS::State::kVoltageOn)
                 DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
             return;
@@ -379,5 +358,5 @@
         Info("Calibration successfully done.");
 
-        if (fDimBias.state()==BIAS::kVoltageOn)
+        if (fDimBias.state()==BIAS::State::kVoltageOn)
             DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
     }
@@ -582,5 +561,5 @@
         fDimDeviation.Update(vec);
 
-        if (!fOutputEnabled || fDimBias.state()!=BIAS::kVoltageOn)
+        if (!fOutputEnabled || fDimBias.state()!=BIAS::State::kVoltageOn)
             return;
 
@@ -715,5 +694,5 @@
         fDimDeviation.Update(vec);
 
-        if (!fOutputEnabled || fDimBias.state()!=BIAS::kVoltageOn)
+        if (!fOutputEnabled || fDimBias.state()!=BIAS::State::kVoltageOn)
             return;
 
@@ -726,5 +705,5 @@
     int HandleBiasCurrent(const EventImp &evt)
     {
-        if (fControlType==kTemp && GetCurrentState()==kStateCalibrating)
+        if (fControlType==kTemp && GetCurrentState()==Feedback::State::kCalibrating)
             HandleCalibration(evt);
 
@@ -817,7 +796,7 @@
     void WarnState(bool needfsc, bool needfad)
     {
-        const bool bias = fDimBias.state() >= BIAS::kConnecting;
-        const bool fsc  = fDimFSC.state()  >= 2;
-        const bool fad  = fDimFAD.state()  >= FAD::kConnected;
+        const bool bias = fDimBias.state() >= BIAS::State::kConnecting;
+        const bool fsc  = fDimFSC.state()  >= FSC::State::kConnected;
+        const bool fad  = fDimFAD.state()  >= FAD::State::kConnected;
 
         if (!bias)
@@ -931,5 +910,5 @@
         Message(out);
 
-        if (fDimBias.state()==BIAS::kVoltageOn)
+        if (fDimBias.state()==BIAS::State::kVoltageOn)
             DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
 
@@ -1022,5 +1001,5 @@
 //            return kSM_FatalError;
 
-        if (fDimBias.state()==BIAS::kRamping)
+        if (fDimBias.state()==BIAS::State::kRamping)
         {
             Warn("Calibration cannot be started when biasctrl is in state Ramping.");
@@ -1050,5 +1029,5 @@
         fOutputEnabled = true;
 
-        return kStateCalibrating;
+        return Feedback::State::kCalibrating;
     }
 
@@ -1075,37 +1054,37 @@
 
         if (!fDim.online())
-            return kStateDimNetworkNA;
-
-        const bool bias = fDimBias.state() >= BIAS::kConnecting;
-        const bool fad  = fDimFAD.state()  >= FAD::kConnected;
-        const bool fsc  = fDimFSC.state()  >= 2;
+            return Feedback::State::kDimNetworkNA;
+
+        const bool bias = fDimBias.state() >= BIAS::State::kConnecting;
+        const bool fad  = fDimFAD.state()  >= FAD::State::kConnected;
+        const bool fsc  = fDimFSC.state()  >= FSC::State::kConnected;
 
         // All subsystems are not connected
         if (!bias && !fad && !fsc)
-            return kStateDisconnected;
+            return Feedback::State::kDisconnected;
 
         // At least one subsystem apart from bias is connected
         if (bias && !fad && !fsc)
-            return kStateConnecting;
+            return Feedback::State::kConnecting;
 
 /*
         // All subsystems are connected
-        if (GetCurrentStatus()==kStateConfiguringStep1)
+        if (GetCurrentStatus()==Feedback::State::kConfiguringStep1)
         {
             if (fCursor<1)
-                return kStateConfiguringStep1;
+                return Feedback::State::kConfiguringStep1;
 
             if (fCursor==1)
             {
                 fStartTime = Time();
-                return kStateConfiguringStep2;
+                return Feedback::State::kConfiguringStep2;
             }
         }
-        if (GetCurrentStatus()==kStateConfiguringStep2)
+        if (GetCurrentStatus()==Feedback::State::kConfiguringStep2)
         {
             if (fCursor==1)
             {
                 if ((Time()-fStartTime).total_microseconds()/1000000.<1.5)
-                    return kStateConfiguringStep2;
+                    return Feedback::State::kConfiguringStep2;
 
                 Dim::SendCommand("BIAS_CONTROL/REQUEST_STATUS");
@@ -1125,5 +1104,5 @@
                 cout << avg/n << endl;
             }
-            return kStateConnected;
+            return Feedback::State::kConnected;
         }
         */
@@ -1133,5 +1112,5 @@
         {
             if (fControlType==kFeedback || fControlType==kFeedbackGlobal)
-                return fOutputEnabled ? kStateFeedbackCtrlRunning : kStateFeedbackCtrlIdle;
+                return fOutputEnabled ? Feedback::State::kFeedbackCtrlRunning : Feedback::State::kFeedbackCtrlIdle;
         }
 
@@ -1141,8 +1120,8 @@
             if (fControlType==kTemp)
             {
-                if (GetCurrentState()==kStateCalibrating && fCursorCur<fNumCalibRequests)
+                if (GetCurrentState()==Feedback::State::kCalibrating && fCursorCur<fNumCalibRequests)
                     return GetCurrentState();
 
-                return fOutputEnabled ? kStateTempCtrlRunning : kStateTempCtrlIdle;
+                return fOutputEnabled ? Feedback::State::kTempCtrlRunning : Feedback::State::kTempCtrlIdle;
             }
             if (fControlType==kCurrents)
@@ -1151,20 +1130,20 @@
                 if (fCurrentRequestInterval>0 && Time()-past>boost::posix_time::milliseconds(fCurrentRequestInterval))
                 {
-                    if (fDimBias.state()==BIAS::kVoltageOn)
+                    if (fDimBias.state()==BIAS::State::kVoltageOn)
                         DimClient::sendCommandNB("BIAS_CONTROL/REQUEST_STATUS", NULL, 0);
                     past = Time();
                 }
 
-                return fOutputEnabled ? kStateCurrentCtrlRunning : kStateCurrentCtrlIdle;
+                return fOutputEnabled ? Feedback::State::kCurrentCtrlRunning : Feedback::State::kCurrentCtrlIdle;
             }
         }
 
         if (bias && fad && !fsc)
-            return kStateConnectedFAD;
+            return Feedback::State::kConnectedFAD;
 
         if (bias && fsc && !fad)
-            return kStateConnectedFSC;
-
-        return kStateConnected;
+            return Feedback::State::kConnectedFSC;
+
+        return Feedback::State::kConnected;
     }
 
@@ -1218,94 +1197,94 @@
 
         // State names
-        AddStateName(kStateDimNetworkNA, "DimNetworkNotAvailable",
+        AddStateName(Feedback::State::kDimNetworkNA, "DimNetworkNotAvailable",
                      "The Dim DNS is not reachable.");
 
-        AddStateName(kStateDisconnected, "Disconnected",
+        AddStateName(Feedback::State::kDisconnected, "Disconnected",
                      "The Dim DNS is reachable, but the required subsystems are not available.");
 
-        AddStateName(kStateConnecting, "Connecting",
+        AddStateName(Feedback::State::kConnecting, "Connecting",
                      "Only biasctrl is available and connected with its hardware.");
 
-        AddStateName(kStateConnectedFSC, "ConnectedFSC",
+        AddStateName(Feedback::State::kConnectedFSC, "ConnectedFSC",
                      "biasctrl and fscctrl are available and connected with their hardware.");
-        AddStateName(kStateConnectedFAD, "ConnectedFAD",
+        AddStateName(Feedback::State::kConnectedFAD, "ConnectedFAD",
                      "biasctrl and fadctrl are available and connected with their hardware.");
-        AddStateName(kStateConnected, "Connected",
+        AddStateName(Feedback::State::kConnected, "Connected",
                      "biasctrl, fadctrl and fscctrl are available and connected with their hardware.");
 
-        AddStateName(kStateFeedbackCtrlIdle, "FeedbackIdle",
+        AddStateName(Feedback::State::kFeedbackCtrlIdle, "FeedbackIdle",
                      "Feedback control activated, but voltage output disabled.");
-        AddStateName(kStateTempCtrlIdle, "TempCtrlIdle",
+        AddStateName(Feedback::State::kTempCtrlIdle, "TempCtrlIdle",
                      "Temperature control activated, but voltage output disabled.");
-        AddStateName(kStateCurrentCtrlIdle, "CurrentCtrlIdle",
+        AddStateName(Feedback::State::kCurrentCtrlIdle, "CurrentCtrlIdle",
                      "Current control activated, but voltage output disabled.");
 
-        AddStateName(kStateFeedbackCtrlRunning, "FeedbackControl",
+        AddStateName(Feedback::State::kFeedbackCtrlRunning, "FeedbackControl",
                      "Feedback control activated and voltage output enabled.");
-        AddStateName(kStateTempCtrlRunning, "TempControl",
+        AddStateName(Feedback::State::kTempCtrlRunning, "TempControl",
                      "Temperature control activated and voltage output enabled.");
-        AddStateName(kStateCurrentCtrlRunning, "CurrentControl",
+        AddStateName(Feedback::State::kCurrentCtrlRunning, "CurrentControl",
                      "Current/Temp control activated and voltage output enabled.");
-        AddStateName(kStateCalibrating, "Calibrating",
+        AddStateName(Feedback::State::kCalibrating, "Calibrating",
                      "Calibrating current offsets.");
 
-        AddEvent("START_FEEDBACK_CONTROL", "S:1", kStateConnectedFAD, kStateConnected)
+        AddEvent("START_FEEDBACK_CONTROL", "S:1", Feedback::State::kConnectedFAD, Feedback::State::kConnected)
             (bind(&StateMachineFeedback::StartFeedback, this, placeholders::_1))
             ("Start the feedback control loop"
              "|Num[short]:Number of events 'medianed' to calculate the correction value");
 
-        AddEvent("START_GLOBAL_FEEDBACK", "S:1", kStateConnectedFAD, kStateConnected)
+        AddEvent("START_GLOBAL_FEEDBACK", "S:1", Feedback::State::kConnectedFAD, Feedback::State::kConnected)
             (bind(&StateMachineFeedback::StartFeedbackGlobal, this, placeholders::_1))
             ("Start the global feedback control loop"
              "Num[short]:Number of events averaged to calculate the correction value");
 
-        AddEvent("START_TEMP_CONTROL", "F:1", kStateConnectedFSC, kStateConnected)
+        AddEvent("START_TEMP_CONTROL", "F:1", Feedback::State::kConnectedFSC, Feedback::State::kConnected)
             (bind(&StateMachineFeedback::StartTempCtrl, this, placeholders::_1))
             ("Start the temperature control loop"
              "|offset[V]:Offset from the nominal temperature corrected value in Volts");
 
-        AddEvent("START_CURRENT_CONTROL", "F:1", kStateConnectedFSC, kStateConnected)
+        AddEvent("START_CURRENT_CONTROL", "F:1", Feedback::State::kConnectedFSC, Feedback::State::kConnected)
             (bind(&StateMachineFeedback::StartCurrentCtrl, this, placeholders::_1))
             ("Start the current/temperature control loop"
              "|offset[V]:Offset from the nominal current/temperature corrected value in Volts");
 
-        // kStateTempCtrlIdle, kStateFeedbackCtrlIdle, kStateTempCtrlRunning, kStateFeedbackCtrlRunning
+        // Feedback::State::kTempCtrlIdle, Feedback::State::kFeedbackCtrlIdle, Feedback::State::kTempCtrlRunning, Feedback::State::kFeedbackCtrlRunning
         AddEvent("STOP")
             (bind(&StateMachineFeedback::StopFeedback, this))
             ("Stop any control loop");
 
-        AddEvent("ENABLE_OUTPUT", "B:1")//, kStateIdle)
+        AddEvent("ENABLE_OUTPUT", "B:1")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::EnableOutput, this, placeholders::_1))
             ("Enable sending of correction values caluclated by the control loop to the biasctrl");
 
-        AddEvent("STORE_REFERENCE")//, kStateIdle)
+        AddEvent("STORE_REFERENCE")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::StoreReference, this))
             ("Store the last (averaged) value as new reference (for debug purpose only)");
 
-        AddEvent("SET_REFERENCE", "F:1")//, kStateIdle)
+        AddEvent("SET_REFERENCE", "F:1")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::SetReference, this, placeholders::_1))
             ("Set a new global reference value (for debug purpose only)");
 
-        AddEvent("SET_Ki", "D:1")//, kStateIdle)
+        AddEvent("SET_Ki", "D:1")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::SetConstant, this, placeholders::_1, 0))
             ("Set integral constant Ki");
 
-        AddEvent("SET_Kp", "D:1")//, kStateIdle)
+        AddEvent("SET_Kp", "D:1")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::SetConstant, this, placeholders::_1, 1))
             ("Set proportional constant Kp");
 
-        AddEvent("SET_Kd", "D:1")//, kStateIdle)
+        AddEvent("SET_Kd", "D:1")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::SetConstant, this, placeholders::_1, 2))
             ("Set derivative constant Kd");
 
-        AddEvent("SET_T", "D:1")//, kStateIdle)
+        AddEvent("SET_T", "D:1")//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::SetConstant, this, placeholders::_1, 3))
             ("Set time-constant. (-1 to use the cycle time, i.e. the time for the last average cycle, instead)");
 
-        AddEvent("CALIBRATE_CURRENTS", kStateConnectedFSC, kStateConnected)//, kStateIdle)
+        AddEvent("CALIBRATE_CURRENTS", Feedback::State::kConnectedFSC, Feedback::State::kConnected)//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::CalibrateCurrents, this))
             ("");
 
-        AddEvent("SET_CURRENT_REQUEST_INTERVAL", kStateConnectedFSC, kStateConnected)//, kStateIdle)
+        AddEvent("SET_CURRENT_REQUEST_INTERVAL", Feedback::State::kConnectedFSC, Feedback::State::kConnected)//, Feedback::State::kIdle)
             (bind(&StateMachineFeedback::SetCurrentRequestInterval, this, placeholders::_1))
             ("|interval[ms]:Interval between two current requests in modes which need that.");
