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

Committer:
leihen
Date:
Wed Jun 26 21:04:07 2013 +0000
Revision:
1:9c48326ad8c9
Parent:
0:4873b21e0bca
Child:
2:27334bd6dc28
Small additions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 1:9c48326ad8c9 1 #include "mbed.h"
leihen 0:4873b21e0bca 2 #include "ParadigmaData.h"
leihen 1:9c48326ad8c9 3 #ifndef DEBUG
leihen 0:4873b21e0bca 4 #define DEBUG
leihen 1:9c48326ad8c9 5 #endif
leihen 0:4873b21e0bca 6 #include "debug.h"
leihen 0:4873b21e0bca 7
leihen 1:9c48326ad8c9 8 using namespace Paradigma;
leihen 1:9c48326ad8c9 9 static char m_Buffer[50];
leihen 0:4873b21e0bca 10
leihen 0:4873b21e0bca 11 ParadigmaMonitorData& ParadigmaMonitorData::operator<<(char c)
leihen 0:4873b21e0bca 12 {
leihen 0:4873b21e0bca 13 int nLen = 0;
leihen 0:4873b21e0bca 14 if (m_activeDataBlock != Invalid) {
leihen 0:4873b21e0bca 15 // The actual data block had been detected already, so write into the data block
leihen 0:4873b21e0bca 16 m_Buffer[m_actualPos++] = c;
leihen 0:4873b21e0bca 17 // Build checksum on the fly
leihen 0:4873b21e0bca 18 m_checksum += c;
leihen 0:4873b21e0bca 19 // Now check if all bytes have been received already
leihen 0:4873b21e0bca 20 if (m_activeDataBlock == ParadigmaMonitorDataset1) {
leihen 0:4873b21e0bca 21 // for datablock 1
leihen 0:4873b21e0bca 22 nLen = sizeof(m_Data1);
leihen 0:4873b21e0bca 23 if (nLen == m_actualPos) {
leihen 0:4873b21e0bca 24 // all bytes received, so reset counter and check if checksum is matching
leihen 0:4873b21e0bca 25 if (m_checksum != 0) {
leihen 0:4873b21e0bca 26 ERR("Data corruption error. Received invalid data ! (checksum is %02x)", m_checksum);
leihen 0:4873b21e0bca 27 } else {
leihen 0:4873b21e0bca 28 memcpy(&m_Data1, m_Buffer, nLen);
leihen 0:4873b21e0bca 29 m_Data1.Aussentemp.adjustEndiness();
leihen 0:4873b21e0bca 30 m_Data1.Warmwassertemp.adjustEndiness();
leihen 0:4873b21e0bca 31 m_Data1.Kesselvorlauf.adjustEndiness();
leihen 0:4873b21e0bca 32 m_Data1.Kesselruecklauf.adjustEndiness();
leihen 0:4873b21e0bca 33 m_Data1.RaumtemperaturHK1.adjustEndiness();
leihen 0:4873b21e0bca 34 m_Data1.RaumtemperaturHK2.adjustEndiness();
leihen 0:4873b21e0bca 35 m_Data1.VorlauftemperaturHK1.adjustEndiness();
leihen 0:4873b21e0bca 36 m_Data1.VorlauftemperaturHK2.adjustEndiness();
leihen 0:4873b21e0bca 37 m_Data1.RuecklauftemperaturHK1.adjustEndiness();
leihen 0:4873b21e0bca 38 m_Data1.RuecklauftemperaturHK2.adjustEndiness();
leihen 0:4873b21e0bca 39 m_Data1.PuffertemperaturOben.adjustEndiness();
leihen 0:4873b21e0bca 40 m_Data1.PuffertemperaturUnten.adjustEndiness();
leihen 0:4873b21e0bca 41 m_Data1.Zirkulationstemperatur.adjustEndiness();
leihen 0:4873b21e0bca 42 INFO("*********************** received new data !");
leihen 0:4873b21e0bca 43 callBack();
leihen 0:4873b21e0bca 44 }
leihen 0:4873b21e0bca 45 invalidateHeader();
leihen 0:4873b21e0bca 46 }
leihen 0:4873b21e0bca 47 } else {
leihen 0:4873b21e0bca 48 // for datablock 2
leihen 0:4873b21e0bca 49 nLen = sizeof(m_Data2);
leihen 0:4873b21e0bca 50 if (nLen == m_actualPos) {
leihen 0:4873b21e0bca 51 // all bytes received, so reset counter and check if checksum is matching
leihen 0:4873b21e0bca 52 if (m_checksum != 0) {
leihen 0:4873b21e0bca 53 ERR("Data corruption error. Received invalid data ! (checksum is %02x)", m_checksum);
leihen 0:4873b21e0bca 54 } else {
leihen 0:4873b21e0bca 55 memcpy(&m_Data2, m_Buffer, nLen);
leihen 0:4873b21e0bca 56 m_Data2.RaumsollHK1.adjustEndiness();
leihen 0:4873b21e0bca 57 m_Data2.RaumsollHK2.adjustEndiness();
leihen 0:4873b21e0bca 58 m_Data2.VorlaufsollHK1.adjustEndiness();
leihen 0:4873b21e0bca 59 m_Data2.VorlaufsollHK2.adjustEndiness();
leihen 0:4873b21e0bca 60 m_Data2.Warmwassersolltemp.adjustEndiness();
leihen 0:4873b21e0bca 61 m_Data2.Puffersolltemp.adjustEndiness();
leihen 0:4873b21e0bca 62 m_Data2.BetriebsstundenKessel.adjustEndiness();
leihen 0:4873b21e0bca 63 m_Data2.AnzahlKesselstarts.adjustEndiness();
leihen 0:4873b21e0bca 64 m_Data2.StoercodeKessel.adjustEndiness();
leihen 0:4873b21e0bca 65 INFO("*********************** received new data !");
leihen 0:4873b21e0bca 66 callBack();
leihen 0:4873b21e0bca 67 }
leihen 0:4873b21e0bca 68 invalidateHeader();
leihen 0:4873b21e0bca 69 }
leihen 0:4873b21e0bca 70 }
leihen 0:4873b21e0bca 71 } else {
leihen 0:4873b21e0bca 72 // Still trying to detect a valid data block, check to see if a valid address-part is here
leihen 0:4873b21e0bca 73 switch (m_actualPos) {
leihen 0:4873b21e0bca 74 case 0 : // block type
leihen 0:4873b21e0bca 75 if ( (c== ParadigmaParameters) || (c== ParadigmaVariables)) {
leihen 0:4873b21e0bca 76 m_Header.block_type = (ParadigmaBlockType_t)c;
leihen 0:4873b21e0bca 77 m_actualPos++;
leihen 0:4873b21e0bca 78 m_checksum = c;
leihen 0:4873b21e0bca 79 INFO("Block start !\n");
leihen 0:4873b21e0bca 80 }
leihen 0:4873b21e0bca 81 break;
leihen 0:4873b21e0bca 82
leihen 0:4873b21e0bca 83 case 1 : // length
leihen 0:4873b21e0bca 84 m_Header.block_length = c;
leihen 0:4873b21e0bca 85 m_actualPos++;
leihen 0:4873b21e0bca 86 m_checksum += c;
leihen 0:4873b21e0bca 87 INFO("Block len !\n");
leihen 0:4873b21e0bca 88 break;
leihen 0:4873b21e0bca 89
leihen 0:4873b21e0bca 90 case 2 : // Message ID
leihen 0:4873b21e0bca 91 if ( c == ParadigmaMessage ) {
leihen 0:4873b21e0bca 92 m_Header.message_id = (ParadigmaMessageID_t)c;
leihen 0:4873b21e0bca 93 m_actualPos++;
leihen 0:4873b21e0bca 94 m_checksum += c;
leihen 0:4873b21e0bca 95 } else {
leihen 0:4873b21e0bca 96 invalidateHeader();
leihen 0:4873b21e0bca 97 INFO("Rejected due to incorrect Message ID %d\n", c);
leihen 0:4873b21e0bca 98 }
leihen 0:4873b21e0bca 99 break;
leihen 0:4873b21e0bca 100
leihen 0:4873b21e0bca 101 case 3 : //
leihen 0:4873b21e0bca 102 if ( (c == ParadigmaMonitorDataset1) || (c == ParadigmaMonitorDataset2)) {
leihen 0:4873b21e0bca 103 m_Header.dataset_type = (ParadigmaDatasetType_t)c;
leihen 0:4873b21e0bca 104 m_actualPos = 0;
leihen 0:4873b21e0bca 105 m_checksum += c;
leihen 0:4873b21e0bca 106 m_activeDataBlock = (ParadigmaDatasetType_t)c;
leihen 0:4873b21e0bca 107 INFO("Dataset Number !\n");
leihen 0:4873b21e0bca 108 } else {
leihen 0:4873b21e0bca 109 invalidateHeader();
leihen 0:4873b21e0bca 110 INFO("Rejected due to incorrect Dataset number %d\n", c);
leihen 0:4873b21e0bca 111 }
leihen 0:4873b21e0bca 112 break;
leihen 0:4873b21e0bca 113
leihen 0:4873b21e0bca 114 default:
leihen 0:4873b21e0bca 115 invalidateHeader();
leihen 0:4873b21e0bca 116 break;
leihen 0:4873b21e0bca 117 }
leihen 0:4873b21e0bca 118 }
leihen 0:4873b21e0bca 119 return *this;
leihen 0:4873b21e0bca 120 }
leihen 0:4873b21e0bca 121
leihen 0:4873b21e0bca 122 /** Function will reset all header and actual position information so that search for valid header
leihen 0:4873b21e0bca 123 * will be reset and starting from beginning with receival of next character.
leihen 0:4873b21e0bca 124 *
leihen 0:4873b21e0bca 125 * Will have to clearup the header itsself and the checksum. Also the actual data block information
leihen 0:4873b21e0bca 126 * needs to be invalidated. Actual position will also be reset
leihen 0:4873b21e0bca 127 */
leihen 0:4873b21e0bca 128 void ParadigmaMonitorData::invalidateHeader()
leihen 0:4873b21e0bca 129 {
leihen 0:4873b21e0bca 130 // Invalidate Header information
leihen 0:4873b21e0bca 131 memset(&m_Header, 0, sizeof(m_Header));
leihen 0:4873b21e0bca 132 // Set active data block information to invalid
leihen 0:4873b21e0bca 133 m_activeDataBlock = (ParadigmaDatasetType_t)Invalid;
leihen 0:4873b21e0bca 134 // Reset actual position with in Buffer so that next char starts from beginning
leihen 0:4873b21e0bca 135 m_actualPos = 0;
leihen 0:4873b21e0bca 136 // Reset the checksum, because it will be calculated on the fly.
leihen 0:4873b21e0bca 137 m_checksum = 0;
leihen 0:4873b21e0bca 138 }
leihen 0:4873b21e0bca 139
leihen 0:4873b21e0bca 140 /** Function will let user select which temperature to retrieve */
leihen 0:4873b21e0bca 141 ParadigmaTemperature ParadigmaMonitorData::getTemperature(ParadigmaTemperatureSelector_t sel)
leihen 0:4873b21e0bca 142 {
leihen 0:4873b21e0bca 143 ParadigmaTemperature temp;
leihen 0:4873b21e0bca 144 switch(sel) {
leihen 0:4873b21e0bca 145 // Temperatures from Monitor Data 1
leihen 0:4873b21e0bca 146 case T_aussen : temp = m_Data1.Aussentemp; break;
leihen 0:4873b21e0bca 147 case T_warm_wasser : temp = m_Data1.Warmwassertemp; break;
leihen 0:4873b21e0bca 148 case T_kessel_vorlauf : temp = m_Data1.Kesselvorlauf; break;
leihen 0:4873b21e0bca 149 case T_kessel_ruecklauf : temp = m_Data1.Kesselruecklauf; break;
leihen 0:4873b21e0bca 150 case T_HK1_raum : temp = m_Data1.RaumtemperaturHK1; break;
leihen 0:4873b21e0bca 151 case T_HK2_raum : temp = m_Data1.RaumtemperaturHK2; break;
leihen 0:4873b21e0bca 152 case T_HK1_vorlauf : temp = m_Data1.VorlauftemperaturHK1; break;
leihen 0:4873b21e0bca 153 case T_HK2_vorlauf : temp = m_Data1.VorlauftemperaturHK2; break;
leihen 0:4873b21e0bca 154 case T_HK1_ruecklauf : temp = m_Data1.RuecklauftemperaturHK1; break;
leihen 0:4873b21e0bca 155 case T_HK2_ruecklauf : temp = m_Data1.RuecklauftemperaturHK2; break;
leihen 0:4873b21e0bca 156 case T_puffer_oben : temp = m_Data1.PuffertemperaturOben; break;
leihen 0:4873b21e0bca 157 case T_puffer_unten : temp = m_Data1.PuffertemperaturUnten; break;
leihen 0:4873b21e0bca 158 case T_zirkulation : temp = m_Data1.Zirkulationstemperatur; break;
leihen 0:4873b21e0bca 159
leihen 0:4873b21e0bca 160 // Temperatures form Monitor Data 2
leihen 0:4873b21e0bca 161 case T_HK1_raum_soll : temp = m_Data2.RaumsollHK1; break;
leihen 0:4873b21e0bca 162 case T_HK2_raum_soll : temp = m_Data2.RaumsollHK2; break;
leihen 0:4873b21e0bca 163 case T_HK1_vorlauf_soll : temp = m_Data2.VorlaufsollHK1; break;
leihen 0:4873b21e0bca 164 case T_HK2_vorlauf_soll : temp = m_Data2.VorlaufsollHK2; break;
leihen 0:4873b21e0bca 165 case T_warm_wasser_soll : temp = m_Data2.Warmwassersolltemp; break;
leihen 0:4873b21e0bca 166 case T_puffer_soll : temp = m_Data2.Puffersolltemp; break;
leihen 0:4873b21e0bca 167
leihen 0:4873b21e0bca 168 default: // Invalid selecion !
leihen 0:4873b21e0bca 169 ERR("**** An unknown selection for the temperature was made !");
leihen 0:4873b21e0bca 170 break;
leihen 0:4873b21e0bca 171 }
leihen 0:4873b21e0bca 172
leihen 0:4873b21e0bca 173 return temp;
leihen 0:4873b21e0bca 174 }