Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Wed May 31 07:02:02 2017 +0000
Revision:
24:099df3fa2b13
Parent:
23:2e914b705b99
Child:
25:57f9e3273979
Rettelser af SPS klasse til korrekt crc, tilf?jelse af metadata i strengen mm.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MAA 0:b3313c5ffca3 1 #include "SPS.h"
MAA 0:b3313c5ffca3 2
MAA 19:5d25cffef662 3 //! SPS, class default constructor
MAA 19:5d25cffef662 4 /*!
MAA 19:5d25cffef662 5 Initializing different class member values, creating a header string.
MAA 19:5d25cffef662 6 */
MAA 0:b3313c5ffca3 7 SPS::SPS(){
MAA 2:39c4a85dc2a4 8
MAA 6:6d1683c8b26b 9 fileNameString = "";
MAA 2:39c4a85dc2a4 10 currentString = "";
MAA 2:39c4a85dc2a4 11 currentErrString = "";
MAA 6:6d1683c8b26b 12 lastString = "";
MAA 24:099df3fa2b13 13 headerString = "";
MAA 5:11782a2008c2 14 crc_tab16_init = 0;
MAA 5:11782a2008c2 15 errStatus = true;
MAA 2:39c4a85dc2a4 16
MAA 2:39c4a85dc2a4 17 };
MAA 2:39c4a85dc2a4 18
MAA 19:5d25cffef662 19
MAA 19:5d25cffef662 20 //! UpdateCurrentString, sps string creation method, taking data and info as parameters.
MAA 19:5d25cffef662 21 /*!
MAA 19:5d25cffef662 22
MAA 19:5d25cffef662 23 Generates an sps string containing everything needed in a BMAG sps string including crc, brackets etc.
MAA 19:5d25cffef662 24
MAA 19:5d25cffef662 25 \param tag: string containing the tag for the sps logging unit eg. "BMAG"
MAA 19:5d25cffef662 26 \param identifier_id: string containing the identifier id of the unit.
MAA 19:5d25cffef662 27 \param group_id: string containing the group id of the unit.
MAA 19:5d25cffef662 28 \param date: string containing the date in the format "YYYY/MM/DD"
MAA 19:5d25cffef662 29 \param time: string containing the current time in format "HH:MM:SS.FFF"
MAA 19:5d25cffef662 30 \param ZZZ: string containing "ZZZ" :)
MAA 23:2e914b705b99 31 \param encoding: string containing encoding as described in the *.sps documentation
MAA 19:5d25cffef662 32 \param source_id: string containing the source id of the unit eg. "0000"
MAA 19:5d25cffef662 33 \param interpreter_id: string containing the interpreter id of the unit eg. "00"
MAA 19:5d25cffef662 34 \param data_line_version: string containing data line version as described in the *.sps documentation, eg. "01"
MAA 19:5d25cffef662 35 \param source_firmware_version: string containing the firmware version of the unit eg. "1.2"
MAA 19:5d25cffef662 36 \param barcode: string containing the barcode of the unit, eg. "12345"
MAA 19:5d25cffef662 37 \param latitude: string containing the latitude of the unit in decimal degrees. For further info read the *.sps documentation.
MAA 19:5d25cffef662 38 \param longitude: string containing the longitude of the unit in decimal degrees. For further info read the *.sps documentation.
MAA 19:5d25cffef662 39 \param gpsFixFlag: bool containing the gps fix status, 1 if gps fix is present, else 0.
MAA 19:5d25cffef662 40 \param batteryvoltage: string containing the battery voltage of the units battery pack, eg. "14.2"
MAA 19:5d25cffef662 41 \param mag_time: string containing the last timestamp received from GSM-19 device eg. "000048.0"
MAA 19:5d25cffef662 42 \param mag_nt: string containing the last mag measurement in nT eg. "036418.77"
MAA 19:5d25cffef662 43 \param mag_sq: string containing info about the measurement quality of the last mag measurement eg. "99"
MAA 19:5d25cffef662 44
MAA 19:5d25cffef662 45 */
MAA 23:2e914b705b99 46 void SPS::UpdateCurrentString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string encoding, string source_id, string interpreter_id, string data_line_version, string source_firmware_version, string interpreter_firmware_version, string barcode, string latitude, string longitude, bool gpsFixFlag, string batteryvoltage, string mag_time, string mag_nt, string mag_sq, Serial * dbg){
MAA 2:39c4a85dc2a4 47
MAA 21:325cb82f1838 48 this->currentString = "";
MAA 21:325cb82f1838 49 this->currentString.resize(256);
MAA 21:325cb82f1838 50
MAA 21:325cb82f1838 51 int strLength = 0;
MAA 5:11782a2008c2 52 char checkSum[5];
MAA 5:11782a2008c2 53 memset(checkSum,'\0',5);
MAA 5:11782a2008c2 54 unsigned short chkSum = 0;
MAA 0:b3313c5ffca3 55
MAA 5:11782a2008c2 56 addToCurrentString(LINESTART);
MAA 5:11782a2008c2 57 addToCurrentString(tag);
MAA 5:11782a2008c2 58 addToCurrentString(SPACE);
MAA 5:11782a2008c2 59 addToCurrentString(identifier_id);
MAA 5:11782a2008c2 60 addToCurrentString(SPACE);
MAA 5:11782a2008c2 61 addToCurrentString(group_id);
MAA 5:11782a2008c2 62 addToCurrentString(SPACE);
MAA 5:11782a2008c2 63 addToCurrentString(date);
MAA 5:11782a2008c2 64 addToCurrentString(SPACE);
MAA 5:11782a2008c2 65 addToCurrentString(time);
MAA 5:11782a2008c2 66 addToCurrentString(SPACE);
MAA 5:11782a2008c2 67 addToCurrentString("ZZZ");
MAA 5:11782a2008c2 68 addToCurrentString(SPACE);
MAA 5:11782a2008c2 69 addToCurrentString(HEADEREND);
MAA 5:11782a2008c2 70 addToCurrentString(SPACE);
MAA 5:11782a2008c2 71 addToCurrentString(source_id);
MAA 5:11782a2008c2 72 addToCurrentString(SPACE);
MAA 5:11782a2008c2 73 addToCurrentString(interpreter_id);
MAA 5:11782a2008c2 74 addToCurrentString(SPACE);
MAA 5:11782a2008c2 75 addToCurrentString(data_line_version);
MAA 5:11782a2008c2 76 addToCurrentString(SPACE);
MAA 23:2e914b705b99 77 addToCurrentString(encoding);
MAA 23:2e914b705b99 78 addToCurrentString(SPACE);
MAA 5:11782a2008c2 79 addToCurrentString(source_firmware_version);
MAA 5:11782a2008c2 80 addToCurrentString(SPACE);
MAA 5:11782a2008c2 81 addToCurrentString(interpreter_firmware_version);
MAA 5:11782a2008c2 82 addToCurrentString(SPACE);
MAA 5:11782a2008c2 83 addToCurrentString(HEADEREND);
MAA 5:11782a2008c2 84 addToCurrentString(SPACE);
MAA 8:d6287c33b54a 85 addToCurrentString(barcode);
MAA 8:d6287c33b54a 86 addToCurrentString(SPACE);
MAA 24:099df3fa2b13 87 if(gpsFixFlag){
MAA 24:099df3fa2b13 88 addToCurrentString(latitude);
MAA 24:099df3fa2b13 89 }
MAA 24:099df3fa2b13 90 if(!gpsFixFlag){
MAA 24:099df3fa2b13 91 addToCurrentString("NaN");
MAA 24:099df3fa2b13 92 }
MAA 5:11782a2008c2 93 addToCurrentString(SPACE);
MAA 24:099df3fa2b13 94 if(gpsFixFlag){
MAA 24:099df3fa2b13 95 addToCurrentString(longitude);
MAA 24:099df3fa2b13 96 }
MAA 24:099df3fa2b13 97 if(!gpsFixFlag){
MAA 24:099df3fa2b13 98 addToCurrentString("NaN");
MAA 24:099df3fa2b13 99 }
MAA 24:099df3fa2b13 100 addToCurrentString(SPACE);
MAA 5:11782a2008c2 101 if(gpsFixFlag){
MAA 5:11782a2008c2 102 addToCurrentString('1');
MAA 5:11782a2008c2 103 }
MAA 5:11782a2008c2 104 if(!gpsFixFlag){
MAA 5:11782a2008c2 105 addToCurrentString('0');
MAA 5:11782a2008c2 106 }
MAA 5:11782a2008c2 107 addToCurrentString(SPACE);
MAA 8:d6287c33b54a 108 addToCurrentString(batteryvoltage);
MAA 8:d6287c33b54a 109 addToCurrentString(SPACE);
MAA 5:11782a2008c2 110 addToCurrentString(mag_time);
MAA 5:11782a2008c2 111 addToCurrentString(SPACE);
MAA 5:11782a2008c2 112 addToCurrentString(mag_nt);
MAA 5:11782a2008c2 113 addToCurrentString(SPACE);
MAA 5:11782a2008c2 114 addToCurrentString(mag_sq);
MAA 5:11782a2008c2 115
MAA 21:325cb82f1838 116
MAA 21:325cb82f1838 117 strLength = strlen(this->currentString.c_str());
MAA 21:325cb82f1838 118
MAA 2:39c4a85dc2a4 119 //calculate checksum
MAA 21:325cb82f1838 120 for(int i = 0; i < strLength; i++){
MAA 21:325cb82f1838 121 if(this->currentString[i] != '>'){
MAA 5:11782a2008c2 122
MAA 21:325cb82f1838 123 chkSum = update_crc_16(chkSum, this->currentString[i]);
MAA 5:11782a2008c2 124
MAA 5:11782a2008c2 125 }
MAA 5:11782a2008c2 126 }
MAA 5:11782a2008c2 127
MAA 6:6d1683c8b26b 128 sprintf(checkSum, "%04X", chkSum);
MAA 21:325cb82f1838 129
MAA 2:39c4a85dc2a4 130 //append rest of string
MAA 5:11782a2008c2 131 addToCurrentString(SPACE);
MAA 5:11782a2008c2 132 addToCurrentString(checkSum);
MAA 8:d6287c33b54a 133 addToCurrentString(LINESTOP);
MAA 2:39c4a85dc2a4 134 };
MAA 2:39c4a85dc2a4 135
MAA 24:099df3fa2b13 136 //Updates current header string
MAA 24:099df3fa2b13 137 void SPS::UpdateHeaderString(string barcode, string identifier_id, string group_id, string ZZZ, string encoding,string source_id, string interpreter_id, string data_line_version, string source_firmware_version, string interpreter_firmware_version){
MAA 19:5d25cffef662 138
MAA 24:099df3fa2b13 139 this->headerString = "";
MAA 24:099df3fa2b13 140 this->headerString.resize(256);
MAA 24:099df3fa2b13 141
MAA 24:099df3fa2b13 142 int strLength = 0;
MAA 24:099df3fa2b13 143 char checkSum[5];
MAA 24:099df3fa2b13 144 memset(checkSum,'\0',5);
MAA 24:099df3fa2b13 145 unsigned short chkSum = 0;
MAA 24:099df3fa2b13 146
MAA 24:099df3fa2b13 147 addToCurrentHeaderString(LINESTART);
MAA 24:099df3fa2b13 148 addToCurrentHeaderString("RMRK");
MAA 24:099df3fa2b13 149 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 150 addToCurrentHeaderString(identifier_id);
MAA 24:099df3fa2b13 151 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 152 addToCurrentHeaderString(group_id);
MAA 24:099df3fa2b13 153 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 154 addToCurrentHeaderString("0000/00/00");
MAA 24:099df3fa2b13 155 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 156 addToCurrentHeaderString("00:00:00.000");
MAA 24:099df3fa2b13 157 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 158 addToCurrentHeaderString("ZZZ");
MAA 24:099df3fa2b13 159 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 160 addToCurrentHeaderString(HEADEREND);
MAA 24:099df3fa2b13 161 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 162 addToCurrentHeaderString(source_id);
MAA 24:099df3fa2b13 163 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 164 addToCurrentHeaderString(interpreter_id);
MAA 24:099df3fa2b13 165 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 166 addToCurrentHeaderString("01");
MAA 24:099df3fa2b13 167 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 168 addToCurrentHeaderString(encoding);
MAA 24:099df3fa2b13 169 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 170 addToCurrentHeaderString(source_firmware_version);
MAA 24:099df3fa2b13 171 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 172 addToCurrentHeaderString(interpreter_firmware_version);
MAA 24:099df3fa2b13 173 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 174 addToCurrentHeaderString(HEADEREND);
MAA 24:099df3fa2b13 175 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 176 addToCurrentHeaderString("Barcode");
MAA 24:099df3fa2b13 177 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 178 addToCurrentHeaderString("Latitude");
MAA 24:099df3fa2b13 179 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 180 addToCurrentHeaderString("Longitude");
MAA 24:099df3fa2b13 181 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 182 addToCurrentHeaderString("gpsFixFlag");
MAA 24:099df3fa2b13 183 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 184 addToCurrentHeaderString("batteryVoltage");
MAA 24:099df3fa2b13 185 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 186 addToCurrentHeaderString("mag_time");
MAA 24:099df3fa2b13 187 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 188 addToCurrentHeaderString("mag_value");
MAA 24:099df3fa2b13 189 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 190 addToCurrentHeaderString("mag_quality");
MAA 24:099df3fa2b13 191
MAA 24:099df3fa2b13 192
MAA 24:099df3fa2b13 193 strLength = strlen(this->headerString.c_str());
MAA 24:099df3fa2b13 194
MAA 24:099df3fa2b13 195 //calculate checksum
MAA 24:099df3fa2b13 196 for(int i = 0; i < strLength; i++){
MAA 24:099df3fa2b13 197 if(this->headerString[i] != '>'){
MAA 24:099df3fa2b13 198
MAA 24:099df3fa2b13 199 chkSum = update_crc_16(chkSum, this->headerString[i]);
MAA 24:099df3fa2b13 200
MAA 24:099df3fa2b13 201 }
MAA 24:099df3fa2b13 202 }
MAA 24:099df3fa2b13 203
MAA 24:099df3fa2b13 204 sprintf(checkSum, "%04X", chkSum);
MAA 24:099df3fa2b13 205
MAA 24:099df3fa2b13 206 //append rest of string
MAA 24:099df3fa2b13 207 addToCurrentHeaderString(SPACE);
MAA 24:099df3fa2b13 208 addToCurrentHeaderString(checkSum);
MAA 24:099df3fa2b13 209 addToCurrentHeaderString(LINESTOP);
MAA 24:099df3fa2b13 210 }
MAA 19:5d25cffef662 211
MAA 19:5d25cffef662 212 //! UpdateCurrentErrString, sps ERR string creation method, taking data and info as parameters.
MAA 19:5d25cffef662 213 /*!
MAA 19:5d25cffef662 214
MAA 19:5d25cffef662 215 Generates the current sps ERR string containing everything needed in a BMAG sps string including crc, brackets etc.
MAA 19:5d25cffef662 216
MAA 19:5d25cffef662 217 \param tag: string containing the tag for the sps logging unit eg. "BMAG"
MAA 19:5d25cffef662 218 \param identifier_id: string containing the identifier id of the unit.
MAA 19:5d25cffef662 219 \param group_id: string containing the group id of the unit.
MAA 19:5d25cffef662 220 \param date: string containing the date in the format "YYYY/MM/DD"
MAA 19:5d25cffef662 221 \param time: string containing the current time in format "HH:MM:SS.FFF"
MAA 19:5d25cffef662 222 \param ZZZ: string containing "ZZZ" :)
MAA 23:2e914b705b99 223 \param encoding: string containing encoding as described in the *.sps documentation
MAA 19:5d25cffef662 224 \param source_id: string containing the source id of the unit eg. "0000"
MAA 19:5d25cffef662 225 \param interpreter_id: string containing the interpreter id of the unit eg. "00"
MAA 19:5d25cffef662 226 \param data_line_version: string containing data line version as described in the *.sps documentation, eg. "01"
MAA 19:5d25cffef662 227 \param source_firmware_version: string containing the firmware version of the unit eg. "1.2"
MAA 19:5d25cffef662 228 \param barcode: string containing the barcode of the unit, eg. "12345"
MAA 19:5d25cffef662 229 \param latitude: string containing the latitude of the unit in decimal degrees. For further info read the *.sps documentation.
MAA 19:5d25cffef662 230 \param longitude: string containing the longitude of the unit in decimal degrees. For further info read the *.sps documentation.
MAA 19:5d25cffef662 231 \param gpsFixFlag: bool containing the gps fix status, 1 if gps fix is present, else 0.
MAA 19:5d25cffef662 232 \param mag_time: string containing the last timestamp received from GSM-19 device eg. "000048.0"
MAA 19:5d25cffef662 233 \param mag_nt: string containing the last mag measurement in nT eg. "036418.77"
MAA 19:5d25cffef662 234 \param mag_sq: string containing info about the measurement quality of the last mag measurement eg. "99"
MAA 19:5d25cffef662 235
MAA 19:5d25cffef662 236 */
MAA 23:2e914b705b99 237 void SPS::UpdateCurrentErrString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string encoding, string source_id, string interpreter_id, string data_line_version, string source_firmware_version, string interpreter_firmware_version, string latitude, string longitude, bool gpsFixFlag, string mag_time, string mag_nt, string mag_sq, Serial * dbg){
MAA 7:872984a67d5b 238
MAA 21:325cb82f1838 239 this->currentErrString = "";
MAA 21:325cb82f1838 240 this->currentErrString.resize(256);
MAA 7:872984a67d5b 241 char checkSum[5];
MAA 7:872984a67d5b 242 memset(checkSum,'\0',5);
MAA 7:872984a67d5b 243 unsigned short chkSum = 0;
MAA 24:099df3fa2b13 244 int strLength = 0;
MAA 7:872984a67d5b 245
MAA 7:872984a67d5b 246 addToCurrentErrString(LINESTART);
MAA 7:872984a67d5b 247 addToCurrentErrString(tag);
MAA 7:872984a67d5b 248 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 249 addToCurrentErrString(identifier_id);
MAA 7:872984a67d5b 250 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 251 addToCurrentErrString(group_id);
MAA 7:872984a67d5b 252 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 253 addToCurrentErrString(date);
MAA 7:872984a67d5b 254 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 255 addToCurrentErrString(time);
MAA 7:872984a67d5b 256 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 257 addToCurrentErrString("NOC");
MAA 24:099df3fa2b13 258 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 259 addToCurrentErrString(HEADEREND);
MAA 24:099df3fa2b13 260 addToCurrentErrString(source_id);
MAA 24:099df3fa2b13 261 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 262 addToCurrentErrString(interpreter_id);
MAA 24:099df3fa2b13 263 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 264 addToCurrentErrString("01");
MAA 24:099df3fa2b13 265 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 266 addToCurrentErrString(encoding);
MAA 24:099df3fa2b13 267 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 268 addToCurrentErrString(source_firmware_version);
MAA 24:099df3fa2b13 269 addToCurrentErrString(SPACE);
MAA 24:099df3fa2b13 270 addToCurrentErrString(interpreter_firmware_version);
MAA 24:099df3fa2b13 271 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 272 addToCurrentErrString(HEADEREND);
MAA 7:872984a67d5b 273 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 274 addToCurrentErrString("BMAG");
MAA 7:872984a67d5b 275 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 276 addToCurrentErrString("C02");
MAA 7:872984a67d5b 277 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 278 addToCurrentErrString("C03");
MAA 7:872984a67d5b 279
MAA 24:099df3fa2b13 280 strLength = strlen(this->currentErrString.c_str());
MAA 24:099df3fa2b13 281
MAA 7:872984a67d5b 282 //calculate checksum
MAA 24:099df3fa2b13 283 for(int i = 0; i < strLength; i++){
MAA 24:099df3fa2b13 284 if(this->currentErrString[i] != '>'){
MAA 7:872984a67d5b 285
MAA 21:325cb82f1838 286 chkSum = update_crc_16(chkSum, this->currentErrString[i]);
MAA 7:872984a67d5b 287
MAA 7:872984a67d5b 288 }
MAA 7:872984a67d5b 289 }
MAA 21:325cb82f1838 290
MAA 7:872984a67d5b 291 sprintf(checkSum, "%04X", chkSum);
MAA 7:872984a67d5b 292
MAA 7:872984a67d5b 293 //append rest of string
MAA 7:872984a67d5b 294 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 295 addToCurrentErrString(checkSum);
MAA 8:d6287c33b54a 296 addToCurrentErrString(LINESTOP);
MAA 7:872984a67d5b 297 };
MAA 7:872984a67d5b 298
MAA 19:5d25cffef662 299 //! init_crc16_tab, creates a crc tab.
MAA 19:5d25cffef662 300 /*!
MAA 19:5d25cffef662 301 Populates a crc array for later use
MAA 19:5d25cffef662 302 */
MAA 4:c70ef089a3fd 303 void SPS::init_crc16_tab()
MAA 4:c70ef089a3fd 304 {
MAA 4:c70ef089a3fd 305 int i, j;
MAA 4:c70ef089a3fd 306 unsigned short crc, c;
MAA 4:c70ef089a3fd 307
MAA 4:c70ef089a3fd 308 for (i = 0; i < 256; i++)
MAA 4:c70ef089a3fd 309 {
MAA 4:c70ef089a3fd 310 crc = 0;
MAA 4:c70ef089a3fd 311 c = (unsigned short) i;
MAA 4:c70ef089a3fd 312
MAA 4:c70ef089a3fd 313 for (j = 0; j < 8; j++)
MAA 4:c70ef089a3fd 314 {
MAA 4:c70ef089a3fd 315 if ((crc ^ c) & 0x0001)
MAA 4:c70ef089a3fd 316 crc = (crc >> 1) ^ P_16;
MAA 4:c70ef089a3fd 317 else
MAA 4:c70ef089a3fd 318 crc = crc >> 1;
MAA 4:c70ef089a3fd 319
MAA 4:c70ef089a3fd 320 c = c >> 1;
MAA 4:c70ef089a3fd 321 }
MAA 4:c70ef089a3fd 322 crc_tab16[i] = crc;
MAA 4:c70ef089a3fd 323 }
MAA 4:c70ef089a3fd 324 crc_tab16_init = 1;
MAA 4:c70ef089a3fd 325 };
MAA 4:c70ef089a3fd 326
MAA 4:c70ef089a3fd 327
MAA 19:5d25cffef662 328
MAA 19:5d25cffef662 329 //! update_crc_16, updates crc tab.
MAA 19:5d25cffef662 330 /*!
MAA 20:73fa202c73db 331 \param crc: the crc currently getting calculated
MAA 20:73fa202c73db 332 \param c: next character to be part of crc
MAA 19:5d25cffef662 333 \return returns crc value
MAA 19:5d25cffef662 334 */
MAA 4:c70ef089a3fd 335 unsigned short SPS::update_crc_16(unsigned short crc, char c)
MAA 4:c70ef089a3fd 336 {
MAA 4:c70ef089a3fd 337 unsigned short tmp, short_c;
MAA 4:c70ef089a3fd 338
MAA 4:c70ef089a3fd 339 short_c = 0x00ff & (unsigned short) c;
MAA 4:c70ef089a3fd 340
MAA 4:c70ef089a3fd 341 if (!crc_tab16_init)
MAA 4:c70ef089a3fd 342 init_crc16_tab();
MAA 21:325cb82f1838 343
MAA 4:c70ef089a3fd 344
MAA 4:c70ef089a3fd 345 tmp = crc ^ short_c;
MAA 4:c70ef089a3fd 346 crc = (crc >> 8) ^ crc_tab16[tmp & 0xff];
MAA 4:c70ef089a3fd 347
MAA 4:c70ef089a3fd 348 return crc;
MAA 4:c70ef089a3fd 349 };
MAA 5:11782a2008c2 350
MAA 5:11782a2008c2 351
MAA 20:73fa202c73db 352
MAA 20:73fa202c73db 353 //! getCurrentString, returns the current sps data string
MAA 20:73fa202c73db 354 /*!
MAA 20:73fa202c73db 355 \return returns current sps data string
MAA 20:73fa202c73db 356 */
MAA 5:11782a2008c2 357 string SPS::getCurrentString(void){
MAA 5:11782a2008c2 358 return this->currentString;
MAA 5:11782a2008c2 359 };
MAA 5:11782a2008c2 360
MAA 5:11782a2008c2 361
MAA 20:73fa202c73db 362 //! getErrStatus, returns the current error status flag
MAA 20:73fa202c73db 363 /*!
MAA 20:73fa202c73db 364 \return returns the current error status flag (bool)
MAA 20:73fa202c73db 365 */
MAA 5:11782a2008c2 366 bool SPS::getErrStatus(void){
MAA 5:11782a2008c2 367 return this->errStatus;
MAA 5:11782a2008c2 368 };
MAA 5:11782a2008c2 369
MAA 20:73fa202c73db 370 //! setErrStatus, sets error status flag
MAA 20:73fa202c73db 371 /*!
MAA 20:73fa202c73db 372 \param status: boolean value assigned to errorStatus
MAA 20:73fa202c73db 373 */
MAA 5:11782a2008c2 374 void SPS::setErrStatus(bool status){
MAA 5:11782a2008c2 375 this->errStatus = status;
MAA 5:11782a2008c2 376 };
MAA 5:11782a2008c2 377
MAA 20:73fa202c73db 378 //! getHeaderString, getter method, returning header string for *.sps file
MAA 20:73fa202c73db 379 /*!
MAA 20:73fa202c73db 380 \return returns the header string for the *.sps file
MAA 20:73fa202c73db 381 */
MAA 5:11782a2008c2 382 string SPS::getHeaderString(void){
MAA 5:11782a2008c2 383 return this->headerString;
MAA 5:11782a2008c2 384 };
MAA 5:11782a2008c2 385
MAA 5:11782a2008c2 386 //add data to current string
MAA 20:73fa202c73db 387 //! addToCurrentString, appends string of data to the sps string currently being manipulated.
MAA 20:73fa202c73db 388 /*!
MAA 20:73fa202c73db 389 \param data: string containing data
MAA 20:73fa202c73db 390 */
MAA 5:11782a2008c2 391 void SPS::addToCurrentString(string data){
MAA 21:325cb82f1838 392 int currentStartIndex = strlen(this->currentString.c_str());
MAA 5:11782a2008c2 393 char dataStrLen = 0;
MAA 8:d6287c33b54a 394 int index = 0;
MAA 8:d6287c33b54a 395
MAA 5:11782a2008c2 396 dataStrLen = strlen(data.c_str());
MAA 5:11782a2008c2 397
MAA 5:11782a2008c2 398 for(int i = 0; i < dataStrLen; i++){
MAA 8:d6287c33b54a 399
MAA 21:325cb82f1838 400 if((this->currentString[currentStartIndex+i] != '\r') || (this->currentString[currentStartIndex+i] != '\n')){
MAA 8:d6287c33b54a 401
MAA 21:325cb82f1838 402 this->currentString[currentStartIndex+i] = data[index];
MAA 8:d6287c33b54a 403 index += 1;
MAA 8:d6287c33b54a 404
MAA 8:d6287c33b54a 405 }
MAA 8:d6287c33b54a 406
MAA 5:11782a2008c2 407 }
MAA 5:11782a2008c2 408 }
MAA 5:11782a2008c2 409
MAA 20:73fa202c73db 410 //! addToCurrentString, appends char to the sps string currently being manipulated.
MAA 20:73fa202c73db 411 /*!
MAA 20:73fa202c73db 412 \param data: data character
MAA 20:73fa202c73db 413 */
MAA 5:11782a2008c2 414 void SPS::addToCurrentString(char data){
MAA 21:325cb82f1838 415 int currentStartIndex = strlen(this->currentString.c_str());
MAA 21:325cb82f1838 416 this->currentString[currentStartIndex] = data;
MAA 6:6d1683c8b26b 417 };
MAA 6:6d1683c8b26b 418
MAA 24:099df3fa2b13 419
MAA 24:099df3fa2b13 420 void SPS::addToCurrentHeaderString(string data){
MAA 24:099df3fa2b13 421 int currentStartIndex = strlen(this->headerString.c_str());
MAA 24:099df3fa2b13 422 char dataStrLen = 0;
MAA 24:099df3fa2b13 423 int index = 0;
MAA 24:099df3fa2b13 424
MAA 24:099df3fa2b13 425 dataStrLen = strlen(data.c_str());
MAA 24:099df3fa2b13 426
MAA 24:099df3fa2b13 427 for(int i = 0; i < dataStrLen; i++){
MAA 24:099df3fa2b13 428
MAA 24:099df3fa2b13 429 if((this->headerString[currentStartIndex+i] != '\r') || (this->headerString[currentStartIndex+i] != '\n')){
MAA 24:099df3fa2b13 430
MAA 24:099df3fa2b13 431 this->headerString[currentStartIndex+i] = data[index];
MAA 24:099df3fa2b13 432 index += 1;
MAA 24:099df3fa2b13 433
MAA 24:099df3fa2b13 434 }
MAA 24:099df3fa2b13 435
MAA 24:099df3fa2b13 436 }
MAA 24:099df3fa2b13 437 };
MAA 24:099df3fa2b13 438
MAA 24:099df3fa2b13 439
MAA 24:099df3fa2b13 440 void SPS::addToCurrentHeaderString(char data){
MAA 24:099df3fa2b13 441 int currentStartIndex = strlen(this->headerString.c_str());
MAA 24:099df3fa2b13 442 this->headerString[currentStartIndex] = data;
MAA 24:099df3fa2b13 443 };
MAA 24:099df3fa2b13 444
MAA 20:73fa202c73db 445 //! addToCurrentErrString, appends string to the sps err_string currently being manipulated.
MAA 20:73fa202c73db 446 /*!
MAA 20:73fa202c73db 447 \param data: data string
MAA 20:73fa202c73db 448 */
MAA 7:872984a67d5b 449 void SPS::addToCurrentErrString(string data){
MAA 21:325cb82f1838 450 int currentStartIndex = strlen(this->currentErrString.c_str());
MAA 7:872984a67d5b 451 char dataStrLen = 0;
MAA 7:872984a67d5b 452 dataStrLen = strlen(data.c_str());
MAA 7:872984a67d5b 453
MAA 7:872984a67d5b 454 for(int i = 0; i < dataStrLen; i++){
MAA 21:325cb82f1838 455 this->currentErrString[currentStartIndex+i] = data[i];
MAA 7:872984a67d5b 456 }
MAA 7:872984a67d5b 457
MAA 7:872984a67d5b 458 };
MAA 20:73fa202c73db 459
MAA 20:73fa202c73db 460 //! addToCurrentErrString, appends a character to the sps err_string currently being manipulated.
MAA 20:73fa202c73db 461 /*!
MAA 20:73fa202c73db 462 \param data: data char
MAA 20:73fa202c73db 463 */
MAA 7:872984a67d5b 464 void SPS::addToCurrentErrString(char data){
MAA 7:872984a67d5b 465 int currentStartIndex = strlen(currentErrString.c_str());
MAA 7:872984a67d5b 466 currentErrString[currentStartIndex] = data;
MAA 7:872984a67d5b 467
MAA 7:872984a67d5b 468 };
MAA 7:872984a67d5b 469
MAA 20:73fa202c73db 470 //! generateSpsFilename, generates a sps file name, including file postfix, using the current date as input.
MAA 20:73fa202c73db 471 /*!
MAA 20:73fa202c73db 472 \param formattedDate: Date string using a formatted date witht he format: "YYYY/MM/DD"
MAA 20:73fa202c73db 473 */
MAA 6:6d1683c8b26b 474 void SPS::generateSpsFilename(string formattedDate){
MAA 6:6d1683c8b26b 475
MAA 7:872984a67d5b 476 fileNameString.resize(25);
MAA 6:6d1683c8b26b 477
MAA 7:872984a67d5b 478 fileNameString.replace(0, 10, "/usb/BMAG_");
MAA 6:6d1683c8b26b 479
MAA 7:872984a67d5b 480 fileNameString[10] = formattedDate[0];
MAA 7:872984a67d5b 481 fileNameString[11] = formattedDate[1];
MAA 7:872984a67d5b 482 fileNameString[12] = formattedDate[2];
MAA 7:872984a67d5b 483 fileNameString[13] = formattedDate[3];
MAA 7:872984a67d5b 484 fileNameString[14] = '-';
MAA 7:872984a67d5b 485 fileNameString[15] = formattedDate[5];
MAA 7:872984a67d5b 486 fileNameString[16] = formattedDate[6];
MAA 7:872984a67d5b 487 fileNameString[17] = '-';
MAA 7:872984a67d5b 488 fileNameString[18] = formattedDate[8];
MAA 7:872984a67d5b 489 fileNameString[19] = formattedDate[9];
MAA 6:6d1683c8b26b 490
MAA 7:872984a67d5b 491 fileNameString[20] = '.';
MAA 7:872984a67d5b 492 fileNameString[21] = 's';
MAA 7:872984a67d5b 493 fileNameString[22] = 'p';
MAA 7:872984a67d5b 494 fileNameString[23] = 's';
MAA 6:6d1683c8b26b 495
MAA 6:6d1683c8b26b 496 };
MAA 6:6d1683c8b26b 497
MAA 20:73fa202c73db 498 //! getSpsFileName, getter method, returning a *.sps filename based on the formatted date generated using generateSpsFilename(string formattedDate) method.
MAA 20:73fa202c73db 499 /*!
MAA 20:73fa202c73db 500 \return fileNameString returns file name including postfix.
MAA 20:73fa202c73db 501 */
MAA 6:6d1683c8b26b 502 string SPS::getSpsFileName(void){
MAA 6:6d1683c8b26b 503
MAA 6:6d1683c8b26b 504 return this->fileNameString;
MAA 6:6d1683c8b26b 505
MAA 7:872984a67d5b 506 };
MAA 7:872984a67d5b 507
MAA 20:73fa202c73db 508 //! getCurrentErrString, getter method returning current sps error string
MAA 20:73fa202c73db 509 /*!
MAA 20:73fa202c73db 510 \return currentErrString: returns the current sps error string.
MAA 20:73fa202c73db 511 */
MAA 7:872984a67d5b 512 string SPS::getCurrentErrString(void){
MAA 7:872984a67d5b 513 return this->currentErrString;
MAA 5:11782a2008c2 514 };