Index: trunk/FACT++/src/smartfact.cc
===================================================================
--- trunk/FACT++/src/smartfact.cc	(revision 13482)
+++ trunk/FACT++/src/smartfact.cc	(revision 13483)
@@ -48,4 +48,5 @@
     pair<Time, int> fStatusDriveControl;
     pair<Time, int> fStatusMagicWeather;
+    pair<Time, int> fStatusFeedback;
     pair<Time, int> fStatusBiasControl;
     pair<Time, int> fStatusFadControl;
@@ -60,4 +61,6 @@
     DimStampedInfo fDimMagicWeather;
     DimStampedInfo fDimMagicWeatherData;
+
+    DimStampedInfo fDimFeedbackCalibration;
 
     DimStampedInfo fDimBiasControl;
@@ -226,4 +229,20 @@
     }
 
+    void HandleFeedbackCalibration(const DimData &d)
+    {
+        if (!CheckDataSize(d, "BiasControl:Voltage", 1664))
+            return;
+
+        vector<float> v(d.ptr<float>(), d.ptr<float>()+320);
+        sort(v.begin(), v.end());
+
+        fBiasControlVoltageMed = (v[159]+v[160])/2;
+
+        const char *ptr = d.ptr<char>();
+
+        ofstream fout("www/biascontrol-voltage.bin");
+        fout.write(ptr, 320*sizeof(float));
+    }
+
     void HandleBiasControlVoltage(const DimData &d)
     {
@@ -309,9 +328,11 @@
             return;
 
-        if (HandleService(curr, fDimMagicWeatherData,    &StateMachineSmartFACT::HandleMagicWeatherData))
-            return;
-        if (HandleService(curr, fDimBiasControlVoltage,  &StateMachineSmartFACT::HandleBiasControlVoltage))
-            return;
-        if (HandleService(curr, fDimBiasControlCurrent,  &StateMachineSmartFACT::HandleBiasControlCurrent))
+        if (HandleService(curr, fDimMagicWeatherData,     &StateMachineSmartFACT::HandleMagicWeatherData))
+            return;
+        if (HandleService(curr, fDimFeedbackCalibration,  &StateMachineSmartFACT::HandleFeedbackCalibration))
+            return;
+        if (HandleService(curr, fDimBiasControlVoltage,   &StateMachineSmartFACT::HandleBiasControlVoltage))
+            return;
+        if (HandleService(curr, fDimBiasControlCurrent,   &StateMachineSmartFACT::HandleBiasControlCurrent))
             return;
         if (HandleService(curr, *fDimFadControlEventData, &StateMachineSmartFACT::HandleFadControlEventData))
@@ -319,4 +340,6 @@
 
         if (UpdateState(curr, fDimMagicWeather, fStatusMagicWeather))
+            return;
+        if (UpdateState(curr, fDimFeedback, fStatusFeedback))
             return;
         if (UpdateState(curr, fDimBiasControl, fStatusBiasControl))
@@ -370,4 +393,5 @@
         PrintState(fStatusMagicWeather, "MAGIC_WEATHER");
         PrintState(fStatusDriveControl, "DRIVE_CONTROL");
+        PrintState(fStatusFeedback,     "FEEDBACK");
         PrintState(fStatusBiasControl,  "BIAS_CONTROL");
         PrintState(fStatusFadControl,   "FAD_CONTROL");
@@ -473,4 +497,5 @@
         fStatusDriveControl(make_pair(Time(), -2)),
         fStatusMagicWeather(make_pair(Time(), -2)),
+        fStatusFeedback    (make_pair(Time(), -2)),
         fStatusBiasControl (make_pair(Time(), -2)),
         fStatusFadControl  (make_pair(Time(), -2)),
@@ -485,4 +510,7 @@
         fDimMagicWeather        ("MAGIC_WEATHER/STATE",             (void*)NULL, 0, this),
         fDimMagicWeatherData    ("MAGIC_WEATHER/DATA",              (void*)NULL, 0, this),
+        //---
+        fDimFeedback            ("FEEDBACK/STATE",                  (void*)NULL, 0, this),
+        fDimFeedbackCalibration ("FEEDBACK/CALIBRATION",            (void*)NULL, 0, this),
         //---
         fDimBiasControl         ("BIAS_CONTROL/STATE",              (void*)NULL, 0, this),
