Index: trunk/FACT++/src/fadctrl.cc
===================================================================
--- trunk/FACT++/src/fadctrl.cc	(revision 12330)
+++ trunk/FACT++/src/fadctrl.cc	(revision 12331)
@@ -760,9 +760,19 @@
         {
             ostringstream msg;
-            msg << hex << "Value " << num << " out of range, max=" << FAD::kMaxRunNumber;
+            msg << "Run number " << num << " out of range (max=" << FAD::kMaxRunNumber << ")";
             T::Error(msg);
             return false;
         }
 
+        if (num>0 && num<GetRunNumber())
+        {
+            ostringstream msg;
+            msg << "Given run number smaller than next run number which will be opened by the event builder (" << GetRunNumber() << ")";
+            T::Error(msg);
+            return false;
+        }
+
+        IncreaseRunNumber(num);
+ 
         for (BoardList::iterator i=fBoards.begin(); i!=fBoards.end(); i++)
             i->second->CmdSetRunNumber(num);
@@ -1452,5 +1462,5 @@
             }
 
-            return FAD::kConnected;
+            return GetNumFilesOpen()>0 ? FAD::kWritingData : FAD::kConnected;
         }
 
@@ -1540,12 +1550,15 @@
 
         T::AddStateName(FAD::kConfigured, "Configured",
-                        "The last header received through the command socket fits the requested configureation and has EventCounter==0.");
+                        "The configuration of all boards was successfully cross checked. Waiting for events with a new run number to receive.");
+
+        T::AddStateName(FAD::kWritingData, "WritingData",
+                        "The event builder has an open file (that does not mean that new events are currently received)");
 
         // FAD Commands
-        T::AddEvent("SEND_CMD", "I:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SEND_CMD", "I:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SendCmd, this, placeholders::_1))
             ("Send a command to the FADs. Values between 0 and 0xffff are allowed."
              "|command[uint16]:Command to be transmittted.");
-        T::AddEvent("SEND_DATA", "I:2", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SEND_DATA", "I:2", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SendCmdData, this, placeholders::_1))
             ("Send a command with data to the FADs. Values between 0 and 0xffff are allowed."
@@ -1553,33 +1566,33 @@
              "|data[uint16]:Data to be sent with the command.");
 
-        T::AddEvent("ENABLE_SRCLK", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_SRCLK", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdSrclk))
             ("Set SRCLK");
-        T::AddEvent("ENABLE_BUSY_OFF", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_BUSY_OFF", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdBusyOff))
             ("Set BUSY continously low");
-        T::AddEvent("ENABLE_BUSY_ON", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_BUSY_ON", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdBusyOn))
             ("Set BUSY constantly high (has priority over BUSY_OFF)");
-        T::AddEvent("ENABLE_SCLK", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_SCLK", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdSclk))
             ("Set SCLK");
-        T::AddEvent("ENABLE_DRS", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_DRS", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdDrsEnable))
             ("Switch Domino wave");
-        T::AddEvent("ENABLE_DWRITE", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_DWRITE", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdDwrite))
             ("Set Dwrite (possibly high / always low)");
-        T::AddEvent("ENABLE_CONTINOUS_TRIGGER", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_CONTINOUS_TRIGGER", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdContTrigger))
             ("Enable continous (internal) trigger.");
-        T::AddEvent("ENABLE_TRIGGER_LINE", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_TRIGGER_LINE", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdTriggerLine))
             ("Incoming triggers can be accepted/will not be accepted");
-        T::AddEvent("ENABLE_COMMAND_SOCKET_MODE", "B:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ENABLE_COMMAND_SOCKET_MODE", "B:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CmdEnable, this, placeholders::_1, FAD::kCmdSocket))
             ("Set debug mode (yes: dump events through command socket, no=dump events through other sockets)");
 
-        T::AddEvent("SET_TRIGGER_RATE", "I:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SET_TRIGGER_RATE", "I:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SetTriggerRate, this, placeholders::_1))
             ("Enable continous trigger");
@@ -1587,22 +1600,22 @@
             (bind(&StateMachineFAD::Trigger, this, 1))
             ("Issue software triggers");
-        T::AddEvent("SEND_N_TRIGGERS", "I", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SEND_N_TRIGGERS", "I", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SendTriggers, this, placeholders::_1))
             ("Issue software triggers");
-        T::AddEvent("START_RUN", "", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("START_RUN", "", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::StartRun, this, placeholders::_1, true))
             ("Set FAD DAQ mode. when started, no configurations must be send.");
-        T::AddEvent("STOP_RUN", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("STOP_RUN", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::StartRun, this, placeholders::_1, false))
             ("");
-        T::AddEvent("PHASE_SHIFT", "S:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("PHASE_SHIFT", "S:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::PhaseShift, this, placeholders::_1))
             ("Adjust ADC phase (in 'steps')");
 
-        T::AddEvent("RESET_EVENT_COUNTER", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("RESET_EVENT_COUNTER", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::Cmd, this, FAD::kCmdResetEventCounter))
             ("");
 
-        T::AddEvent("SET_RUN_NUMBER", "X:1", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SET_RUN_NUMBER", "X:1", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SetRunNumber, this, placeholders::_1))
             ("");
@@ -1613,5 +1626,5 @@
              "|memory[short]:Buffer size in Mega-bytes.");
 
-        T::AddEvent("SET_REGISTER", "I:2", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SET_REGISTER", "I:2", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SetRegister, this, placeholders::_1))
             ("set register to value"
@@ -1620,5 +1633,5 @@
 
         // FIXME:  Maybe add a mask which channels should be set?
-        T::AddEvent("SET_REGION_OF_INTEREST", "I:2", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SET_REGION_OF_INTEREST", "I:2", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SetRoi, this, placeholders::_1))
             ("Set region-of-interest to value"
@@ -1627,5 +1640,5 @@
 
         // FIXME:  Maybe add a mask which channels should be set?
-        T::AddEvent("SET_DAC_VALUE", "I:2", FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("SET_DAC_VALUE", "I:2", FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::SetDac, this, placeholders::_1))
             ("Set DAC numbers in range to value"
@@ -1633,5 +1646,5 @@
             "|val[short]:Value to be set");
 
-        T::AddEvent("CONFIGURE", "X:2;C", FAD::kConnected, FAD::kConfigured)
+        T::AddEvent("CONFIGURE", "X:2;C", FAD::kConnected, FAD::kConfigured, FAD::kWritingData)
             (bind(&StateMachineFAD::StartConfigure, this, placeholders::_1))
             ("");
@@ -1706,5 +1719,5 @@
              "|enable[bool]:Whether the event builder should ignore data from this slot (yes) or allowed (no)");
 
-        T::AddEvent("CLOSE_OPEN_FILES", FAD::kDisconnected, FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("CLOSE_OPEN_FILES", FAD::kDisconnected, FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::CloseOpenFiles, this))
             ("Close all run files opened by the EventBuilder.");
@@ -1721,17 +1734,17 @@
             ("Start EventBuilder thread and connect all valid slots.");
 
-        T::AddEvent("STOP",  FAD::kDisconnected, FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("STOP",  FAD::kDisconnected, FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::StopConnection, this))
             ("Stop EventBuilder thread (still write buffered events) and disconnect all slots.");
 
-        T::AddEvent("ABORT", FAD::kDisconnected, FAD::kConnecting, FAD::kConnected)
+        T::AddEvent("ABORT", FAD::kDisconnected, FAD::kConnecting, FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::AbortConnection, this))
             ("Immediately abort EventBuilder thread and disconnect all slots.");
 
-        T::AddEvent("SOFT_RESET", FAD::kConnected)
+        T::AddEvent("SOFT_RESET", FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::Reset, this, true))
             ("Wait for buffers to drain, close all files and reinitialize event builder thread.");
 
-        T::AddEvent("HARD_RESET", FAD::kConnected)
+        T::AddEvent("HARD_RESET", FAD::kConnected, FAD::kWritingData)
             (bind(&StateMachineFAD::Reset, this, false))
             ("Free all buffers, close all files and reinitialize event builder thread.");
