Index: /trunk/FACT++/src/EventBuilderWrapper.h
===================================================================
--- /trunk/FACT++/src/EventBuilderWrapper.h	(revision 11531)
+++ /trunk/FACT++/src/EventBuilderWrapper.h	(revision 11532)
@@ -11,4 +11,5 @@
 #include <boost/thread.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
+
 
 #include <CCfits/CCfits>
@@ -453,4 +454,6 @@
         AddColumnEntry(colNames, dataTypes, 1,            'J', "EventNum");
         AddColumnEntry(colNames, dataTypes, 1,            'I', "TriggerType");
+        AddColumnEntry(colNames, dataTypes, 1,            'I', "NumBoards");
+        AddColumnEntry(colNames, dataTypes, 1,            'I', "reserved");
         AddColumnEntry(colNames, dataTypes, 1,            'J', "SoftTrig");
         AddColumnEntry(colNames, dataTypes, 2,            'J', "PCTime");
@@ -461,5 +464,5 @@
 
         ostringstream fmt;
-        fmt << "I:1;S:1;I:1;I:2";
+        fmt << "I:1;S:1;I:1;I:1;I:1;I:2";
         fmt << ";I:" << NBOARDS;
         fmt << ";S:" << NPIX;
@@ -865,14 +868,29 @@
     }
 
-    map<uint32_t, pair<uint32_t, uint32_t>> fExpectedRuns;
-
-    uint32_t StartNewRun(int64_t maxtime, int64_t maxevt)
-    {
-        if (maxtime==0)
+    struct RunDescription
+    {
+        uint32_t maxtime;
+        uint32_t maxevt;
+
+        FAD::Configuration reference;
+    };
+
+    map<uint32_t, RunDescription> fExpectedRuns;
+
+    uint32_t StartNewRun(int64_t maxtime, int64_t maxevt, const FAD::Configuration &ref)
+    {
+        if (maxtime<=0 || maxtime>24*60*60)
             maxtime = 24*60*60;
-        if (maxevt==0)
+        if (maxevt<=0 || maxevt>INT32_MAX)
             maxevt  = INT32_MAX;
 
-        fExpectedRuns[fRunNumber] = make_pair(maxtime, maxevt);
+        const RunDescription descr =
+        {
+            uint32_t(maxtime),
+            uint32_t(maxevt),
+            ref
+        };
+
+        fExpectedRuns[fRunNumber] = descr;
         return fRunNumber++;
     }
@@ -1330,50 +1348,37 @@
          */
 
-        // Check consistency of:
-        // =====================
-
-        // Write a single key for:
-        // -----------------------
-        // Start package flag
-        // package length
-        // version number
-        // status
-        // Prescaler
-
-        // Write 40 kays for (?)
-        // Phaseshift
-        // DNA
-        // DAC
-
-
         /*
-         uint16_t start_package_flag;
-         uint16_t package_length;
-         uint16_t version_no;
-         uint16_t PLLLCK;
-
-         uint16_t trigger_crc;
-         uint16_t trigger_type;
-         uint32_t trigger_id;
-
-         uint32_t fad_evt_counter;
-         uint32_t REFCLK_frequency;
-
-         uint16_t board_id;
-         uint8_t  zeroes;
-         int8_t   adc_clock_phase_shift;
-         uint16_t number_of_triggers_to_generate;
-         uint16_t trigger_generator_prescaler;
-
-         uint64_t DNA;
-
-         uint32_t time;
-         uint32_t runnumber;
-
-         int16_t  drs_temperature[NTemp];
-
-         int16_t  dac[NDAC];
-         */
-
+        const FAD::EventHeader *beg = reinterpret_cast<FAD::EventHeader*>(fadhd);
+        const FAD::EventHeader *end = reinterpret_cast<FAD::EventHeader*>(fadhd)+41;
+
+        for (const FAD::EventHeader *ptr=beg; ptr!=end; ptr++)
+        {
+            // Event incomplete
+            if (ptr->fStartDelimiter==0)
+                return -1;
+
+                // Either one of
+                //   * fStatus
+                //   * fRunNumber
+                //   * fEventCounter
+                //   * fAdcClockPhaseShift
+                //   * fTriggerGeneratorPrescaler
+                //   * fDac
+                // inconsistent
+            if (*ptr != *beg)
+                return -1;
+
+            if (ptr->fTriggerType != beg->fTriggerType)
+                return -1;
+            if (ptr->fTriggerId   != beg->fTriggerId)
+                return -1;
+            if (ptr->fVersion     != beg->fVersion)
+                return -1;
+        }*/
+
+        // check REFCLK_frequency
+        // check consistency with command configuration
+        // how to log errors?
+        // need gotNewRun/closedRun to know it is finished
 
         static Time oldt(boost::date_time::neg_infin);
@@ -1390,6 +1395,4 @@
 	fDimEventData.updateService();
 
-        //delete data;
-
 	return 0;
     }
@@ -1403,5 +1406,5 @@
     {
         // This function is called even when writing is switched off
-        const map<uint32_t,pair<uint32_t,uint32_t>>::iterator it = fExpectedRuns.find(runnr);
+        const map<uint32_t,RunDescription>::iterator it = fExpectedRuns.find(runnr);
         if (it==fExpectedRuns.end())
         {
@@ -1411,5 +1414,5 @@
         }
 
-        CloseRunFile(runnr, time(NULL)+it->second.first, it->second.second);
+        CloseRunFile(runnr, time(NULL)+it->second.maxtime, it->second.maxevt);
         // return: 0=close scheduled / >0 already closed / <0 does not exist
 
