Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
SPS/SPS.cpp@8:d6287c33b54a, 2017-03-23 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |