Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
gert_lauritsen
Date:
Tue Jul 09 09:54:41 2019 +0000
Branch:
MbedBMAGThrRev
Revision:
64:06b9b8ffd5a6
Parent:
63:168f5498a3c5
dataline version to 4 and fw til 1.0.0.7

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