Index: trunk/FACT++/ScriptsForDimCtrl/FirstDrsCalib
===================================================================
--- trunk/FACT++/ScriptsForDimCtrl/FirstDrsCalib	(revision 12899)
+++ trunk/FACT++/ScriptsForDimCtrl/FirstDrsCalib	(revision 12900)
@@ -13,10 +13,10 @@
 FEEDBACK/ENABLE_OUTPUT 0
 FEEDBACK/STOP
-.s FEEDBACK 4
+.s FEEDBACK 6
 .w 500
 .! echo `date -u` "calibrating bias crate current readings..." >> ~/FACT++/ScriptsForDimCtrl/DataTaking.log
 FEEDBACK/CALIBRATE_CURRENTS
-.s FEEDBACK 9
-.s FEEDBACK 4
+.s FEEDBACK 11
+.s FEEDBACK 6
 .w 3000
 FEEDBACK/START_TEMP_CONTROL 0.00
Index: trunk/FACT++/gui/FactGui.h
===================================================================
--- trunk/FACT++/gui/FactGui.h	(revision 12899)
+++ trunk/FACT++/gui/FactGui.h	(revision 12900)
@@ -3084,9 +3084,9 @@
             fStatusFeedbackLabel->setToolTip(s.comment.c_str());
 
-            if (s.index>6) // Running
+            if (s.index>8) // Running
                 SetLedColor(fStatusFeedbackLed, kLedGreenCheck, time);
-            if (s.index==5 || s.index==6) // Idle
+            if (s.index==7 || s.index==8) // Idle
                 SetLedColor(fStatusFeedbackLed, kLedGreen, time);
-            if (s.index==4) // Connected
+            if (s.index>=4 && s.index<=6) // Connected
                 SetLedColor(fStatusFeedbackLed, kLedYellow, time);
             if (s.index==3) // Connecting
@@ -3098,13 +3098,13 @@
 
             fFeedbackWidget->setEnabled(s.index>=3);
-            fFeedbackCalibrate->setEnabled(s.index==4);
+            fFeedbackCalibrate->setEnabled(s.index==4 || s.index==6);
             fFeedbackStop->setEnabled(s.index>4);
-            fFeedbackTempStart->setEnabled(s.index==4);
-            fFeedbackTempOffset->setEnabled(s.index<=4);
-            fFeedbackOutputEnable->setEnabled(s.index<=6);
-            fFeedbackOutputDisable->setEnabled(s.index!=5 && s.index!=6);
-
-            fFeedbackFrameLeft->setEnabled(s.index!=5 && s.index!=7);
-            fFeedbackCanvLeft->setEnabled(s.index!=5 && s.index!=7);
+            fFeedbackTempStart->setEnabled(s.index==4 || s.index==5);
+            fFeedbackTempOffset->setEnabled(s.index<=6);
+            fFeedbackOutputEnable->setEnabled(s.index<=8);
+            fFeedbackOutputDisable->setEnabled(s.index!=7 && s.index!=8);
+
+            fFeedbackFrameLeft->setEnabled(s.index!=7 && s.index!=9);
+            fFeedbackCanvLeft->setEnabled(s.index!=7 && s.index!=9);
         }
 
Index: trunk/FACT++/src/feedback.cc
===================================================================
--- trunk/FACT++/src/feedback.cc	(revision 12899)
+++ trunk/FACT++/src/feedback.cc	(revision 12900)
@@ -51,4 +51,6 @@
         kStateDisconnected,
         kStateConnecting,
+        kStateConnectedFSC,
+        kStateConnectedFAD,
         kStateConnected,
         kStateTempCtrlIdle,
@@ -817,14 +819,14 @@
             return kStateDimNetworkNA;
 
+        const bool bias = fStatusBias.second >= BIAS::kConnecting;
+        const bool fad  = fStatusFAD.second  >= FAD::kConnected;
+        const bool fsc  = fStatusFSC.second  >= 2;
+
         // All subsystems are not connected
-        if (fStatusFAD.second<FAD::kConnected &&
-            fStatusBias.second<BIAS::kConnecting &&
-            fStatusFSC.second<2)
+        if (!bias && !fad && !fsc)
             return kStateDisconnected;
 
-        // At least one subsystem is not connected
-        if (fStatusFAD.second<FAD::kConnected ||
-            fStatusBias.second<BIAS::kConnected ||
-            fStatusFSC.second<2)
+        // At least one subsystem apart from bias is connected
+        if (bias && !fad && !fsc)
             return kStateConnecting;
 
@@ -867,15 +869,30 @@
             return kStateConnected;
         }
-*/
-        if (fControlType==kFeedback || fControlType==kFeedbackGlobal)
-            return fOutputEnabled ? kStateFeedbackCtrlRunning : kStateFeedbackCtrlIdle;
-
-        if (fControlType==kTemp)
-        {
-            if (GetCurrentState()==kStateCalibrating && fCursor<100)
-                return GetCurrentState();
-
-            return fOutputEnabled ? kStateTempCtrlRunning : kStateTempCtrlIdle;
-        }
+        */
+
+        // Needs connection of FAD and BIAS
+        if (bias && fad)
+        {
+            if (fControlType==kFeedback || fControlType==kFeedbackGlobal)
+                return fOutputEnabled ? kStateFeedbackCtrlRunning : kStateFeedbackCtrlIdle;
+        }
+
+        // Needs connection of FSC and BIAS
+        if (bias && fsc)
+        {
+            if (fControlType==kTemp)
+            {
+                if (GetCurrentState()==kStateCalibrating && fCursor<100)
+                    return GetCurrentState();
+
+                return fOutputEnabled ? kStateTempCtrlRunning : kStateTempCtrlIdle;
+            }
+        }
+
+        if (bias && fad && !fsc)
+            return kStateConnectedFAD;
+
+        if (bias && fsc && !fad)
+            return kStateConnectedFSC;
 
         return kStateConnected;
@@ -917,8 +934,12 @@
 
         AddStateName(kStateConnecting, "Connecting",
-                     "Not all subsystems (FAD, FSC, Bias) are connected to their hardware.");
-
+                     "Only biasctrl is available and connected with its hardware.");
+
+        AddStateName(kStateConnectedFSC, "ConnectedFSC",
+                     "biasctrl and fscctrl are available and connected with their hardware.");
+        AddStateName(kStateConnectedFAD, "ConnectedFAD",
+                     "biasctrl and fadctrl are available and connected with their hardware.");
         AddStateName(kStateConnected, "Connected",
-                     "All needed subsystems are connected to their hardware, no action is performed.");
+                     "biasctrl, fadctrl and fscctrl are available and connected with their hardware.");
 
         AddStateName(kStateFeedbackCtrlIdle, "FeedbackIdle",
@@ -937,13 +958,13 @@
                      "Calibrating current offsets.");
 
-        AddEvent("START_FEEDBACK_CONTROL", kStateConnected)
+        AddEvent("START_FEEDBACK_CONTROL", kStateConnectedFAD, kStateConnected)
             (bind(&StateMachineFeedback::StartFeedback, this))
             ("Start the feedback control loop");
 
-        AddEvent("START_GLOBAL_FEEDBACK", kStateConnected)
+        AddEvent("START_GLOBAL_FEEDBACK", kStateConnectedFAD, kStateConnected)
             (bind(&StateMachineFeedback::StartFeedbackGlobal, this))
             ("Start the global feedback control loop");
 
-        AddEvent("START_TEMP_CONTROL", "F:1", kStateConnected)
+        AddEvent("START_TEMP_CONTROL", "F:1", kStateConnectedFSC, kStateConnected)
             (bind(&StateMachineFeedback::StartTempCtrl, this, placeholders::_1))
             ("Start the temperature control loop"
@@ -983,5 +1004,5 @@
             ("Set time-constant. (-1 to use the cycle time, i.e. the time for the last average cycle, instead)");
 
-        AddEvent("CALIBRATE_CURRENTS", kStateConnected)//, kStateIdle)
+        AddEvent("CALIBRATE_CURRENTS", kStateConnectedFSC, kStateConnected)//, kStateIdle)
             (bind(&StateMachineFeedback::CalibrateCurrents, this))
             ("");
