This library allows to parse and work with data sent by the Paradigma pelletti oven.
Diff: ParadigmaData.h
- 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