This library allows to parse and work with data sent by the Paradigma pelletti oven.

Revision:
1:9c48326ad8c9
Parent:
0:4873b21e0bca
Child:
2:27334bd6dc28
--- a/ParadigmaData.h	Sat Jun 22 10:59:05 2013 +0000
+++ b/ParadigmaData.h	Wed Jun 26 21:04:07 2013 +0000
@@ -1,7 +1,6 @@
 #ifndef __PARADIGMA_DATA_H__
 #define __PARADIGMA_DATA_H__
 
-#include "mbed.h"
 #include "ParadigmaBase.h"
 #include "ParadigmaTemperature.h"
 #include "ParadigmaDateTime.h"
@@ -9,7 +8,10 @@
 #include <string>
 using namespace std;
 
-/** ParadigmaBlockType_t enumerates valid values for the block type. The block type is always the first 
+namespace Paradigma
+{
+
+/** ParadigmaBlockType_t enumerates valid values for the block type. The block type is always the first
   * data byte in a response from paradigma. There are currently two known values.
   */
 typedef __packed enum {
@@ -23,7 +25,7 @@
     ParadigmaMessage = 0x0C,
 } ParadigmaMessageID_t;
 
-/** ParadigmaDatasetType_t specifies which type of information is contained in the datablock. Currently 
+/** ParadigmaDatasetType_t specifies which type of information is contained in the datablock. Currently
   * known values are : Dataset1 and Dataset2 for Variables, and Parameters for different settings which
   * can be changed and queried by the user.
   */
@@ -61,7 +63,7 @@
     ParadigmaBlockType_t        block_type;         // 0xFC for normal observable variables, 0xFD for parameter blocks
     unsigned char               block_length;
     ParadigmaMessageID_t        message_id;         // always 0x0C
-    ParadigmaDatasetType_t      dataset_type;  
+    ParadigmaDatasetType_t      dataset_type;
 } ParadigmaBlockHeader_t;
 
 typedef __packed struct {
@@ -70,7 +72,7 @@
     ParadigmaTemperature        Warmwassertemp;         //  (in 0,1 Grad Schritten)
     ParadigmaTemperature        Kesselvorlauf;          //  (in 0,1 Grad Schritten)
     ParadigmaTemperature        Kesselruecklauf;        //  (in 0,1 Grad Schritten)
-    
+
     ParadigmaTemperature        RaumtemperaturHK1;      //  (in 0,1 Grad Schritten)
     ParadigmaTemperature        RaumtemperaturHK2;      //  (in 0,1 Grad Schritten)
     ParadigmaTemperature        VorlauftemperaturHK1;   //  (in 0,1 Grad Schritten)
@@ -118,8 +120,8 @@
     byte                        LeistungPHK1;
     byte                        LeistungPHK2;
     byte                        LeistungPK;
-    
-    byte                        Checksumme;        
+
+    byte                        Checksumme;
 } MonDta2_t;
 
 
@@ -129,83 +131,147 @@
   */
 class ParadigmaMonitorData
 {
-        FunctionPointer         m_Callback;
-        
-        MonDta1_t               m_Data1;
-        MonDta2_t               m_Data2;
-        
-        char                    m_Buffer[50];
-        ParadigmaBlockHeader_t  m_Header;
-        ParadigmaDatasetType_t  m_activeDataBlock;
-        int                     m_actualPos;
-        char                    m_checksum;
-        
-        void                    invalidateHeader();
-        void                    callBack()  { m_Callback.call(); }
-        word                    swapWord(word d) { return ((d&0xFF)<<8) | ((d>>8)&0xFF); }
-        ulong                   swapDWord(ulong d) { return ((d>>24)&0xFF) | ((d>>8)&0x0000FF00) | ((d<<8)&0x00FF0000) | ((d<<24)&0xFF000000); }
-    public:
-        /** Public constructor. Will initialize all internal data and variables. */
-        ParadigmaMonitorData(): m_checksum(0)  {  memset(&m_Data1, 0, sizeof(m_Data1)); memset(&m_Data2, 0, sizeof(m_Data2)); invalidateHeader(); }
-        /** Access function to get the transmitted date time object.
-          * @returns : the date and time objects of the transmitted data.
-          */
-        ParadigmaDateTime getDateTime()                     { return m_Data1.DateTime; }
-        /** Access function to the Outside air temperature (AUSSENTEMP).
-          * @returns : the outside air temperature.
-          */
-        ParadigmaTemperature getAussentemp()                { return m_Data1.Aussentemp; }
-        /** Access function to the warm water temperature (WARMWASSERTEMP).
-          * @returns : the warm water temperature.
-          */
-        ParadigmaTemperature getWarmwassertemp()            { return m_Data1.Warmwassertemp; }
-        /** Access function to the 'kessel vorlauf' temperature.
-          * @returns : the temperature of the 'kessel vorlauf'.
-          */
-        ParadigmaTemperature getKesselvorlauf()             { return m_Data1.Kesselvorlauf; }
-        /** Access function to the 'kessel ruecklauf' temperature.
-          * @returns : the temperature of the 'kessel ruecklauf'.
-          */
-        ParadigmaTemperature getKesselruecklauf()           { return m_Data1.Kesselruecklauf; }
-        /** Access function to the room temperature of heating circuit 1.
-          * @returns : the room temperature of heating circuit 1.
-          */
-        ParadigmaTemperature getRaumtemperaturHK1()         { return m_Data1.RaumtemperaturHK1; }
-        /** Access function to the room temperature of heating circuit 2.
-          * @returns : the room temperature of heating circuit 2.
-          */
-        ParadigmaTemperature getRaumtemperaturHK2()         { return m_Data1.RaumtemperaturHK2; }
-        ParadigmaTemperature getVorlauftemperaturHK1()      { return m_Data1.VorlauftemperaturHK1; }
-        ParadigmaTemperature getVorlauftemperaturHK2()      { return m_Data1.VorlauftemperaturHK2; }
-        ParadigmaTemperature getRuecklauftemperaturHK1()    { return m_Data1.RuecklauftemperaturHK1; }
-        ParadigmaTemperature getRuecklauftemperaturHK2()    { return m_Data1.RuecklauftemperaturHK2; }
-        ParadigmaTemperature getPuffertemperaturOben()      { return m_Data1.PuffertemperaturOben; }
-        ParadigmaTemperature getPuffertemperaturUnten()     { return m_Data1.PuffertemperaturUnten; }
-        ParadigmaTemperature getZirkulationstemperatur()    { return m_Data1.Zirkulationstemperatur; }
-        
-        ParadigmaTemperature getRaumsollHK1()               { return m_Data2.RaumsollHK1;}
-        ParadigmaTemperature getRaumsollHK2()               { return m_Data2.RaumsollHK2;}
-        ParadigmaTemperature getVorlaufsollHK1()            { return m_Data2.VorlaufsollHK1;}
-        ParadigmaTemperature getVorlaufsollHK2()            { return m_Data2.VorlaufsollHK2;}
-        ParadigmaTemperature getWarmwassersolltemp()        { return m_Data2.Warmwassersolltemp;}
-        ParadigmaTemperature getPuffersolltemp()            { return m_Data2.Puffersolltemp;}
-        
-        /** Function will let the user select the temperature to be returned.
-          * @param sel : Will specify which temperature value to return.
-          * @returns : the temperature object as selected by param sel.
-          */
-        ParadigmaTemperature getTemperature(ParadigmaTemperatureSelector_t sel);
-        
-        ulong               getBetriebsstundenKessel()      { return (ulong)m_Data2.BetriebsstundenKessel; }
-        ulong               getAnzahlKesselstarts()         { return (ulong)m_Data2.AnzahlKesselstarts; }
-        word                getStoercodeKessel()            { return (word)m_Data2.StoercodeKessel; }
-        byte                getStoercodeFuehler()           { return (byte)m_Data2.StoercodeFuehler; }
-        
-        
-        ParadigmaMonitorData& operator<<( char c );
-        ParadigmaMonitorData& operator<<( char Buffer[] );
-        
-        void attach( void (*fct)(void) )    { m_Callback.attach(fct);}
+    FunctionPointer         m_Callback;
+
+    MonDta1_t               m_Data1;
+    MonDta2_t               m_Data2;
+
+    ParadigmaBlockHeader_t  m_Header;
+    ParadigmaDatasetType_t  m_activeDataBlock;
+    int                     m_actualPos;
+    char                    m_checksum;
+
+    void                    invalidateHeader();
+    void                    callBack()  {
+        m_Callback.call();
+    }
+    word                    swapWord(word d) {
+        return ((d&0xFF)<<8) | ((d>>8)&0xFF);
+    }
+    ulong                   swapDWord(ulong d) {
+        return ((d>>24)&0xFF) | ((d>>8)&0x0000FF00) | ((d<<8)&0x00FF0000) | ((d<<24)&0xFF000000);
+    }
+public:
+    /** Public constructor. Will initialize all internal data and variables. */
+    ParadigmaMonitorData(): m_checksum(0)  {
+        memset(&m_Data1, 0, sizeof(m_Data1));
+        memset(&m_Data2, 0, sizeof(m_Data2));
+        invalidateHeader();
+    }
+    /** Access function to get the transmitted date time object.
+      * @returns : the date and time objects of the transmitted data.
+      */
+    ParadigmaDateTime getDateTime()                     {
+        return m_Data1.DateTime;
+    }
+    /** Access function to the Outside air temperature (AUSSENTEMP).
+      * @returns : the outside air temperature.
+      */
+    ParadigmaTemperature getAussentemp()                {
+        return m_Data1.Aussentemp;
+    }
+    /** Access function to the warm water temperature (WARMWASSERTEMP).
+      * @returns : the warm water temperature.
+      */
+    ParadigmaTemperature getWarmwassertemp()            {
+        return m_Data1.Warmwassertemp;
+    }
+    /** Access function to the 'kessel vorlauf' temperature.
+      * @returns : the temperature of the 'kessel vorlauf'.
+      */
+    ParadigmaTemperature getKesselvorlauf()             {
+        return m_Data1.Kesselvorlauf;
+    }
+    /** Access function to the 'kessel ruecklauf' temperature.
+      * @returns : the temperature of the 'kessel ruecklauf'.
+      */
+    ParadigmaTemperature getKesselruecklauf()           {
+        return m_Data1.Kesselruecklauf;
+    }
+    /** Access function to the room temperature of heating circuit 1.
+      * @returns : the room temperature of heating circuit 1.
+      */
+    ParadigmaTemperature getRaumtemperaturHK1()         {
+        return m_Data1.RaumtemperaturHK1;
+    }
+    /** Access function to the room temperature of heating circuit 2.
+      * @returns : the room temperature of heating circuit 2.
+      */
+    ParadigmaTemperature getRaumtemperaturHK2()         {
+        return m_Data1.RaumtemperaturHK2;
+    }
+    ParadigmaTemperature getVorlauftemperaturHK1()      {
+        return m_Data1.VorlauftemperaturHK1;
+    }
+    ParadigmaTemperature getVorlauftemperaturHK2()      {
+        return m_Data1.VorlauftemperaturHK2;
+    }
+    ParadigmaTemperature getRuecklauftemperaturHK1()    {
+        return m_Data1.RuecklauftemperaturHK1;
+    }
+    ParadigmaTemperature getRuecklauftemperaturHK2()    {
+        return m_Data1.RuecklauftemperaturHK2;
+    }
+    ParadigmaTemperature getPuffertemperaturOben()      {
+        return m_Data1.PuffertemperaturOben;
+    }
+    ParadigmaTemperature getPuffertemperaturUnten()     {
+        return m_Data1.PuffertemperaturUnten;
+    }
+    ParadigmaTemperature getZirkulationstemperatur()    {
+        return m_Data1.Zirkulationstemperatur;
+    }
+
+    ParadigmaTemperature getRaumsollHK1()               {
+        return m_Data2.RaumsollHK1;
+    }
+    ParadigmaTemperature getRaumsollHK2()               {
+        return m_Data2.RaumsollHK2;
+    }
+    ParadigmaTemperature getVorlaufsollHK1()            {
+        return m_Data2.VorlaufsollHK1;
+    }
+    ParadigmaTemperature getVorlaufsollHK2()            {
+        return m_Data2.VorlaufsollHK2;
+    }
+    ParadigmaTemperature getWarmwassersolltemp()        {
+        return m_Data2.Warmwassersolltemp;
+    }
+    ParadigmaTemperature getPuffersolltemp()            {
+        return m_Data2.Puffersolltemp;
+    }
+
+    /** Function will let the user select the temperature to be returned.
+      * @param sel : Will specify which temperature value to return.
+      * @returns : the temperature object as selected by param sel.
+      */
+    ParadigmaTemperature getTemperature(ParadigmaTemperatureSelector_t sel);
+
+    ulong               getBetriebsstundenKessel()      {
+        return (ulong)m_Data2.BetriebsstundenKessel;
+    }
+    ulong               getAnzahlKesselstarts()         {
+        return (ulong)m_Data2.AnzahlKesselstarts;
+    }
+    word                getStoercodeKessel()            {
+        return (word)m_Data2.StoercodeKessel;
+    }
+    byte                getStoercodeFuehler()           {
+        return (byte)m_Data2.StoercodeFuehler;
+    }
+
+
+    ParadigmaMonitorData& operator<<( char c );
+    ParadigmaMonitorData& operator<<( char Buffer[] );
+
+    void attach( void (*fct)(void) )    {
+        m_Callback.attach(fct);
+    }
+    
+    template<typename T>
+    void attach(T* p, void (T::*mptr)(void)) {
+        m_Callback.attach(p, mptr);
+    }
 };
-
+}
 #endif
\ No newline at end of file