Index: /trunk/FACT++/src/ftmctrl.cc
===================================================================
--- /trunk/FACT++/src/ftmctrl.cc	(revision 10788)
+++ /trunk/FACT++/src/ftmctrl.cc	(revision 10789)
@@ -574,4 +574,24 @@
     }
 
+    bool CmdResetCrate(uint16_t addr)
+    {
+        if (addr>3)
+            return false;
+
+        PostCmd(FTM::kCmdCrateReset, 1<<addr);
+
+        return true;
+    }
+
+    bool CmdResetCamera()
+    {
+        PostCmd(FTM::kCmdCrateReset, FTM::kResetCrate0);
+        PostCmd(FTM::kCmdCrateReset, FTM::kResetCrate1);
+        PostCmd(FTM::kCmdCrateReset, FTM::kResetCrate2);
+        PostCmd(FTM::kCmdCrateReset, FTM::kResetCrate3);
+
+        return true;
+    }
+
     bool CmdDisableReports(bool b)
     {
@@ -1366,4 +1386,14 @@
     }
 
+    int ResetCrate(const EventImp &evt)
+    {
+        if (!CheckEventSize(evt.GetSize(), "ResetCrate", 2))
+            return T::kSM_FatalError;
+
+        fFTM.CmdResetCrate(evt.GetUShort());
+
+        return T::GetCurrentState();
+    }
+
     int Disconnect()
     {
@@ -1596,4 +1626,12 @@
         AddEvent("SET_CALIBRATION_WINDOW", "S:1", kStateIdle)
             (boost::bind(&StateMachineFTM::SetCalibWindow, this, _1))
+            ("");
+
+        AddEvent("RESET_CRATE", "S:1", kStateIdle)
+            (boost::bind(&StateMachineFTM::ResetCrate, this, _1))
+            ("");
+
+        AddEvent("RESET_CAMERA", kStateIdle)
+            (Wrapper(boost::bind(&ConnectionFTM::CmdResetCamera, &fFTM)))
             ("");
 
