Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Thu Mar 23 10:11:26 2017 +0000
Revision:
8:d6287c33b54a
Parent:
7:872984a67d5b
Child:
19:5d25cffef662
BMAG klasse fungerende med dataopsamling fra BMAG.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MAA 0:b3313c5ffca3 1 #include "SPS.h"
MAA 0:b3313c5ffca3 2
MAA 0:b3313c5ffca3 3 SPS::SPS(){
MAA 2:39c4a85dc2a4 4
MAA 6:6d1683c8b26b 5 fileNameString = "";
MAA 2:39c4a85dc2a4 6 currentString = "";
MAA 2:39c4a85dc2a4 7 currentErrString = "";
MAA 6:6d1683c8b26b 8 lastString = "";
MAA 8:d6287c33b54a 9 headerString = "/tag identifier_id group_id date time zzz | s1 source_id interpreter_id data_line_version encoding source_firmware_version interpreter_firmware_version | barcode latitude longitude gpsFixFlag batteryvoltage mag_time mag_nt mag_sq checksum";
MAA 5:11782a2008c2 10 crc_tab16_init = 0;
MAA 5:11782a2008c2 11 errStatus = true;
MAA 2:39c4a85dc2a4 12
MAA 2:39c4a85dc2a4 13 };
MAA 2:39c4a85dc2a4 14
MAA 8:d6287c33b54a 15 void SPS::UpdateCurrentString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string s1, 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 16
MAA 2:39c4a85dc2a4 17 currentString = "";
MAA 5:11782a2008c2 18 currentString.resize(256);
MAA 5:11782a2008c2 19 char checkSum[5];
MAA 5:11782a2008c2 20 memset(checkSum,'\0',5);
MAA 5:11782a2008c2 21 unsigned short chkSum = 0;
MAA 0:b3313c5ffca3 22
MAA 5:11782a2008c2 23 addToCurrentString(LINESTART);
MAA 5:11782a2008c2 24 addToCurrentString(tag);
MAA 5:11782a2008c2 25 addToCurrentString(SPACE);
MAA 5:11782a2008c2 26 addToCurrentString(identifier_id);
MAA 5:11782a2008c2 27 addToCurrentString(SPACE);
MAA 5:11782a2008c2 28 addToCurrentString(group_id);
MAA 5:11782a2008c2 29 addToCurrentString(SPACE);
MAA 5:11782a2008c2 30 addToCurrentString(date);
MAA 5:11782a2008c2 31 addToCurrentString(SPACE);
MAA 5:11782a2008c2 32 addToCurrentString(time);
MAA 5:11782a2008c2 33 addToCurrentString(SPACE);
MAA 5:11782a2008c2 34 addToCurrentString("ZZZ");
MAA 5:11782a2008c2 35 addToCurrentString(SPACE);
MAA 5:11782a2008c2 36 addToCurrentString(HEADEREND);
MAA 5:11782a2008c2 37 addToCurrentString(SPACE);
MAA 5:11782a2008c2 38 addToCurrentString(s1);
MAA 5:11782a2008c2 39 addToCurrentString(SPACE);
MAA 5:11782a2008c2 40 addToCurrentString(source_id);
MAA 5:11782a2008c2 41 addToCurrentString(SPACE);
MAA 5:11782a2008c2 42 addToCurrentString(interpreter_id);
MAA 5:11782a2008c2 43 addToCurrentString(SPACE);
MAA 5:11782a2008c2 44 addToCurrentString(data_line_version);
MAA 5:11782a2008c2 45 addToCurrentString(SPACE);
MAA 5:11782a2008c2 46 addToCurrentString(source_firmware_version);
MAA 5:11782a2008c2 47 addToCurrentString(SPACE);
MAA 5:11782a2008c2 48 addToCurrentString(interpreter_firmware_version);
MAA 5:11782a2008c2 49 addToCurrentString(SPACE);
MAA 5:11782a2008c2 50 addToCurrentString(HEADEREND);
MAA 5:11782a2008c2 51 addToCurrentString(SPACE);
MAA 8:d6287c33b54a 52 addToCurrentString(barcode);
MAA 8:d6287c33b54a 53 addToCurrentString(SPACE);
MAA 5:11782a2008c2 54 addToCurrentString(latitude);
MAA 5:11782a2008c2 55 addToCurrentString(SPACE);
MAA 5:11782a2008c2 56 addToCurrentString(longitude);
MAA 5:11782a2008c2 57 addToCurrentString(SPACE);
MAA 5:11782a2008c2 58
MAA 5:11782a2008c2 59 if(gpsFixFlag){
MAA 5:11782a2008c2 60 addToCurrentString('1');
MAA 5:11782a2008c2 61 }
MAA 5:11782a2008c2 62 if(!gpsFixFlag){
MAA 5:11782a2008c2 63 addToCurrentString('0');
MAA 5:11782a2008c2 64 }
MAA 5:11782a2008c2 65
MAA 5:11782a2008c2 66 addToCurrentString(SPACE);
MAA 8:d6287c33b54a 67 addToCurrentString(batteryvoltage);
MAA 8:d6287c33b54a 68 addToCurrentString(SPACE);
MAA 5:11782a2008c2 69 addToCurrentString(mag_time);
MAA 5:11782a2008c2 70 addToCurrentString(SPACE);
MAA 5:11782a2008c2 71 addToCurrentString(mag_nt);
MAA 5:11782a2008c2 72 addToCurrentString(SPACE);
MAA 5:11782a2008c2 73 addToCurrentString(mag_sq);
MAA 5:11782a2008c2 74
MAA 2:39c4a85dc2a4 75 //calculate checksum
MAA 5:11782a2008c2 76 for(int i = 0; i < strlen(currentString.c_str()); i++){
MAA 5:11782a2008c2 77 if(currentString[i] != '>' || currentString[i] != '<'){
MAA 5:11782a2008c2 78
MAA 5:11782a2008c2 79 chkSum = update_crc_16(chkSum, currentString[i]);
MAA 5:11782a2008c2 80
MAA 5:11782a2008c2 81 }
MAA 5:11782a2008c2 82 }
MAA 5:11782a2008c2 83
MAA 6:6d1683c8b26b 84 sprintf(checkSum, "%04X", chkSum);
MAA 2:39c4a85dc2a4 85
MAA 2:39c4a85dc2a4 86 //append rest of string
MAA 5:11782a2008c2 87 addToCurrentString(SPACE);
MAA 5:11782a2008c2 88 addToCurrentString(checkSum);
MAA 8:d6287c33b54a 89 addToCurrentString(LINESTOP);
MAA 2:39c4a85dc2a4 90 };
MAA 2:39c4a85dc2a4 91
MAA 7:872984a67d5b 92 //Updates current ERR string
MAA 7:872984a67d5b 93 void SPS::UpdateCurrentErrString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string s1, 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 94
MAA 7:872984a67d5b 95 currentErrString = "";
MAA 7:872984a67d5b 96 currentErrString.resize(256);
MAA 7:872984a67d5b 97 char checkSum[5];
MAA 7:872984a67d5b 98 memset(checkSum,'\0',5);
MAA 7:872984a67d5b 99 unsigned short chkSum = 0;
MAA 7:872984a67d5b 100
MAA 7:872984a67d5b 101 addToCurrentErrString(LINESTART);
MAA 7:872984a67d5b 102 addToCurrentErrString(tag);
MAA 7:872984a67d5b 103 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 104 addToCurrentErrString(identifier_id);
MAA 7:872984a67d5b 105 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 106 addToCurrentErrString(group_id);
MAA 7:872984a67d5b 107 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 108 addToCurrentErrString(date);
MAA 7:872984a67d5b 109 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 110 addToCurrentErrString(time);
MAA 7:872984a67d5b 111 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 112 addToCurrentErrString("ZZZ");
MAA 7:872984a67d5b 113 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 114 addToCurrentErrString(HEADEREND);
MAA 7:872984a67d5b 115 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 116 addToCurrentErrString(s1);
MAA 7:872984a67d5b 117 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 118 addToCurrentErrString(source_id);
MAA 7:872984a67d5b 119 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 120 addToCurrentErrString(interpreter_id);
MAA 7:872984a67d5b 121 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 122 addToCurrentErrString(data_line_version);
MAA 7:872984a67d5b 123 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 124 addToCurrentErrString(source_firmware_version);
MAA 7:872984a67d5b 125 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 126 addToCurrentErrString(interpreter_firmware_version);
MAA 7:872984a67d5b 127 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 128 addToCurrentErrString(HEADEREND);
MAA 7:872984a67d5b 129 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 130 addToCurrentErrString("BMAG");
MAA 7:872984a67d5b 131 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 132 addToCurrentErrString("C02");
MAA 7:872984a67d5b 133 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 134 addToCurrentErrString("C03");
MAA 7:872984a67d5b 135
MAA 7:872984a67d5b 136 //calculate checksum
MAA 7:872984a67d5b 137 for(int i = 0; i < strlen(currentString.c_str()); i++){
MAA 7:872984a67d5b 138 if(currentString[i] != '>' || currentString[i] != '<'){
MAA 7:872984a67d5b 139
MAA 7:872984a67d5b 140 chkSum = update_crc_16(chkSum, currentErrString[i]);
MAA 7:872984a67d5b 141
MAA 7:872984a67d5b 142 }
MAA 7:872984a67d5b 143 }
MAA 7:872984a67d5b 144
MAA 7:872984a67d5b 145 sprintf(checkSum, "%04X", chkSum);
MAA 7:872984a67d5b 146
MAA 7:872984a67d5b 147 //append rest of string
MAA 7:872984a67d5b 148 addToCurrentErrString(SPACE);
MAA 7:872984a67d5b 149 addToCurrentErrString(checkSum);
MAA 8:d6287c33b54a 150 addToCurrentErrString(LINESTOP);
MAA 7:872984a67d5b 151 };
MAA 7:872984a67d5b 152
MAA 4:c70ef089a3fd 153 //Fills the array for calculation of the CRC-16 with values
MAA 4:c70ef089a3fd 154 void SPS::init_crc16_tab()
MAA 4:c70ef089a3fd 155 {
MAA 4:c70ef089a3fd 156 int i, j;
MAA 4:c70ef089a3fd 157 unsigned short crc, c;
MAA 4:c70ef089a3fd 158
MAA 4:c70ef089a3fd 159 for (i = 0; i < 256; i++)
MAA 4:c70ef089a3fd 160 {
MAA 4:c70ef089a3fd 161 crc = 0;
MAA 4:c70ef089a3fd 162 c = (unsigned short) i;
MAA 4:c70ef089a3fd 163
MAA 4:c70ef089a3fd 164 for (j = 0; j < 8; j++)
MAA 4:c70ef089a3fd 165 {
MAA 4:c70ef089a3fd 166 if ((crc ^ c) & 0x0001)
MAA 4:c70ef089a3fd 167 crc = (crc >> 1) ^ P_16;
MAA 4:c70ef089a3fd 168 else
MAA 4:c70ef089a3fd 169 crc = crc >> 1;
MAA 4:c70ef089a3fd 170
MAA 4:c70ef089a3fd 171 c = c >> 1;
MAA 4:c70ef089a3fd 172 }
MAA 4:c70ef089a3fd 173 crc_tab16[i] = crc;
MAA 4:c70ef089a3fd 174 }
MAA 4:c70ef089a3fd 175 crc_tab16_init = 1;
MAA 4:c70ef089a3fd 176 };
MAA 4:c70ef089a3fd 177
MAA 4:c70ef089a3fd 178
MAA 4:c70ef089a3fd 179 // The function update_crc_16 calculates a new CRC-16 value based on the
MAA 4:c70ef089a3fd 180 // previous value of the CRC and the next byte of the data to be checked.
MAA 4:c70ef089a3fd 181 unsigned short SPS::update_crc_16(unsigned short crc, char c)
MAA 4:c70ef089a3fd 182 {
MAA 4:c70ef089a3fd 183 unsigned short tmp, short_c;
MAA 4:c70ef089a3fd 184
MAA 4:c70ef089a3fd 185 short_c = 0x00ff & (unsigned short) c;
MAA 4:c70ef089a3fd 186
MAA 4:c70ef089a3fd 187 if (!crc_tab16_init)
MAA 4:c70ef089a3fd 188 init_crc16_tab();
MAA 4:c70ef089a3fd 189
MAA 4:c70ef089a3fd 190 tmp = crc ^ short_c;
MAA 4:c70ef089a3fd 191 crc = (crc >> 8) ^ crc_tab16[tmp & 0xff];
MAA 4:c70ef089a3fd 192
MAA 4:c70ef089a3fd 193 return crc;
MAA 4:c70ef089a3fd 194 };
MAA 5:11782a2008c2 195
MAA 5:11782a2008c2 196
MAA 5:11782a2008c2 197 //Gets / returns current sps data string
MAA 5:11782a2008c2 198 string SPS::getCurrentString(void){
MAA 5:11782a2008c2 199 return this->currentString;
MAA 5:11782a2008c2 200 };
MAA 5:11782a2008c2 201
MAA 5:11782a2008c2 202
MAA 5:11782a2008c2 203 //Get error status
MAA 5:11782a2008c2 204 bool SPS::getErrStatus(void){
MAA 5:11782a2008c2 205 return this->errStatus;
MAA 5:11782a2008c2 206 };
MAA 5:11782a2008c2 207
MAA 5:11782a2008c2 208 //Set err status
MAA 5:11782a2008c2 209 void SPS::setErrStatus(bool status){
MAA 5:11782a2008c2 210 this->errStatus = status;
MAA 5:11782a2008c2 211 };
MAA 5:11782a2008c2 212
MAA 5:11782a2008c2 213 //get headerstring
MAA 5:11782a2008c2 214 string SPS::getHeaderString(void){
MAA 5:11782a2008c2 215 return this->headerString;
MAA 5:11782a2008c2 216 };
MAA 5:11782a2008c2 217
MAA 5:11782a2008c2 218 //add data to current string
MAA 5:11782a2008c2 219 void SPS::addToCurrentString(string data){
MAA 5:11782a2008c2 220 int currentStartIndex = strlen(currentString.c_str());
MAA 5:11782a2008c2 221 char dataStrLen = 0;
MAA 8:d6287c33b54a 222 int index = 0;
MAA 8:d6287c33b54a 223
MAA 5:11782a2008c2 224 dataStrLen = strlen(data.c_str());
MAA 5:11782a2008c2 225
MAA 5:11782a2008c2 226 for(int i = 0; i < dataStrLen; i++){
MAA 8:d6287c33b54a 227
MAA 8:d6287c33b54a 228 if((currentString[currentStartIndex+i] != '\r') || (currentString[currentStartIndex+i] != '\n')){
MAA 8:d6287c33b54a 229
MAA 8:d6287c33b54a 230 currentString[currentStartIndex+i] = data[index];
MAA 8:d6287c33b54a 231 index += 1;
MAA 8:d6287c33b54a 232
MAA 8:d6287c33b54a 233 }
MAA 8:d6287c33b54a 234
MAA 5:11782a2008c2 235 }
MAA 5:11782a2008c2 236 }
MAA 5:11782a2008c2 237
MAA 5:11782a2008c2 238 void SPS::addToCurrentString(char data){
MAA 5:11782a2008c2 239 int currentStartIndex = strlen(currentString.c_str());
MAA 5:11782a2008c2 240 currentString[currentStartIndex] = data;
MAA 6:6d1683c8b26b 241 };
MAA 6:6d1683c8b26b 242
MAA 7:872984a67d5b 243 //add data to current Errstring
MAA 7:872984a67d5b 244 void SPS::addToCurrentErrString(string data){
MAA 7:872984a67d5b 245 int currentStartIndex = strlen(currentErrString.c_str());
MAA 7:872984a67d5b 246 char dataStrLen = 0;
MAA 7:872984a67d5b 247 dataStrLen = strlen(data.c_str());
MAA 7:872984a67d5b 248
MAA 7:872984a67d5b 249 for(int i = 0; i < dataStrLen; i++){
MAA 7:872984a67d5b 250 currentErrString[currentStartIndex+i] = data[i];
MAA 7:872984a67d5b 251 }
MAA 7:872984a67d5b 252
MAA 7:872984a67d5b 253 };
MAA 7:872984a67d5b 254 void SPS::addToCurrentErrString(char data){
MAA 7:872984a67d5b 255 int currentStartIndex = strlen(currentErrString.c_str());
MAA 7:872984a67d5b 256 currentErrString[currentStartIndex] = data;
MAA 7:872984a67d5b 257
MAA 7:872984a67d5b 258 };
MAA 7:872984a67d5b 259
MAA 6:6d1683c8b26b 260
MAA 6:6d1683c8b26b 261 void SPS::generateSpsFilename(string formattedDate){
MAA 6:6d1683c8b26b 262
MAA 7:872984a67d5b 263 fileNameString.resize(25);
MAA 6:6d1683c8b26b 264
MAA 7:872984a67d5b 265 fileNameString.replace(0, 10, "/usb/BMAG_");
MAA 6:6d1683c8b26b 266
MAA 7:872984a67d5b 267 fileNameString[10] = formattedDate[0];
MAA 7:872984a67d5b 268 fileNameString[11] = formattedDate[1];
MAA 7:872984a67d5b 269 fileNameString[12] = formattedDate[2];
MAA 7:872984a67d5b 270 fileNameString[13] = formattedDate[3];
MAA 7:872984a67d5b 271 fileNameString[14] = '-';
MAA 7:872984a67d5b 272 fileNameString[15] = formattedDate[5];
MAA 7:872984a67d5b 273 fileNameString[16] = formattedDate[6];
MAA 7:872984a67d5b 274 fileNameString[17] = '-';
MAA 7:872984a67d5b 275 fileNameString[18] = formattedDate[8];
MAA 7:872984a67d5b 276 fileNameString[19] = formattedDate[9];
MAA 6:6d1683c8b26b 277
MAA 7:872984a67d5b 278 fileNameString[20] = '.';
MAA 7:872984a67d5b 279 fileNameString[21] = 's';
MAA 7:872984a67d5b 280 fileNameString[22] = 'p';
MAA 7:872984a67d5b 281 fileNameString[23] = 's';
MAA 6:6d1683c8b26b 282
MAA 6:6d1683c8b26b 283 };
MAA 6:6d1683c8b26b 284
MAA 6:6d1683c8b26b 285
MAA 6:6d1683c8b26b 286 string SPS::getSpsFileName(void){
MAA 6:6d1683c8b26b 287
MAA 6:6d1683c8b26b 288 return this->fileNameString;
MAA 6:6d1683c8b26b 289
MAA 7:872984a67d5b 290 };
MAA 7:872984a67d5b 291
MAA 7:872984a67d5b 292 //Gets / returns current sps err string
MAA 7:872984a67d5b 293 string SPS::getCurrentErrString(void){
MAA 7:872984a67d5b 294 return this->currentErrString;
MAA 5:11782a2008c2 295 };