Index: /trunk/FACT++/src/smartfact.cc
===================================================================
--- /trunk/FACT++/src/smartfact.cc	(revision 13692)
+++ /trunk/FACT++/src/smartfact.cc	(revision 13693)
@@ -60,4 +60,8 @@
 
     vector<float> fFeedbackCalibration;
+
+    float fFeedbackTempOffset;
+    float fFeedbackUserOffset;
+
     vector<float> fBiasControlVoltageVec;
 
@@ -175,4 +179,5 @@
     DimStampedInfo fDimMagicWeatherData;
 
+    DimStampedInfo fDimFeedbackDeviation;
     DimStampedInfo fDimFeedbackCalibration;
 
@@ -436,4 +441,35 @@
         const float *ptr = d.ptr<float>();
         fFeedbackCalibration.assign(ptr+2*416, ptr+3*416);
+    }
+
+    void HandleFeedbackDeviation(const DimData &d)
+    {
+        if (!CheckDataSize(d, "Feedback:Deviation", 2*4*416+2))
+            return;
+
+        vector<float> dev(ptr+416, ptr+416+320);
+
+        fFeedbackTempOffset = ptr[2*416];
+        fFeedbackUserOffset = ptr[2*416+1];
+
+        for (int i=0; i<320; i++)
+            dev[i] -= fFeedbackTempOffset+fFeedbackUserOffset;
+
+        // Write the 160 patch values to a file
+        WriteBinary("feedback-deviation", dev, 2000, -1000);
+
+        const Statistics stat(dev, 3);
+
+        ostringstream out;
+        out << setprecision(3);
+        out << d.time.JavaDate() << '\n';
+        out << kHtmlWhite << '\t' << fFeedbackUserOffset << '\n';
+        out << kHtmlWhite << '\t' << fFeedbackTempOffset << '\n';
+        out << kHtmlWhite << '\t' << stat.min << '\n';
+        out << kHtmlWhite << '\t' << stat.med << '\n';
+        out << kHtmlWhite << '\t' << stat.avg << '\n';
+        out << kHtmlWhite << '\t' << stat.max << '\n';
+        ofstream("www/feedback.txt") << out.str();
+
     }
 
@@ -719,4 +755,6 @@
             return;
         if (HandleService(curr, fDimDriveControlSource,     &StateMachineSmartFACT::HandleDriveControlSource))
+            return;
+        if (HandleService(curr, fDimFeedbackDeviation,      &StateMachineSmartFACT::HandleFeedbackDeviation))
             return;
         if (HandleService(curr, fDimFeedbackCalibration,    &StateMachineSmartFACT::HandleFeedbackCalibration))
@@ -1043,4 +1081,5 @@
         fDimMagicWeatherData      ("MAGIC_WEATHER/DATA",              (void*)NULL, 0, this),
         //---
+        fDimFeedbackDeviation     ("FEEDBACK/DEVIATION",              (void*)NULL, 0, this),
         fDimFeedbackCalibration   ("FEEDBACK/CALIBRATION",            (void*)NULL, 0, this),
         //---
