Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Fri Feb 15 12:53:30 2019 +0000
Branch:
MbedBMAGThrRev
Revision:
55:06c5f76e1a8c
Parent:
51:dbd8e6c2211b
Child:
59:48484125b507
almost at FW version 1.0.0.6

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