Index: /trunk/FACT++/src/HeadersPower.cc
===================================================================
--- /trunk/FACT++/src/HeadersPower.cc	(revision 14519)
+++ /trunk/FACT++/src/HeadersPower.cc	(revision 14519)
@@ -0,0 +1,80 @@
+#include "HeadersPower.h"
+
+#include <string>
+#include <iomanip>
+#include <iostream>
+
+#include <QString>
+#include <QtXml/QDomNamedNodeMap>
+
+#include "WindowLog.h"
+
+using namespace std;
+using namespace Power;
+
+bool Status::Set(bool &rc, const QString &value)
+{
+    rc = value.toInt();
+    return true;
+}
+
+bool Status::Set(const QDomNamedNodeMap &map)
+{
+    if (!map.contains("id") || !map.contains("title"))
+        return false;
+
+    QString item  = map.namedItem("id").nodeValue();
+    QString value = map.namedItem("title").nodeValue();
+
+    if (item==(QString("flow_meter")))
+        return Set(fWaterFlowOk, value);
+
+    if (item==(QString("level")))
+        return Set(fWaterLevelOk, value);
+
+    if (item==(QString("bias_power")))
+        return Set(fPwrBiasOn, value);
+
+    if (item==(QString("power_24v")))
+        return Set(fPwr24VOn, value);
+
+    if (item==(QString("pump")))
+        return Set(fPwrPumpOn, value);
+
+    if (item==(QString("drive_power")))
+        return Set(fPwrDriveOn, value);
+
+    if (item==(QString("drive_on")))
+        return Set(fDriveMainSwitchOn, value);
+
+    if (item==(QString("drive_enable")))
+        return Set(fDriveFeedbackOn, value);
+
+    return false;
+}
+
+void Status::Print(ostream &out, const char *title, const bool &val, const char *t, const char *f)
+{
+    out << setw(9) << title << " : ";
+    if (val)
+        out << kGreen << t << kReset << '\n';
+    else
+        out << kRed   << f << kReset << '\n';
+}
+
+void Status::Print(ostream &out)
+{
+    out << kReset;
+    out << "------- WATER -------\n";
+    Print(out, "level",    fWaterLevelOk, "ok", "low");
+    Print(out, "flow",     fWaterFlowOk,  "ok", "low");
+    out << "------- POWER -------\n";
+    Print(out, "24V",      fPwr24VOn);
+    Print(out, "pump",     fPwrPumpOn);
+    Print(out, "bias",     fPwrBiasOn);
+    Print(out, "drive",    fPwrDriveOn);
+    out << "------- DRIVE -------\n";
+    Print(out, "feedback", fDriveFeedbackOn,   "on", "off");
+    Print(out, "main",     fDriveMainSwitchOn, "on", "off");
+    out << "---------------------" << endl;
+}
Index: /trunk/FACT++/src/HeadersPower.h
===================================================================
--- /trunk/FACT++/src/HeadersPower.h	(revision 14519)
+++ /trunk/FACT++/src/HeadersPower.h	(revision 14519)
@@ -0,0 +1,62 @@
+#ifndef FACT_HeadersPower
+#define FACT_HeadersPower
+
+#include <iosfwd>
+#include <stdint.h>
+
+class QString;
+class QDomNamedNodeMap;
+
+namespace Power
+{
+    namespace State
+    {
+        enum states_t
+        {
+            kDisconnected = 1,
+            kConnected,
+            kSystemOff,
+            kCameraOn =  4,
+            kBiasOn   =  8,
+            kDriveOn  = 16,
+            kSystemOn = kCameraOn|kBiasOn|kDriveOn,
+            kCoolingFailure
+        };
+    };
+
+    struct Status
+    {
+        bool fWaterLevelOk;
+        bool fWaterFlowOk;
+
+        bool fPwr24VOn;
+        bool fPwrPumpOn;
+        bool fPwrBiasOn;
+        bool fPwrDriveOn;
+
+        bool fDriveMainSwitchOn;
+        bool fDriveFeedbackOn;
+
+        Status() { }
+
+        bool Set(bool &rc, const QString &value);
+        bool Set(const QDomNamedNodeMap &map);
+
+        void Print(std::ostream &out, const char *title, const bool &val, const char *t="enabled", const char *f="disabled");
+        void Print(std::ostream &out);      
+
+        uint8_t GetVal() const
+        {
+            return
+                fWaterLevelOk      <<0 |
+                fWaterFlowOk       <<1 |
+                fPwr24VOn          <<2 |
+                fPwrPumpOn         <<3 |
+                fPwrDriveOn        <<4 |
+                fDriveMainSwitchOn <<5 |
+                fDriveFeedbackOn   <<6;
+        }
+
+    } __attribute__((__packed__));
+};
+#endif
