Index: trunk/FACT++/scripts/doCrateReset.js
===================================================================
--- trunk/FACT++/scripts/doCrateReset.js	(revision 17008)
+++ trunk/FACT++/scripts/doCrateReset.js	(revision 17012)
@@ -12,5 +12,5 @@
 include('scripts/CheckStates.js');
 
-var crate =
+var crates =
 [
      $['camera']=='true' || $['crate0']=='true',
@@ -20,152 +20,5 @@
 ];
 
-var camera = $['camera']=='true';
+include('scripts/crateReset.js');
 
-var cnt = 0;
-for (var i=0; i<4; i++)
-    if (crate[i])
-        cnt++;
-
-if (cnt==0)
-{
-    console.out("No crate to reset.");
-    exit();
-}
-
-console.out("Checking availability of servers...");
-
-var table =
-[
- [ "MCP" ],
- [ "FTM_CONTROL" ],
- [ "FAD_CONTROL" ],
-];
-if (!checkStates(table, 3000))
-    throw new Error("Either MCP, FTM_CONTROL or FAD_CONTROL not online.");
-
-// No data taking should be in progress
-// Trigger must be switched off
-
-checkSend(["MCP", "FAD_CONTROL", "FTM_CONTROL" ]);
-
-
-var mcp = dim.state("MCP");
-if (mcp.name=="TriggerOn" || mcp.state=="TakingData")
-    dim.send("MCP/STOP");
-if (mcp.name.substr(0,7)=="kConfig")
-    dim.send("MCP/RESET");
-if (dim.state("FTM_CONTROL").name=="TriggerOn")
-    dim.send("FTM_CONTROL/STOP_TRIGGER");
-
-/*
-var table =
-[
- [ "MCP", [ "Idle", "Connected" ]],
- [ "FTM_CONTROL", [ "Idle" ] ],
-];
-checkStates(table);
-*/
-
-//dim.send("FTM_CONTROL/RESET_CONFIGURE");
-//dim.send("FTM_CONTROL/STOP_TRIGGER");
-
-//if (dim.state("FAD_CONTROL").name=="RunInProgress")
-//    dim.send("FAD_CONTROL/CLOSE_OPEN_FILES");
-
-//if (fadstate=="Configuring1" || fadstate=="Configuring2" || fadstate=="Configured")
-//    dim.send("FAD_CONTROL/RESET_CONFIGURE");
-//v8.timeout(5000, function() { if (dim.state("FAD_CONTROL").index<5) return true; });
-
-console.out("Checking status of servers...");
-
-var table =
-[
- [ "MCP", [ "Idle", "Connected" ]],
- [ "FTM_CONTROL", [ "Valid" ] ],
- [ "FAD_CONTROL", [ "Disengaged", "Disconnected", "Connecting", "Connected" ] ],
-];
-if (!checkStates(table))
-    throw new Error("Either MCP, FTM_CONTROL or FAD_CONTROL not in a state in which it ought to be.");
-
-// FTUs must be switched off
-
-console.out("Disable FTUs...");
-
-//checkSend(["FTM_CONTROL"]);
-dim.send("FTM_CONTROL/ENABLE_FTU", -1, false);
-v8.sleep(1000);
-
-// Boards in the crates must be disconnected
-
-//checkSend(["FAD_CONTROL"]);
-
-if (dim.state("FAD_CONTROL").name=="Connecting" || dim.state("FAD_CONTROL").name=="Connected")
-    for (var i=0; i<10; i++)
-    {
-        for (var j=0; j<4; j++)
-            if (crate[j])
-            {
-                console.out("Sending DISCONNECT "+(j*10+i));
-                dim.send("FAD_CONTROL/DISCONNECT", j*10+i);
-            }
-    }
-
-v8.sleep(2000);
-if (!checkStates([[ "FAD_CONTROL", [ "Disengaged", "Disconnected", "Connected" ] ]]))
-    throw new Error("FAD_CONTROL neither Disengaged, Disconnected not Connected.");
-
-
-// Reset crates
-
-if (camera)
-    dim.send("FTM_CONTROL/RESET_CAMERA");
-else
-{
-    for (var i=0; i<4; i++)
-        if (crate[i])
-        {
-            console.out("Sending RESET_CRATE "+i);
-            dim.send("FTM_CONTROL/RESET_CRATE", i);
-        }
-}
-
-// We have to wait a bit
-
-v8.sleep(3200);
-
-// Reconnect all boards
-
-if (dim.state("FAD_CONTROL").name=="Disengaged")
-{
-    dim.send("Waiting 38s for crates to finish reset.");
-    v8.sleep(38000);
-    dim.send("FAD_CONTROL", "START");
-}
-else
-    for (var i=0; i<10; i++)
-    {
-        v8.sleep(3200);
-        for (var j=0; j<4; j++)
-            if (crate[j])
-            {
-                console.out("Sending CONNECT "+(j*10+i));
-                dim.send("FAD_CONTROL/CONNECT", j*10+i);
-            }
-    }
-
-
-// Reconnect all FTUs
-
-console.out("Enable FTUs...");
-
-v8.sleep(1000);
-dim.send("FTM_CONTROL/ENABLE_FTU", -1, true);
-v8.sleep(3000);
-dim.send("FTM_CONTROL/PING");
-v8.sleep(1000);
-
-dim.wait("FAD_CONTROL", "Connected", 3000);
-
-// Done
-
-console.out("Crate reset finished.");
+crateReset(crates);
