Index: trunk/FACT++/src/EventBuilderWrapper.h
===================================================================
--- trunk/FACT++/src/EventBuilderWrapper.h	(revision 11169)
+++ trunk/FACT++/src/EventBuilderWrapper.h	(revision 11174)
@@ -721,6 +721,10 @@
     DimDescribedService fDimEventData;
     DimDescribedService fDimFwVersion;
-    DimDescribedService fDimPllLock;
-    DimDescribedService fDimDrsEnabled;
+    //DimDescribedService fDimPllLock;
+    //DimDescribedService fDimDrsEnabled;
+    //DimDescribedService fDimTriggerLine;
+    //DimDescribedService fDimContinousTrigger;
+    //DimDescribedService fDimSocket;
+    DimDescribedService fDimStatus;
     DimDescribedService fDimStatistics;
 
@@ -742,6 +746,10 @@
 	fDimEventData("FAD_CONTROL/EVENT_DATA", "S:1;I:1;S:1;I:2;S:1;S", ""),
         fDimFwVersion("FAD_CONTROL/FIRMWARE_VERSION", "F:43", ""),
-        fDimPllLock("FAD_CONTROL/PLL_LOCK", "C:41", ""),
-        fDimDrsEnabled("FAD_CONTROL/DRS_ENABLED", "C:41", ""),
+        //fDimPllLock("FAD_CONTROL/PLL_LOCK", "C:41", ""),
+        //fDimDrsEnabled("FAD_CONTROL/DRS_ENABLED", "C:41", ""),
+        //fDimTriggerLine("FAD_CONTROL/TRIGGER_LINE", "C:41", ""),
+        //fDimContinousTrigger("FAD_CONTROL/CONTINOUS_TRIGGER", "C:41", ""),
+        //fDimBusy("FAD_CONTROL/BUSY", "C:41", ""),
+        fDimStatus("FAD_CONTROL/STATUS", "S:42", ""),
         fDimStatistics("FAD_CONTROL/STATISTICS", "X:8", ""),
         fDebugStream(false), fDebugRead(false)
@@ -1387,4 +1395,42 @@
     }
 
+    template<typename T>
+    boost::array<T, 42> CompareBits(const FAD::EventHeader *h, const T *t)
+    {
+        const int offset = reinterpret_cast<const char *>(t) - reinterpret_cast<const char *>(h);
+
+        T val;  // All bits 0
+        T rc;
+
+        boost::array<T, 42> vec;
+
+        bool first = true;
+
+        for (int i=0; i<40; i++)
+        {
+            const char *base = reinterpret_cast<const char*>(&fVecHeader[i]);
+            const T *ref = reinterpret_cast<const T*>(base+offset);
+
+            vec[i+2] = *ref;
+
+            if (gi_NumConnect[i/7]!=7)
+                continue;
+
+            if (first)
+            {
+                first = false;
+                val = *ref;
+                rc = ~0;
+            }
+
+            rc |= val^*ref;
+        }
+
+        vec[0] = rc;
+        vec[1] = val;
+
+        return vec;
+    }
+
     template<typename T, size_t N>
     void Update(DimDescribedService &svc, const pair<bool,boost::array<T, N>> &data)
@@ -1442,5 +1488,5 @@
             Print("Run", run);
         }
-
+/*
         if (old.PLLLCK() != h.PLLLCK())
         {
@@ -1476,5 +1522,5 @@
             Print("Owf", owf);
         }
-
+*/
         if (old.IsDcmLocked() != h.IsDcmLocked())
         {
@@ -1494,9 +1540,14 @@
             Print("Spi", spi);
         }
-
+/*
         if (old.HasBusy() != h.HasBusy())
         {
             const pair<bool, boost::array<uint16_t,43>> bsy = Compare(&h, &h.fStatus, FAD::EventHeader::kBusy);
-            Print("Bsy", bsy);
+            pair<bool, boost::array<uint8_t,43>> data;
+            data.first = bsy.first;
+            data.second[0] = bsy.second[1];
+            for (int i=0; i<40; i++)
+                data.second[i+1] = bsy.second[i+3];
+            Update(fDimBusy, data);
         }
 
@@ -1504,5 +1555,10 @@
         {
             const pair<bool, boost::array<uint16_t,43>> trg = Compare(&h, &h.fStatus, FAD::EventHeader::kTriggerLine);
-            Print("Trg", trg);
+            pair<bool, boost::array<uint8_t,43>> data;
+            data.first = trg.first;
+            data.second[0] = trg.second[1];
+            for (int i=0; i<40; i++)
+                data.second[i+1] = trg.second[i+3];
+            Update(fDimTriggerLine, data);
         }
 
@@ -1510,5 +1566,10 @@
         {
             const pair<bool, boost::array<uint16_t,43>> cnt = Compare(&h, &h.fStatus, FAD::EventHeader::kContTrigger);
-            Print("Cnt", cnt);
+            pair<bool, boost::array<uint8_t,43>> data;
+            data.first = cnt.first;
+            data.second[0] = cnt.second[1];
+            for (int i=0; i<40; i++)
+                data.second[i+1] = cnt.second[i+3];
+            Update(fDimContinousTrigger, data);
         }
 
@@ -1518,5 +1579,13 @@
             Print("Sck", sck);
         }
-
+*/
+        if (old.fStatus != h.fStatus)
+        {
+            const boost::array<uint16_t,42> sts = CompareBits(&h, &h.fStatus);
+            fDimStatus.setData(const_cast<uint16_t*>(sts.data()), 42*sizeof(uint16_t));
+            fDimStatus.updateService();
+
+            cout << "EMMIT" << endl;
+        }
 
 
